ฉันจะบอกได้อย่างไรว่าถึงเวลาที่จะจัดเรียงฐานข้อมูล SQLServer ของฉันแล้วหรือยัง?


9

แนวปฏิบัติที่ดีที่สุดสำหรับการวัดการกระจายตัวของฐานข้อมูล SQLServer คือการเปิด / ปิดการทำงานของฐานข้อมูลและการพิจารณาว่าเมื่อใดที่จะจัดเรียงตารางฐานข้อมูล SQLServer

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

คำตอบ:


22

ฉันแน่ใจว่าจะมีคำตอบที่น่าสนใจเกี่ยวกับเรื่องนี้เนื่องจากมีข้อขัดแย้งมากมายเกี่ยวกับตัวชี้วัดที่ควรพิจารณา ฉันเขียน DBCC INDEXDEFRAG, SHOWCONTIG และออกแบบการแทนที่ของพวกเขาสำหรับปี 2005 รวมถึงเขียนเนื้อหาหนังสือออนไลน์ดังนั้นฉันจะให้มุมมองของฉันและอธิบายตัวเลขใน Books Online และตัวช่วยสร้างแผนการบำรุงรักษาสำหรับปี 2005 ซึ่งฉันเลือก

ตัวชี้วัดที่ดีที่สุดสองข้อที่ควรพิจารณาสำหรับการแตกแฟรกเมนต์ดัชนีคือ: 1) (2005) การแตกแฟรกเมนต์เฉลี่ยเป็นเปอร์เซ็นต์ / (2000) การสแกนส่วนย่อยแบบลอจิคัล 2) (2005) ความหนาแน่นหน้าเฉลี่ย / (2000) ไบต์เฉลี่ยต่อเพจอิสระ

สิ่งเหล่านี้ใช้กับดัชนีแบบคลัสเตอร์และแบบไม่รวมกลุ่ม

1 กำลังวัดว่ามีการแตกแฟรกเมนต์เชิงตรรกะเท่าใด นี่คือเมื่อลำดับตรรกะของเพจที่ระดับลีฟของดัชนีไม่ตรงกับลำดับทางกายภาพ สิ่งนี้จะป้องกัน Storage Engine ไม่ให้ทำการอ่านหัวที่มีประสิทธิภาพในระหว่างการสแกนช่วง ดังนั้น # 1 มีผลต่อประสิทธิภาพการสแกนช่วงไม่ใช่ประสิทธิภาพการค้นหาเดี่ยว

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

เกณฑ์? กฎทั่วไปของหัวแม่มือของฉันคือการกระจายตัวน้อยกว่า 10% ไม่ทำอะไรเลย 10-30% ทำ ALTER INDEX ... REORGANIZE (2005) / DBCC INDEXDEFRAG (2000) มากกว่า 30% ทำการเปลี่ยนแปลงดัชนี ... สร้างใหม่ (2005) / DBCC DBREINDEX (2000) นี่เป็นภาพรวมที่สมบูรณ์และเกณฑ์สำหรับคุณจะแตกต่างกันไป

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

ฉันไม่ได้แตะที่นี่เกี่ยวกับการแลกเปลี่ยนระหว่างสองวิธีในการลบการแยกส่วนสิ่งต่าง ๆ เช่น FILLFACTOR / PADINDEX เพื่อพยายามลดการกระจายตัวของข้อมูลและทำการจัดเรียงข้อมูลน้อยลงเปลี่ยนรูปแบบสคีมา / เข้าถึงเพื่อบรรเทาการกระจายตัวหรือแผนการบำรุงรักษาประเภทต่างๆ .

โอ้ btw ฉันแนะนำเสมอว่าอย่าไปสนใจเรื่องการแตกแฟรกเมนต์ในดัชนีที่มีน้อยกว่า 1,000 หน้า นี่เป็นเพราะดัชนีน่าจะเป็นหน่วยความจำส่วนใหญ่ (และเพราะมีคนถามหาหมายเลขและฉันต้องมาด้วย)

คุณสามารถอ่านเพิ่มเติมเกี่ยวกับเรื่องนี้ในบทความ TechNet นิตยสารของฉันในการบำรุงรักษาฐานข้อมูลที่http://technet.microsoft.com/en-us/magazine/cc671165.aspxในปี 2000 ตามเอกสารเกี่ยวกับการปฏิบัติที่ดีที่สุดดัชนีการ defrag ผมช่วยเขียนที่http://technet.microsoft.com/en-us/library/cc966523.aspxและบนบล็อกของฉันภายใต้หมวดหมู่การกระจายตัวที่http://www.sqlskills.com/BLOGS/PAUL/category/Fragmentation.aspx

ฉันตอบคำถามแบบนี้มากไปฉันคิดว่า แต่มันเป็นหนึ่งในปุ่มลัดของฉัน หวังว่านี่จะช่วย :-)

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