Ustalanie, że indeksy w tabeli są nieużywane


12

Uruchomiłem ten skrypt, aby znaleźć dodatkowe indeksy

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

Wiem, że gdy ostatnie szukanie_użytkownika / skanowanie / wyszukiwanie ma wartość NULL, żaden użytkownik nie używał indeksu od ostatniego restartu. Ale zastanawiam się, jakie są system_scans / lookups / seek…? Ponieważ w pewnej tabeli znalazłem 5, które nie miały aktywności użytkownika, ale jedna miała aktywność systemu 10 dni temu. Czy ktoś ma wgląd w to, jakie mogą być skany / próby / wyszukiwania systemu? Te tabele wydają się naprawdę przesadzone i chciałbym przyciąć tłuszcz.


Zadałem to samo pytanie na sqlservercentral i tam też otrzymałem odpowiedzi. Link do tematu jest następujący: sqlservercentral.com/Forums/Topic1205983-391-3.aspx?Update=1
Aushin


@ W linku, który zamieściłeś powyżej, prowadzisz do wyjątkowo pomieszanej dyskusji pełnej uczuć i zadań pobocznych, których nikt tak naprawdę nie chce oglądać.
Magier

Odpowiedzi:


10

Utrzymanie indeksu (przebudowa / reorganizacja) i aktywność DBCC CHECKDB najprawdopodobniej możliwe aktualizacje statystyk. Czy skonfigurowano zaplanowaną konserwację?

Jeśli nie ma dostępu użytkownika, bin je. Pamiętaj tylko o czasie, w którym zdecydujesz, że nie są już używane. Czy istnieją na przykład jakieś raporty tygodniowe lub miesięczne?

Podczas wyszukiwania możesz również znaleźć duplikaty indeksów .

Edycja: dotyczy linku SSC

Od szybkiego przejrzenia wątku wygląda na to, że ludzie SSC mieli podobne myśli. Zajmują jednak bardziej ostrożne stanowisko w sprawie możliwego „sporadycznego” wykorzystania tych indeksów, przyjmując stanowisko, że ktoś umieścił je tam z jakiegoś powodu, co jest całkowicie uzasadnionym argumentem. Kontrargumentem jest to, że zbyt często jest dokładnie odwrotnie, ktoś je tam umieścił, ponieważ uważali , że to właściwe, ale z powodu braku zrozumienia lub braku testowania, tak nie było.

Przywróciłem kilka systemów z krawędzi, nie robiąc nic poza upuszczeniem nieużywanych i zduplikowanych indeksów. Nadmierne indeksowanie może powodować chaos.

To twój system, musisz zrozumieć i zważyć ryzyko pozostawienia tych indeksów na miejscu lub ich upuszczenia. Jeśli zdecydujesz się na upuszczenie, udokumentuj, co robisz, dlaczego to robisz, skryptuj indeksy i publikuj je wszystkim zainteresowanym stronom.


+1 w tej sprawie - jestem pewien, że to te czynności, o których wspomniał Mark. Nic, co nie powinno Cię dotyczyć - rozwinąłem to w dodatkowej odpowiedzi poniżej.
Mike Walsh,

Dzięki za to. Miałem też wątek na temat sqlservercentral na ten temat. Zamieszczę link do tego, co powiedzieli w moim pierwotnym pytaniu.
Aushin,

9

Glenn Berry napisał kilka świetnych skryptów, które pomogą Ci znaleźć brakujące indeksy. Sugeruję użycie jego skryptów, które eliminują część zgadywanych zadań. Te skrypty nie tylko szukają zerowych lub zerowych wyszukiwań użytkowników / skanów / wyszukiwań, ale także szukają indeksów, które mają duże odchylenie między aktywnością odczytu i aktywnością zapisu, prawdopodobnie wciąż skutkując lepszą ogólną wydajnością po upuszczeniu. Sprawdziłbym jego skrypty - możesz zacząć od jego postu .

Nie martwiłbym się aktywnością systemu. To nie pogorszy się, jeśli usuniesz indeksy, w rzeczywistości może to być aktywność, która dzieje się tylko na tym indeksie, ponieważ istnieje. Najważniejsze, na czym Ci zależy, to aktywność związana z czytaniem i pisaniem oraz równoważenie tego.


5

Pamiętaj, że indeksy dostarczają także użytecznych informacji do Optymalizatora zapytań, nawet jeśli nie są używane. Na przykład zrobiłem sporo rzeczy na temat wpływu Unikatowości. Jeśli usuniesz unikalny indeks, ponieważ nie ma on żadnych wyszukiwań ani skanów, nadal możesz negatywnie wpłynąć na wydajność.


Świetna uwaga i uważam, że skrypty Glenna szukają wyjątkowych ograniczeń. Jeśli nie jego, być może inny zestaw, będę musiał to zbadać.
Mike Walsh

0

Oprócz tego, co wszyscy inni stwierdzili, indeksy w odniesieniu do odnośnych kolumn FK mogą nigdy nie pokazywać prób lub skanów, ale są używane pod przykryciem.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.