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


14

เรามีฐานข้อมูลบางส่วนที่มีการกระจายตัวของดัชนีที่> 95% ดีที่สุดที่ฉันสามารถบอกได้ว่าดัชนีไม่เคยถูกสร้างใหม่มากน้อยเท่าไหร่ ในหลายปี

(ในความเป็นธรรมตารางเหล่านี้ดูเหมือนจะเปิดใช้งานสถิติที่อัปเดตโดยอัตโนมัตินอกจากนี้ในความเป็นธรรมเขามีความขยันเกี่ยวกับการสำรองข้อมูล: บันทึกรายวันเต็มและ trx ทุกชั่วโมง)

เมื่อฉันถาม DBA กล่าวว่าเขาลังเลที่จะสร้างใหม่หรือจัดดัชนีใหม่ เมื่อฉันถามว่าทำไมเขาไม่สามารถพูดได้ ในที่สุดเขาก็บอกว่าเขากังวลเกี่ยวกับการสูญเสียข้อมูลที่อาจเกิดขึ้น ตัวอย่างเช่นหนึ่งในฐานข้อมูลนั้นถูกใช้โดยแอปพลิเคชันการบัญชี Great Plains Dynamics ของเราและเขาก็รู้สึกกังวลมากเกี่ยวกับเรื่องนั้น

ฉันไม่ใช่ DBA แต่จากสิ่งที่ฉันได้อ่านความกังวลของเขาดูเหมือนว่า ... ยากสำหรับฉันที่จะเข้าใจ

ฉันไม่แน่ใจว่าจะทำอย่างไรต่อไป คำแนะนำว่าฉันควรดำเนินการอย่างไร


นอกจากฐานข้อมูลนั้นจะถูกโจมตีอย่างหนักตลอด 24 ชั่วโมงและโลกก็จะยุติลงหากออฟไลน์มันไม่มีข้อแก้ตัวใด ๆ สำหรับพฤติกรรมดังกล่าว ฉันเขียนสคริปต์และสถิติซ้ำทุกสัปดาห์ในฐานข้อมูลกว่า 12,000 แห่งโดยไม่ต้องคิดใหม่ ใน 16 ปีฉันมีเพียงหนึ่งความเสียหายเนื่องจากตัวควบคุมที่ไม่ดี
Brain2000

คำตอบ:


22

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

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


11
+1 สำหรับความหวาดระแวงเป็นสิ่งที่ดี DBA Trait
Joel Coel

ฉันเข้าใจและชื่นชมความหวาดระแวงอย่างสมบูรณ์ วัดสองครั้งตัดครั้งเดียว ที่ที่ฉันรู้สึกสับสนดูเหมือนจะเป็นการขาดความเข้าใจมากกว่าความระมัดระวัง และแทนที่จะ "ลองกำหนดวิธีที่จะลองอย่างระมัดระวัง" มันคือ "ใช่ว่าจะไม่เกิดขึ้น" เรา (พูด) เก็บตัวอย่างอินสแตนซ์ของการทดสอบ EC2 ด้วยสำเนาของข้อมูลทำการจัดทำดัชนีใหม่อีกครั้งและทำการลบแถวตารางผลลัพธ์เพื่อยืนยันว่าไม่มีข้อมูลใดเสียหาย แผนแบบนั้นควรจะระมัดระวัง ... ตรงข้ามกับความเกียจคร้าน?
Greg Hendershott

1
เพียงเตือนความจำว่าการจัดระเบียบดัชนีใหม่จะออนไลน์อยู่เสมอ (ดัชนีทั้งหมดพร้อมใช้งานในระหว่างการจัดเรียงข้อมูล) และการสร้างดัชนีใหม่สามารถทำออนไลน์ได้WITH (ONLINE=ON)เช่นกัน( ตราบใดที่ดัชนีไม่มีคอลัมน์ BLOB)
Remus Rusanu

@ Greg Yeah, "อย่าแตะต้องเขาดัชนีที่แยกส่วนดังนั้นพวกเขาอาจจะเป็นอันตรายต่อประสิทธิภาพการทำงาน" ความคิดสับสนนรกออกจากฉันเกินไป - เป็นครั้งคราวREINDEXเป็น "การบำรุงรักษาเชิงป้องกัน" ในตารางที่เนื้อหาดัชนีเปลี่ยนแปลงค่อนข้างมาก พบบ่อยในประสบการณ์ของฉัน (ถ้าดัชนีเป็นแบบสแตติกส่วนใหญ่จะเป็นของน้อยกว่า)
voretaq7

@Remus คำแนะนำที่ดี - นี่จะช่วยลดผลกระทบด้านประสิทธิภาพ (คุณยังคงมี I / O ของดิสก์สูงซึ่งจะทำให้คุณช้าลง แต่อย่างน้อยสิ่งต่าง ๆ ที่จะใช้ดัชนียังคงสามารถใช้งานได้แทนที่จะใช้การสแกนตามลำดับ )
voretaq7

6

ไม่มีความเสี่ยงในการสูญหายของข้อมูลจากการสร้างใหม่หรือจัดเรียงดัชนี


หากคุณไม่ได้รับข้อมูลเสียหายในระดับหนึ่งหรือมีฮาร์ดแวร์ที่ล้มเหลว แต่ในกรณีใดกรณีหนึ่งการแตกแฟรกเมนต์ดัชนีเป็นสิ่งที่คุณกังวลน้อยที่สุด!
db2

แต่นั่นไม่ใช่ความเสียหายจากการสร้างดัชนี แต่มาจากปัญหาอื่น ๆ
mrdenny

4

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

ฉันเห็นด้วยกับ voretaq7 ถ้าเขากังวลเกี่ยวกับการทำงานกับดัชนีลองใช้มันในการพัฒนาหรือทดสอบเซิร์ฟเวอร์ก่อนเพื่อดูว่าปฏิกิริยาตอบสนองอย่างไร


วิธีการอีกวิธีหนึ่งอาจเป็นไปได้อย่างชัดเจนDROP INDEXและชัดเจนอีกครั้งCREATE INDEX- ฉันไม่แน่ใจเกี่ยวกับ SQL Server แต่ฉันรู้ว่า PostgreSQL บางครั้งอาจทำให้ดัชนีหายไปและเริ่มจากศูนย์แทนที่จะพยายามสร้างใหม่ ( REINDEX)
voretaq7

ฉันค่อนข้างมั่นใจว่าการปล่อยและการสร้างใหม่นั้นไม่จำเป็นใน SQL Server
Justin Dearing

@Justin ผมค่อนข้างมั่นใจว่าคุณขวา (ในความเป็นจริงจากวัน Sybase ของฉันฉันจำได้ว่าพฤติกรรม reindexing ได้อย่างมีประสิทธิภาพลดลง / สร้างจึงไม่มีเหตุการณ์ที่แปลกประหลาดดัชนีล็อคเหมือนใน Postgres)
voretaq7

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