- PostgreSQL 17 มาพร้อมการปรับปรุงประสิทธิภาพครั้งใหญ่ การจัดการหน่วยความจำที่ดีขึ้น การเพิ่มประสิทธิภาพการเข้าถึงสตอเรจ การปรับปรุงเวิร์กโหลดที่มีการทำงานพร้อมกันสูง การเพิ่มความเร็วในการโหลดและส่งออกข้อมูลจำนวนมาก รวมถึงการปรับปรุงการทำงานของคิวรีบนดัชนี
การปรับปรุงประสิทธิภาพทั่วทั้งระบบ
- ปรับปรุงโครงสร้างหน่วยความจำภายในของกระบวนการ vacuum ใน PostgreSQL ซึ่งเป็นกระบวนการสำคัญสำหรับการทำงานปกติ เพื่อลดการใช้หน่วยความจำได้สูงสุดถึง 20 เท่า
- ทำให้ vacuum เร็วขึ้นและใช้ทรัพยากรร่วมลดลง จึงเปิดให้เวิร์กโหลดใช้ทรัพยากรได้มากขึ้น
- ปรับปรุงประสิทธิภาพของชั้น I/O อย่างต่อเนื่อง
- ปรับปรุงการประมวลผล Write-Ahead Log(WAL) ทำให้มีอัตราการเขียนข้อมูลสูงขึ้นได้สูงสุด 2 เท่าในเวิร์กโหลดที่มีการทำงานพร้อมกันสูง
- อินเทอร์เฟซสตรีมมิง I/O แบบใหม่ช่วยเพิ่มความเร็วของการสแกนแบบลำดับ (อ่านข้อมูลทั้งหมดจากตาราง) และการอัปเดตสถิติ execution plan ของคำสั่ง ANALYZE
- ขยายผลการปรับปรุงประสิทธิภาพไปยังการรันคิวรีด้วย
- ปรับปรุงประสิทธิภาพของคิวรีที่มีเงื่อนไข IN และใช้ดัชนี B-tree (วิธีทำดัชนีพื้นฐานของ PostgreSQL)
- รองรับการสร้างดัชนีแบบขนานใน BRIN index
- มีการปรับปรุงหลายอย่างสำหรับการวางแผนคิวรี
- การเพิ่มประสิทธิภาพสำหรับข้อกำหนด NOT NULL
- ปรับปรุงการประมวลผล Common Table Expression (คิวรี WITH)
- ขยายการรองรับ SIMD (Single Instruction/Multiple Data) เพื่อเร่งการคำนวณ เช่น การใช้ AVX-512 กับฟังก์ชัน bit_count
ยกระดับประสบการณ์ของนักพัฒนาให้แข็งแกร่งยิ่งขึ้น
- PostgreSQL เป็นฐานข้อมูลเชิงสัมพันธ์รายแรกที่เพิ่มการรองรับ JSON (ในปี 2012)
- ใน PostgreSQL 17 ได้ขยายการรองรับมาตรฐาน SQL/JSON เพิ่มเติม
- สามารถแปลงข้อมูล JSON เป็นตาราง PostgreSQL มาตรฐานได้ผ่าน JSON_TABLE
- รองรับ SQL/JSON constructor (JSON, JSON_SCALAR, JSON_SERIALIZE) และฟังก์ชันคิวรี (JSON_EXISTS, JSON_QUERY, JSON_VALUE)
- เพิ่มนิพจน์ jsonpath ที่เน้นการแปลงข้อมูล JSON เป็นชนิดข้อมูลพื้นฐานของ PostgreSQL (ตัวเลข บูลีน สตริง วันที่/เวลา)
- เพิ่ม clause RETURNING และความสามารถในการอัปเดต view ให้กับคำสั่ง MERGE
- ปรับปรุงความสามารถในการโหลดข้อมูลจำนวนมากและการส่งออกข้อมูล
- เมื่อใช้คำสั่ง COPY เพื่อส่งออกแถวขนาดใหญ่ จะได้ประสิทธิภาพดีขึ้นสูงสุด 2 เท่า
- ปรับปรุงประสิทธิภาพของ COPY เมื่อ encoding ต้นทางและปลายทางตรงกัน
- เพิ่มตัวเลือก ON_ERROR เพื่อให้สามารถนำเข้าต่อได้แม้เกิดข้อผิดพลาดระหว่างการแทรกข้อมูล
- ขยายความสามารถในการจัดการข้อมูลที่กระจายอยู่บนพาร์ทิชันและ PostgreSQL instance ระยะไกล
- รองรับการใช้คอลัมน์ ID และข้อกำหนด exclusion บนตารางพาร์ทิชัน
- สามารถ push down ซับคิวรี EXISTS และ IN ไปยังเซิร์ฟเวอร์ระยะไกลได้ด้วย postgres_fdw
- มี provider สำหรับการจัดเรียงข้อมูลในตัวที่ไม่ขึ้นกับแพลตฟอร์มและคงที่
- ให้ semantics การจัดเรียงคล้ายกับการจัดเรียงข้อมูลแบบ C แต่ใช้ UTF-8 encoding แทน SQL_ASCII
- เมื่อใช้ provider การจัดเรียงข้อมูลใหม่นี้ คิวรีที่อิงข้อความจะให้ผลการจัดเรียงเหมือนกันไม่ว่า PostgreSQL จะรันอยู่ที่ใด
ปรับปรุง logical replication สำหรับ high availability และการอัปเกรดเวอร์ชันหลัก
- logical replication ใช้สำหรับสตรีมข้อมูลแบบเรียลไทม์
- ในเวอร์ชันก่อนหน้า จำเป็นต้องลบ logical replication slot ระหว่างการอัปเกรดเวอร์ชันหลัก ซึ่งทำให้ต้องซิงก์ข้อมูลไปยัง subscriber ใหม่หลังอัปเกรด
- ตั้งแต่ PostgreSQL 17 เป็นต้นไป ไม่จำเป็นต้องลบ logical replication slot อีกต่อไป ทำให้กระบวนการอัปเกรดง่ายขึ้น
- มีความสามารถควบคุม failover สำหรับ logical replication ทำให้สามารถติดตั้งใช้งานในสภาพแวดล้อมที่ต้องการ high availability ได้ยืดหยุ่นยิ่งขึ้น
- เปิดตัวเครื่องมือบรรทัดคำสั่ง pg_createsubscriber ที่สามารถแปลง physical replica ให้เป็น logical replica ใหม่ได้
ตัวเลือกเพิ่มเติมสำหรับความปลอดภัยและการจัดการการปฏิบัติงาน
- PostgreSQL 17 ขยายวิธีที่ผู้ใช้สามารถจัดการวงจรชีวิตโดยรวมของระบบฐานข้อมูลได้มากขึ้น
- เพิ่มตัวเลือก TLS ใหม่ชื่อ sslnegotiation ที่สามารถทำ TLS handshake โดยตรงได้เมื่อใช้ ALPN
- เพิ่มบทบาทสำเร็จรูป pg_maintain สำหรับมอบสิทธิ์ในการทำงานด้านการบำรุงรักษา
- pg_basebackup ซึ่งเป็นยูทิลิตีสำรองข้อมูลที่มาพร้อมกับ PostgreSQL ตอนนี้รองรับ incremental backup และเพิ่มยูทิลิตี pg_combinebackup สำหรับประกอบ full backup ขึ้นใหม่
- pg_dump มีตัวเลือกใหม่ชื่อ --filter เพื่อเลือกอ็อบเจ็กต์ที่จะรวมอยู่เมื่อสร้างไฟล์ดัมป์
- ปรับปรุงความสามารถด้านการมอนิเตอร์และการวิเคราะห์
- EXPLAIN จะแสดงเวลาที่ใช้ไปกับการอ่านและเขียน local I/O block
- เพิ่มตัวเลือกใหม่สองรายการคือ SERIALIZE และ MEMORY ซึ่งมีประโยชน์ในการตรวจสอบเวลาที่ใช้ในการแปลงข้อมูลสำหรับการส่งผ่านเครือข่าย และปริมาณหน่วยความจำที่ใช้
- รายงานความคืบหน้าของการล้างดัชนี
- เพิ่ม system view ชื่อ pg_wait_events ซึ่งเมื่อใช้ร่วมกับ pg_stat_activity จะช่วยให้เห็นสาเหตุที่ active session กำลังรออยู่
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
มีการแสดงความยินดีกับการออกรุ่นใหม่ของ PostgreSQL 17 พร้อมกล่าวถึงการปรับปรุงหลายด้าน
pg_basebackupรองรับ incremental backup และมีการเพิ่มยูทิลิตีpg_combinebackupมีความเห็นเกี่ยวกับความมีประโยชน์ของความสามารถด้าน JSON
มีการแชร์ประสบการณ์การใช้งานความสามารถ JSON_TABLE
กล่าวถึงการปรับปรุงประสิทธิภาพและฟีเจอร์ด้าน UX ของ PostgreSQL 17
มีความประทับใจต่อ change log
แชร์ประสบการณ์ที่ต้องย้ายจาก Oracle ไป MSSQL เพราะปัญหาความเชื่อมั่นต่อ open source software
ขอบคุณสำหรับการพัฒนาอย่างต่อเนื่องของ Postgres และหวังว่าจะมีการรองรับส่วนขยาย Incremental View Maintenance (IVM) อย่างเป็นทางการ
คาดหวังการรองรับการอัปเกรดข้ามเมเจอร์เวอร์ชันของ PostgreSQL
หวังว่า Postgres จะเพิ่ม system-versioned tables
คาดหวังว่าการปรับปรุงการผสานรวม JSON ของ Postgres จะเปิดทางให้เกิดพาราไดม์ใหม่ของเว็บเฟรมเวิร์ก