Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Najszybszy sposób na znalezienie przestarzałych funkcji, które są nadal używane w wystąpieniu programu SQL Server (przykład T-SQL)

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wybrać wszystkie rekordy z jednej tabeli, które nie istnieją w innej tabeli?

  2. Wybierz / wstaw wersję Upsert:czy istnieje wzorzec projektowy dla wysokiej współbieżności?

  3. Łączenie wartości kolumn w listę rozdzielaną przecinkami

  4. Jak połączyć wiele wierszy o tym samym identyfikatorze w sql?

  5. Dopasowywanie rozmyte SQL