แบบสอบถาม PostgreSQL เดียวสามารถใช้หลายคอร์ได้หรือไม่?


56

ในรุ่นล่าสุดของ PostgreSQL (ณ เดือนธันวาคม 2013) เราสามารถแบ่งปันแบบสอบถามระหว่างสองคอร์หรือมากกว่านั้นเพื่อรับประสิทธิภาพที่เพิ่มขึ้นได้หรือไม่ หรือเราควรจะได้รับแกนเร็วขึ้น?

คำตอบ:


48

ไม่เวอร์ชัน PostgreSQL ก่อนหน้า v9.6 โปรดดูคำถามที่พบบ่อยของ PostgreSQL : PostgreSQL ใช้ทรัพยากร CPU อย่างไร

เซิร์ฟเวอร์ PostgreSQL ใช้กระบวนการ (ไม่ใช่เธรด) เซสชั่นแต่ละฐานข้อมูลเชื่อมต่อกับซิงเกิ้ลของระบบปฏิบัติการ PostgreSQL (OS) กระบวนการ เซสชันหลายครั้งจะถูกกระจายไปทั่ว CPU โดยอัตโนมัติที่มีอยู่ทั้งหมดโดยระบบปฏิบัติการ ระบบปฏิบัติการยังใช้ CPU ในการจัดการดิสก์ I / O และเรียกใช้งานที่ไม่ใช่ฐานข้อมูลอื่น ๆ แอปพลิเคชันไคลเอนต์สามารถใช้เธรดซึ่งแต่ละโปรแกรมเชื่อมต่อกับกระบวนการฐานข้อมูลแยกต่างหาก

ตั้งแต่เวอร์ชัน 9.6 บางส่วนของเคียวรีสามารถรันแบบขนานในกระบวนการ OS แยกต่างหากซึ่งอนุญาตให้ใช้คอร์ CPU หลายตัว แบบสอบถามแบบขนานจะถูกเปิดใช้งานตามค่าเริ่มต้นในเวอร์ชัน 10 (max_parallel_workers_per_gather) โดยคาดว่าจะมีการขนานกันเพิ่มเติมในการเผยแพร่ในอนาคต


37

PostgreSQL 9.6+ ขึ้นไปจะเริ่มเห็น Parquery-Query ในที่สุดก็มาถึง PostgreSQL

สำหรับตัวอย่างแนวคิดเช่นParallel Scan / Parallel Join / Parallel Aggregatesตอนนี้ได้รับการอบเข้ามาแล้วและมีอีกมากมายที่จะมาในไม่ช้า

สิ่งที่น่าตื่นเต้นจริงๆคือมีรายงานยืนยันnear-linear speed-upในบางกรณีซึ่งค่อนข้างน่าประทับใจ!


8

ไม่ แต่มีวิธีแก้ปัญหา :)

ฉันพบ parsel (การเลือกแบบขนาน) ฟังก์ชั่น plpgsql ซึ่งแยกแบบสอบถามของคุณตามคีย์หลักแล้วเชื่อมต่อกับฐานข้อมูลผ่านส่วนขยาย dblink และรอคิวรีย่อยทั้งหมด

https://gist.github.com/mjgleaso/8031067

ผู้เขียนยังเขียนบทความเกี่ยวกับฟังก์ชั่นนี้: http://geeohspatial.blogspot.com/2013/12/a-simple-function-for-parallel-queries_18.html


3

ไม่แต่ละการเชื่อมต่อจะสร้างกระบวนการแยกต่างหากบนเซิร์ฟเวอร์

คุณสามารถ "เลียนแบบ" การขนานกันโดยใช้ภาษาโพรซีเดอร์เธรดเช่น pljava สร้างโพรซีเดอร์ Java (ฟังก์ชัน) ที่เปิดใช้หลายเธรดและสร้างผลลัพธ์ผลลัพธ์โดยใช้พนักงานหลายคน แบ็คเอนด์ได้รับการซิงโครไนซ์เพื่อให้ผู้ปฏิบัติงานแต่ละคนสามารถอัปเดตเอาต์พุตอะซิงโครนัส

Java มีการสนับสนุนที่ดีสำหรับการประสานงานของเธรด / ความร่วมมือ

เป็นตัวอย่างนี่จะเป็นสิ่งที่ดีสำหรับการใช้งาน CPU มากหรือการทำงานที่มีความยาวเครือข่าย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.