VACUUM FREEZE vs. VACUUM FULL


18

บางคนสามารถอธิบายความแตกต่างระหว่างVACUUMPostgreSQL ประเภทนี้ได้ไหม

ฉันอ่านเอกสาร แต่มันเพิ่งบอกว่าFULLล็อคตารางและFREEZE"ค้าง" สิ่งอันดับ ฉันคิดว่ามันเหมือนกัน ฉันผิดหรือเปล่า?


คุณอ่านเอกสารแล้วหรือยัง ที่จะเป็นโอกาสที่ดีที่มีการเชื่อมโยงกับสิ่งที่คุณได้อ่าน ...
เออร์วิน Brandstetter

คำตอบ:


12

นี่คือคำตอบสั้น ๆ สั้น ๆ

สูญญากาศเต็มนำออกล็อคพิเศษและสร้างตารางใหม่เพื่อให้ไม่มีบล็อกว่างเปล่า (เราจะสมมติว่าปัจจัยเติมเต็มคือ 100% ในตอนนี้)

การตรึงสุญญากาศทำเครื่องหมายเนื้อหาของตารางด้วยการประทับเวลาการทำธุรกรรมพิเศษที่บอก postgres ว่าไม่จำเป็นต้องถูกดูดตลอดเวลา อัปเดตครั้งต่อไปรหัสที่ตรึงนี้จะหายไป

ตัวอย่างเช่นฐานข้อมูล template0 ถูกหยุดเนื่องจากไม่มีการเปลี่ยนแปลง (โดยค่าเริ่มต้นคุณไม่สามารถเชื่อมต่อได้)

บ่อยครั้งที่ autovacuum daemon จะตรวจสอบฐานข้อมูลและตารางของมันเพื่อดูว่าต้องดูดฝุ่นอะไรบ้าง หากตารางเป็นสุญญากาศจะหยุดและไม่เคยอัปเดต autovacuum daemon จะผ่านไปโดยง่าย นอกจากนี้การป้องกัน "ล้อมรอบ" ใน postgresql จะไม่เริ่มขึ้นในตารางนั้นเช่นกัน

tl; dr freezing ทำเครื่องหมายตารางว่าไม่ต้องการการบำรุงรักษา autovac ใด ๆ การอัพเดทครั้งต่อไปจะยกเลิกการตรึงไว้


ดังนั้นVACUUM FREEZEต้องล็อคพิเศษบนโต๊ะหรือไม่? ดูเหมือนว่าควรจะเป็นอย่างนั้นมิฉะนั้นคุณอาจเสี่ยงที่จะทำให้แถวจากธุรกรรมที่ใช้งานอยู่ทั่วโลกสามารถมองเห็นได้ ฉันอาจจะเข้าใจผิด ...
Parthian Shot

ไม่มีการแช่แข็งสูญญากาศไม่ได้สูญญากาศเต็มไม่
Scott Marlowe

6

เพื่ออธิบายเพิ่มเติมสิ่งที่ Jayadevan เขียน

วิธีที่ Postgres ทำงานกับธุรกรรมและการติดตามข้อมูลที่มองเห็นได้คือการเปรียบเทียบรหัสธุรกรรมภายใน อย่างไรก็ตามเนื่องจากการทำธุรกรรมเหล่านั้นเป็นจำนวนเต็ม 32- บิตไม่ช้าก็เร็วพวกเขาจะล้อมรอบและดังนั้นการทำธุรกรรมใหม่จะดูเหมือนว่ามันทำในอดีต (และจะปรากฏในการทำธุรกรรมปัจจุบันในขณะที่มันไม่ควร) ในขณะที่ ธุรกรรมที่เก่ากว่าจะดูเหมือนว่าพวกเขากำลังดำเนินการในอนาคต (และเนื่องจากในอนาคตยังไม่มีข้อมูลนั้นจะไม่ปรากฏให้เห็นอีกต่อไป)

สิ่งที่ Postgres ทำเพื่อแก้ไขปัญหานั้นคือการกำหนดแต่ละแถวที่เก่าพอที่จะเสี่ยงต่อการประสบกับปัญหานี้โดยเฉพาะ id ธุรกรรมพิเศษที่เก่ากว่าทุก ๆ ธุรกรรม คุณสามารถดูได้ราวกับว่ารหัสธุรกรรมที่ถูกต้องอยู่ในช่วงตั้งแต่ 0 ถึง 2147483647 มันจะตั้งรหัสธุรกรรมสำหรับแถวปัจจุบันทั้งหมดเป็น -1

อย่างไรก็ตามเนื่องจากสูญญากาศนั้นโดยทั่วไปจะทำเครื่องหมายพื้นที่ว่างสำหรับการใช้งานซ้ำมันจึงใช้ได้กับหน้าข้อมูลที่มีการเปลี่ยนแปลงเท่านั้น

สิ่งที่VACUUM FREEZEทำคือพื้นตรึงรหัสธุรกรรมสำหรับทุกหน้าไม่ว่าถ้าพวกเขาได้รับการแก้ไขหรือไม่เพื่อให้ทุกแถวในปัจจุบันจะเห็นได้เช่นเดิมสำหรับการทำธุรกรรมใหม่ทั้งหมด

อย่างไรก็ตามเป็นรุ่น 8.2 VACUUM FREEZEได้ถูกคัดค้านและไม่ควรใช้ แต่มีพารามิเตอร์vacuum_freeze_table_ageและautovacuum_freeze_max_ageระบุจำนวนธุรกรรมที่สามารถเกิดขึ้นได้ก่อนที่จะทำการสแกนเสร็จสิ้นบนโต๊ะ (ทำภายในภายในตารางอย่างมีประสิทธิภาพVACUUM FREEZE)


3
เป็นอย่างไรบ้างที่เอกสารไม่ได้กล่าวถึงVACUUM FREEZEการถูกคัดค้าน / หมดกำลังใจ?
dezso

น่าสนใจ มันทำสำหรับรุ่นระหว่าง 8.2 และ 9.0 บางทีพวกเขาลบการคัดค้านเนื่องจากอาจเป็นคุณลักษณะที่ดีที่มี
Jimmy Stenke

1

คัดลอก / วางจากคำตอบเมื่อฉันถามคำถามเดียวกัน - "สูญญากาศปกติทำเครื่องหมายพื้นที่ว่างสำหรับการใช้ซ้ำและ reclaims พื้นที่ว่างเปล่าในตอนท้ายของความสัมพันธ์ดังนั้นถ้าพื้นที่ว่างอยู่ตรงกลาง ฯลฯ จะไม่สามารถ เรียกคืนเพียงนำมาใช้ใหม่

สูญญากาศอัดเต็มความสัมพันธ์เรียกคืนพื้นที่ว่างทั้งหมด มันต้องมีการล็อคแบบเอกสิทธิ์และไม่ดีสำหรับระบบการผลิตโดยทั่วไปเพราะสิ่งนี้

ดังนั้นจุดประสงค์ของการสูญญากาศทั่วไปคือไม่เรียกคืนพื้นที่จากตาราง แต่เพื่อให้สามารถนำกลับมาใช้ใหม่ได้ในภายหลัง จุดประสงค์ของการสูญญากาศแบบเต็มคือการเรียกคืนพื้นที่ที่สูญเปล่าทั้งหมดด้วยค่าใช้จ่ายของการล็อคแบบเอกสิทธิ์เฉพาะบุคคลและประสิทธิภาพของฐานข้อมูลในขณะที่เกิด

ดังนั้นเนื่องจากสูญญากาศปกติไม่ได้ถูกออกแบบมาเพื่อเรียกคืนทุกสิ่งที่คุณไม่ควรแปลกใจที่จริงแล้วมันไม่ได้เรียกคืนทุกสิ่ง ลองการทดสอบของคุณกับชุดข้อมูลขนาดใหญ่ที่มีการลบแบบสุ่ม ฯลฯ เพื่อดูความแตกต่างระหว่างสุญญากาศปกติและเต็ม "

http://postgresql.1045698.n5.nabble.com/vacuuming-doubt-td5782828.html

หากต้องการเพิ่มในส่วนนี้สุญญากาศเต็มจะสร้างไฟล์ใหม่สำหรับตาราง (ไฟล์ที่มีอยู่จะมีขนาดเป็น 0) ดังนั้นระบบปฏิบัติการสามารถเรียกคืนพื้นที่


2
คำถามถามVACUUM FREEZEโดยเฉพาะ
Erwin Brandstetter

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