วางดัชนีที่ไม่ได้ใช้ - ประเมินอันตรายที่ไม่คาดคิด


16

เรามีฐานข้อมูลขนาดใหญ่มากที่มีดัชนีที่ไม่ได้ใช้หลายร้อยตามสถิติ DMV ซึ่งได้รับการสะสมตั้งแต่เซิร์ฟเวอร์รีบูตครั้งล่าสุดในเดือนกรกฎาคม หนึ่งใน DBA ของเราทำข้อความเตือนต่อไปนี้ซึ่งไม่สมเหตุสมผลสำหรับฉัน:

  1. ก่อนที่เราจะวางดัชนีเราจำเป็นต้องตรวจสอบให้แน่ใจว่ามันไม่ได้บังคับใช้ข้อ จำกัด ที่ไม่ซ้ำกันเนื่องจากเครื่องมือเพิ่มประสิทธิภาพการสืบค้นอาจต้องมีดัชนีนี้อยู่
  2. เมื่อใดก็ตามที่มีการสร้างดัชนีสถิติที่เกี่ยวข้องกับดัชนีนั้นจะถูกสร้างขึ้นใน SQL Server ด้วย แบบสอบถามอาจไม่ได้ใช้ดัชนี แต่อาจใช้สถิติของแบบสอบถาม ดังนั้นเราอาจพบสถานการณ์หลังจากวางดัชนีประสิทธิภาพการสืบค้นเฉพาะจะแย่มาก SQL Server ไม่เก็บสถิติการใช้งานของสถิติ แม้ว่าเราจะเปิดใช้งานคุณลักษณะ "สร้างสถิติอัตโนมัติ" ในฐานข้อมูลของเรา แต่ฉันไม่ทราบว่าจะต้องทำตามพารามิเตอร์ทั้งหมดภายในใดก่อนที่เครื่องมือเพิ่มประสิทธิภาพการสืบค้นจะสร้างสถิติที่ขาดหายไป

เกี่ยวกับ # 1 ฉันคิดว่า SQL Server จะทำการค้นหาดัชนีเพื่อตรวจสอบความเป็นเอกลักษณ์ก่อนที่จะทำการแทรก / อัพเดทดังนั้นดัชนีจะไม่แสดงว่าไม่ได้ใช้งาน

เกี่ยวกับข้อที่ 2 เป็นไปได้จริงหรือ

โดยวิธีเมื่อฉันบอกว่าดัชนีไม่ได้ใช้ฉันหมายถึงไม่มีการค้นหาและไม่มีการสแกน


3
ฉันขอแนะนำให้คุณปิดการใช้งานดัชนีเมื่อคุณแน่ใจว่าดัชนีนั้นไม่ได้ใช้แม้กระทั่งการเรียกใช้รายงานสิ้นปี
Kin Shah

คำตอบ:


17

ข้อกังวลของ DBA ของคุณนั้นถูกต้อง

เกี่ยวกับ # 1 ฉันคิดว่า SQL Server จะทำการค้นหาดัชนีเพื่อตรวจสอบความเป็นเอกลักษณ์ก่อนที่จะทำการแทรก / อัพเดทดังนั้นดัชนีจะไม่แสดงว่าไม่ได้ใช้งาน

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

เกี่ยวกับข้อที่ 2 เป็นไปได้จริงหรือ

ใช่เป็นไปได้ที่เครื่องมือเพิ่มประสิทธิภาพจะใช้สถิติที่เกี่ยวข้องกับดัชนีโดยไม่มีแผนการดำเนินการขั้นสุดท้ายที่มีการเข้าถึงใด ๆ โดยใช้ดัชนีนั้น กระบวนการของการโหลดสถิติ 'ที่น่าสนใจ', การคำนวณค่าประมาณของ cardinality และการสร้างแผนการดำเนินการเสร็จสิ้นเป็นกิจกรรมที่ค่อนข้างอิสระ

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

DBA ของคุณรู้เรื่องของเขา / เธอ

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

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