13 คะแนน โดย GN⁺ 2024-09-27 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • 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 ความคิดเห็น

 
GN⁺ 2024-09-27
ความคิดเห็นบน Hacker News
  • มีการแสดงความยินดีกับการออกรุ่นใหม่ของ PostgreSQL 17 พร้อมกล่าวถึงการปรับปรุงหลายด้าน

    • ปรับปรุงโครงสร้างหน่วยความจำของงาน vacuum ทำให้การใช้หน่วยความจำลดลงได้สูงสุด 20 เท่า
    • เครื่องมือสำรองข้อมูล pg_basebackup รองรับ incremental backup และมีการเพิ่มยูทิลิตี pg_combinebackup
    • ปรับปรุง Foreign Data Wrapper (FDW) ให้สามารถประมวลผลซับคิวรี EXISTS และ IN บนเซิร์ฟเวอร์ระยะไกลได้
  • มีความเห็นเกี่ยวกับความมีประโยชน์ของความสามารถด้าน JSON

    • เน้นย้ำประโยชน์ของความสามารถ JSON ในฐานข้อมูลเชิงสัมพันธ์
    • กล่าวถึงความสำคัญของความสามารถในการสร้าง JSON จากข้อมูล
    • แสดงความคาดหวังว่าอยากเรียนรู้ความสามารถ JSON_TABLE
  • มีการแชร์ประสบการณ์การใช้งานความสามารถ JSON_TABLE

    • เน้นว่าการเก็บ JSON response ไว้ในคอลัมน์ jsonb แล้วเขียน view เพื่อ parse นั้นมีประโยชน์
    • รู้สึกยินดีที่ได้เห็นแนวทางนี้ในเอกสารความสามารถใหม่ของ PostgreSQL
  • กล่าวถึงการปรับปรุงประสิทธิภาพและฟีเจอร์ด้าน UX ของ PostgreSQL 17

    • รองรับคอลัมน์ ID และ exclusion constraint ในตารางแบบ partitioned
    • เพิ่ม collation provider ที่เป็นอิสระจากแพลตฟอร์มและ immutable เพื่อรับประกันผลการเรียงลำดับที่สม่ำเสมอสำหรับคิวรีที่อิงข้อความ
  • มีความประทับใจต่อ change log

    • เสียดายที่ไม่มี UUIDv7 PR รวมอยู่ด้วย
  • แชร์ประสบการณ์ที่ต้องย้ายจาก Oracle ไป MSSQL เพราะปัญหาความเชื่อมั่นต่อ open source software

    • หัวหน้ามองว่า “ไม่สามารถไว้วางใจโอเพนซอร์สสำหรับซอฟต์แวร์ธุรกิจได้”
  • ขอบคุณสำหรับการพัฒนาอย่างต่อเนื่องของ Postgres และหวังว่าจะมีการรองรับส่วนขยาย Incremental View Maintenance (IVM) อย่างเป็นทางการ

  • คาดหวังการรองรับการอัปเกรดข้ามเมเจอร์เวอร์ชันของ PostgreSQL

  • หวังว่า Postgres จะเพิ่ม system-versioned tables

  • คาดหวังว่าการปรับปรุงการผสานรวม JSON ของ Postgres จะเปิดทางให้เกิดพาราไดม์ใหม่ของเว็บเฟรมเวิร์ก