การพิจารณาว่าดัชนีบนตารางไม่ได้ถูกใช้


12

ฉันใช้สคริปต์นี้เพื่อพยายามค้นหาดัชนีที่ไม่เกี่ยวข้อง

select o.name as TableName, i.name as IndexName, p.reserved_page_count * 8.0 / 1024 as     SpaceInMB, s.*
from     sys.dm_db_index_usage_stats s
inner join sys.objects o on s.object_id = o.object_id
inner join sys.indexes i on i.index_id = s.index_id and i.object_id = o.object_id
inner join sys.dm_db_partition_stats p on i.index_id = p.index_id and o.object_id =      p.object_id
where o.name = TableName

ฉันรู้ว่าเมื่อ last_user_seek / scan / ค้นหาเป็นโมฆะทั้งหมดไม่มีผู้ใช้ที่ใช้ดัชนีตั้งแต่รีสตาร์ทครั้งล่าสุด แต่ฉันสงสัยว่า system_scans / การค้นหา / การค้นหา ... คืออะไร? เพราะในตารางหนึ่งฉันพบ 5 ที่ไม่มีกิจกรรมของผู้ใช้ แต่มีกิจกรรมของระบบเมื่อ 10 วันที่แล้ว ใครบ้างมีความเข้าใจในสิ่งที่ระบบสแกน / แสวงหา / การค้นหาอาจจะ? ตารางเหล่านี้ดูเหมือนมีการทำดัชนีมากเกินไปและฉันต้องการตัดไขมัน


ฉันโพสต์คำถามเดียวกันบน sqlservercentral และได้รับคำตอบที่นั่นด้วย ลิงก์ไปยังหัวข้อคือ: sqlservercentral.com/Forums/Topic1205983-391-3.aspx?Update=1
Aushin

ที่เกี่ยวข้อง: dba.stackexchange.com/q/56/2660
Nick Chammas

@Aushin ลิงก์ที่คุณโพสต์ไว้ด้านบนนำไปสู่การพูดคุยที่ยุ่งเหยิงอย่างมากซึ่งเต็มไปด้วยความรู้สึกและภารกิจที่ไม่มีใครอยากทำตาม
Magier

คำตอบ:


10

การบำรุงรักษาดัชนี (สร้าง / จัดระเบียบใหม่) และกิจกรรม DBCC CHECKDB เป็นไปได้มากที่สุดซึ่งอาจเป็นข้อมูลอัปเดตทางสถิติ กำหนดการบำรุงรักษาใด ๆ ที่กำหนดค่า?

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

ในขณะที่คุณกำลังมองหาขุดดัชนีที่ซ้ำกันเช่นกัน

แก้ไข: เกี่ยวกับลิงค์ SSC

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

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

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


+1 เกี่ยวกับเรื่องนี้ - ฉันแน่ใจว่าเป็นกิจกรรมที่ทำเครื่องหมายไว้แล้ว ไม่มีอะไรที่ควรเกี่ยวข้องกับคุณ - ขยายคำตอบนั้นเพิ่มเติมในด้านล่าง
Mike Walsh

ขอบคุณสำหรับสิ่งนี้. ฉันยังมีหัวข้อใน sqlservercentral เกี่ยวกับเรื่องนี้ ฉันจะโพสต์ลิงก์ไปยังสิ่งที่พวกเขาพูดในคำถามเดิมของฉัน
Aushin

9

Glenn Berry ได้เขียนสคริปต์ที่ยอดเยี่ยมเพื่อช่วยให้คุณค้นหาดัชนีที่ขาดหายไป ฉันขอแนะนำให้ใช้สคริปต์ของเขาซึ่งจะช่วยให้คุณเดางานออกมาได้ สคริปต์เหล่านั้นไม่เพียง แต่มองหาค่าว่างหรือผู้ใช้ 0 การค้นหา / สแกน / ค้นหา แต่ยังมองหาดัชนีที่มีการเอียงขนาดใหญ่ระหว่างกิจกรรมการอ่านและกิจกรรมการเขียนซึ่งอาจทำให้ประสิทธิภาพโดยรวมลดลง ฉันต้องการตรวจสอบสคริปต์ของเขาออก - คุณจะได้รับการเริ่มต้นเกี่ยวกับเรื่องนี้โพสต์ของเขา

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


5

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


จุดที่ดีและฉันเชื่อว่าสคริปต์ของ Glenn มองหาข้อ จำกัด ที่ไม่เหมือนใคร ถ้าไม่ใช่ของเขาอาจเป็นชุดที่แตกต่างกันฉันจะต้องค้นคว้าเรื่องนั้น
Mike Walsh

0

นอกจากสิ่งที่คนอื่น ๆ ได้ระบุไว้ดัชนีของคอลัมน์ FK ที่อ้างอิงอาจไม่แสดงการค้นหาหรือสแกน แต่ใช้ภายใต้หน้ากาก

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