W SQL Server sys.dm_os_performance_counters
widok dynamicznego zarządzania systemem zwraca liczniki wydajności obsługiwane przez serwer.
Jedna z wielu rzeczy, które możesz zrobić za pomocą sys.dm_os_performance_counters
zwraca listę przestarzałych funkcji w bieżącym wystąpieniu programu SQL Server. Możesz również użyć tej listy, aby zobaczyć, ile razy przestarzała funkcja została użyta od czasu uruchomienia programu SQL Server.
Jest to prawdopodobnie najszybszy sposób, aby dowiedzieć się, czy używasz przestarzałej funkcji SQL Server.
Widok zwraca wiersz na licznik wydajności obsługiwany przez serwer. Obiekt SQLServer:Deprecated Features udostępnia licznik do monitorowania funkcji oznaczonych jako przestarzałe. Ma cntr_value
kolumna, która zawiera licznik użycia zawierający listę przypadków napotkania przestarzałej funkcji od czasu ostatniego uruchomienia programu SQL Server.
Dlatego, uruchamiając zapytanie w tym widoku, możemy zwrócić wszystkie przestarzałe funkcje wraz z liczbą napotkanych każdego z nich od ostatniego uruchomienia SQL Server.
Przykład 1 – Zwróć wszystkie przestarzałe funkcje napotkane od uruchomienia programu SQL Server
Dlatego możemy użyć następującego zapytania, aby znaleźć wszystkie przestarzałe funkcje, które napotkano od czasu ostatniego uruchomienia programu SQL Server, wraz z liczbą napotkanych elementów:
SELECT RTRIM(instance_name) 'Feature', cntr_value 'Usage Count' FROM sys.dm_os_performance_counters WHERE object_name = 'SQLServer:Deprecated Features' AND cntr_value > 0;
Wynik:
+-----------------------------------+---------------+ | Feature | Usage Count | |-----------------------------------+---------------| | String literals as column aliases | 1 | | TIMESTAMP | 1 | | numbered_procedures | 1 | | sysdatabases | 3 | | sp_db_vardecimal_storage_format | 1 | | XP_API | 2 | +-----------------------------------+---------------+
Tutaj użyłem RTRIM()
funkcja (możesz także użyć TRIM()
), aby przyciąć białe miejsce po prawej stronie obiektu. Zrobiłem to, ponieważ instance_name
kolumna używa nchar(128)
typ danych, który powoduje wypełnienie kolumny do 128 znaków. Dzięki przycięciu białych znaków przykład może teraz zmieścić się na stronie internetowej bez konieczności przewijania w poziomie.
Przykład 2 – Zwróć funkcje według nazwy
Jeśli interesuje Cię konkretna funkcja, zawsze możesz ją wyszukać według nazwy:
SELECT TRIM(instance_name) 'Feature', cntr_value 'Usage Count' FROM sys.dm_os_performance_counters WHERE object_name = 'SQLServer:Deprecated Features' AND instance_name LIKE '%timestamp%';
Wynik:
+------------------------------------+---------------+ | Feature | Usage Count | |------------------------------------+---------------| | INSERT NULL into TIMESTAMP columns | 0 | | TIMESTAMP | 1 | +------------------------------------+---------------+
Więcej szczegółów na temat każdej wycofanej funkcji
Powyższa metoda jest dobrym szybkim sposobem sprawdzenia, czy przestarzałe funkcje są nadal używane w Twojej aplikacji. Jedną wadą jest to, że nie dostarcza wielu informacji o tym, co z tym zrobić, ani nawet o tym, które instrukcje SQL zawierały przestarzałą funkcję, nie mówiąc już o tym, który użytkownik ją uruchomił.
Możesz użyć rozszerzonych sesji zdarzeń, aby zwrócić więcej informacji, takich jak nieprawidłowe instrukcje SQL, użytkownik, który je uruchomił, czas uruchomienia i inne. Możesz nawet zapisać to wszystko w pliku dziennika, aby móc się do niego później odnieść. Aby zapoznać się z przykładem, zobacz Używanie rozszerzonych zdarzeń do rejestrowania przestarzałych funkcji używanych w instancji SQL Server.
Zapoznaj się również z artykułem firmy Microsoft Przestarzałe funkcje aparatu bazy danych w programie SQL Server 2017, aby uzyskać zalecenia dotyczące postępowania z każdym przestarzałym elementem. Ta lista jest dokładnie taka sama jak ta dla SQL Server 2016.