จะเกิดอะไรขึ้นเมื่อเราเพิ่มดัชนีไปยังตารางที่มีอยู่ด้วยข้อมูลจำนวนมาก


11

ฉันมีตารางซึ่งจะมีประมาณ ~ 15 ล้านระเบียน ตอนนี้ฉันต้องเพิ่มดัชนีในตาราง

การเพิ่มดัชนีจะใช้เวลาในการอัปเดตทุกรายการในตาราง

ฉันค่อนข้างสับสนว่าการเพิ่มดัชนีจะทำให้ระบบหยุดทำงานหรือไม่

ถ้าใช่ฉันจะเอาชนะการหยุดทำงานได้อย่างไร


คำตอบ:


10

ด้วยธรรมดาCREATE INDEXตารางจะถูกล็อคสำหรับการเขียน แต่ไม่ได้อ่าน

ใช้CREATE INDEX CONCURRENTLYเพื่อหลีกเลี่ยงการล็อคการเขียนเช่นกัน

จากเอกสาร PostgreSQL เมื่อCREATE INDEX :

เมื่อใช้ตัวเลือกนี้ PostgreSQL จะสร้างดัชนีโดยไม่มีการล็อกใด ๆ ที่ป้องกันการแทรกการปรับปรุงหรือการลบที่เกิดขึ้นพร้อมกัน ในขณะที่การสร้างดัชนีมาตรฐานล็อกเอาต์เขียน (แต่ไม่อ่าน) บนตารางจนกว่าจะเสร็จ ดู - มีหลายประการที่จะตระหนักถึงเมื่อใช้ตัวเลือกนี้เป็นดัชนีก่อสร้างพร้อมกัน

และเจาะจงมากขึ้น (เช่น@ypercube แสดงความคิดเห็น ):

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

เหมืองเน้นหนัก

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