W przyszłym roku pomagam w czyszczeniu kilku środowisk SQL Server.
Mamy około 10 000 procedur przechowywanych i szacujemy, że tylko około 1000 z nich jest używanych regularnie, a kolejne 200 jest używanych w rzadkich przypadkach, co oznacza, że mamy dużo pracy.
Ponieważ mamy wiele działów i zespołów, które mają dostęp do tych baz danych i procedur, nie zawsze to my wywołujemy procedury, co oznacza, że musimy ustalić, jakie procedury są wywoływane. Ponadto chcemy to ustalić w ciągu kilku miesięcy, a nie kilku dni (co eliminuje pewne możliwości).
Jednym podejściem jest wykorzystanie SQL Server Profiler
i śledzenie wywoływanych procedur i porównanie ich z listą procedur, które posiadamy, przy jednoczesnym zaznaczeniu, czy procedury są używane, czy nie. Odtąd moglibyśmy przenieść procedury na inny schemat, na wypadek gdyby wyszedł jakiś dział.
Czy tutaj stosuje się Profiler
najbardziej skuteczne podejście? I / lub czy ktoś z was zrobił coś podobnego i znalazł inny sposób / lepszy sposób na zrobienie tego?
źródło
To pytanie może być przydatne, ma zastosowanie do tabel i kolumn, ale sugeruje użycie zewnętrznego narzędzia ApexSQL Clean, które może również znaleźć nieużywane procedury składowane, a także wszystkie obiekty, do których nie odwołuje się żaden inny obiekt w bazie danych lub w zewnętrznych bazach danych
Zastrzeżenie: Pracuję dla ApexSQL jako inżynier wsparcia
źródło
unreferenced stored procedures
, zamiast tego OP chce znaleźć nieużywany SP. Twoja odpowiedź nie stanowi odpowiedzi na to pytanie.Jeśli korzystasz z SQL Server 2008+, możesz także używać zdarzeń rozszerzonych z celem histogramu . Być może byłby to mniejszy ciężar niż ślad.
AFAIK musiałbyś utworzyć inną sesję dla każdej interesującej bazy danych, ponieważ nie widziałem żadnych oznak, że możliwe jest tworzenie wiaderków na wielu kolumnach. Krótki przykład poniżej włącza się
database_id=10
A następnie po kilkukrotnym uruchomieniu niektórych procedur przechowywanych w tym DB i pobraniu danych za pomocą
Dane wyjściowe to
Pokazuje, że procedura z
object_id
od1287675635
wykonano 36 razy na przykład.asynchronous_bucketizer
Jest pamięć tylko dlatego najlepiej byłoby założyć coś, ankiety to tak często, i zapisuje do pamięci trwałej.źródło
WHERE (source_database_id IN (10,15,20))
ale niestety nie jest to obsługiwane.object_id
(lub tym samymobject_name
) w różnych bazach danych osobno, i nie sądzę, że jest to również możliwe.extended events
dodano go w 2012 r., A nie w 2008 r.?Jako kontynuacja skryptu Kin. Oto prosty skrypt do utworzenia tabeli do śledzenia zużycia w czasie oraz skrypt do okresowej aktualizacji.
źródło
Ten post zawiera również skrypt do wyszukiwania nieużywanych wyrzutów: Znajdź nieużywane tabele bazy danych w SQL Server Poniżej znajduje się skrypt z artykułu, zmieniłem typ tabeli „U” na typ procedury składowanej „P”:
źródło