Menentukan bahwa Indeks pada tabel tidak digunakan

12

Saya telah menjalankan skrip ini untuk mencoba menemukan indeks asing

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

Saya tahu bahwa ketika last_user_seek / scan / lookup semuanya nol, bahwa tidak ada pengguna yang menggunakan indeks sejak restart terakhir. Tapi saya bertanya-tanya apa system_scans / lookup / seek ... are? Karena pada tabel tertentu saya menemukan 5 yang tidak memiliki aktivitas pengguna, tetapi satu memiliki aktivitas sistem 10 hari yang lalu. Adakah yang memiliki wawasan tentang pemindaian / pencarian / sistem apa yang mungkin dilakukan? Tabel-tabel ini tampaknya sangat diindeks dan saya ingin memotong lemak.

Aushin
sumber
Saya memposting pertanyaan yang sama di sqlservercentral dan mendapat tanggapan di sana juga. Tautan ke topik adalah: sqlservercentral.com/Forums/Topic1205983-391-3.aspx?Update=1
Aushin
Terkait: dba.stackexchange.com/q/56/2660
Nick Chammas
@Aushin tautan yang Anda posting di atas mengarah ke diskusi yang sangat kacau yang penuh dengan perasaan dan pencarian sampingan yang tidak ingin diikuti oleh siapa pun.
Magier

Jawaban:

10

Pemeliharaan indeks (rekondisi / reorganisasi) dan aktivitas DBCC CHECKDB kemungkinan besar, mungkin pembaruan statistik. Adakah pemeliharaan terjadwal yang dikonfigurasi?

Jika tidak ada akses pengguna, buang mereka. Berhati-hatilah dengan kerangka waktu yang Anda putuskan tidak digunakan lagi. Apakah ada tugas pelaporan mingguan atau bulanan misalnya?

Saat Anda mencari, gali juga indeks duplikat .

Edit: tentang tautan SSC

Dari pemindaian cepat melalui utas, sepertinya orang-orang SSC memiliki pemikiran yang sama. Namun mereka mengambil sikap yang lebih hati-hati tentang kemungkinan penggunaan indeks-indeks ini "sesekali", mengambil posisi yang seseorang letakkan di sana karena suatu alasan, argumen yang masuk akal. Argumen balasannya adalah bahwa sering kali justru sebaliknya, seseorang meletakkannya di sana karena mereka pikir itu adalah hal yang benar untuk dilakukan tetapi melalui kurangnya pemahaman atau kurangnya pengujian, ternyata tidak.

Saya telah membawa beberapa sistem kembali dari tepi jurang dengan melakukan apa pun selain menjatuhkan indeks yang tidak digunakan dan terduplikasi. Pengindeksan berlebihan dapat menyebabkan kekacauan.

Ini sistem Anda, Anda perlu memahami dan menimbang risiko meninggalkan indeks ini di tempat atau menjatuhkannya. Jika Anda memutuskan untuk melanjutkan drop, mendokumentasikan apa yang Anda lakukan, mengapa Anda melakukannya, skrip indeks dan publikasikan ke semua pihak yang berkepentingan.

Mark Storey-Smith
sumber
Memberi +1 pada ini - Saya yakin itu adalah aktivitas yang disebutkan oleh Mark. Tidak ada yang harus Anda perhatikan - perluas jawaban tambahan di bawah ini.
Mike Walsh
Terima kasih untuk ini. Saya juga punya utas tentang sqlservercentral tentang ini. Saya akan memposting tautan ke apa yang mereka katakan di pertanyaan awal saya.
Aushin
9

Glenn Berry telah menulis beberapa skrip hebat untuk membantu Anda menemukan indeks yang hilang. Saya sarankan menggunakan skripnya yang mengambil beberapa tebakan dari tugas untuk Anda. Skrip-skrip tersebut tidak hanya mencari null atau 0 pencarian pengguna / pemindaian / pencarian tetapi juga mencari indeks yang memiliki kecenderungan besar antara aktivitas baca dan aktivitas menulis, mungkin masih menghasilkan kinerja keseluruhan yang lebih baik dengan menjatuhkan. Saya akan memeriksa skripnya - Anda dapat memulai posting ini miliknya .

Saya tidak akan khawatir tentang aktivitas sistem. Itu bukan sesuatu yang akan menjadi lebih buruk jika Anda menghapus indeks, sebenarnya itu bisa menjadi aktivitas yang hanya terjadi pada indeks itu karena ada. Hal utama yang Anda pedulikan adalah aktivitas membaca pengguna dan menulis aktivitas pengguna dan menyeimbangkannya.

Mike Walsh
sumber
5

Ingatlah bahwa indeks juga memberikan informasi yang bermanfaat kepada Pengoptimal Kueri, meskipun tidak digunakan. Saya telah melakukan banyak hal tentang dampak Keunikan, misalnya. Jika Anda menghapus indeks unik karena tidak memiliki pencarian atau pemindaian, Anda masih dapat mempengaruhi kinerja.

Rob Farley
sumber
Poin bagus dan saya percaya bahwa skrip Glenn mencari kendala unik. Jika bukan miliknya, mungkin set yang berbeda, saya harus meneliti itu.
Mike Walsh
0

Selain apa yang dinyatakan orang lain, indeks terhadap kolom FK yang dirujuk mungkin tidak pernah menunjukkan pencarian atau pemindaian tetapi digunakan di bawah sampul.

Jeremy Lowell
sumber