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

2 sposoby sprawdzenia, czy przestarzałe funkcje są nadal używane w wystąpieniu programu SQL Server

To niesamowite, jak szybko niektóre funkcje mogą stać się przestarzałe w świecie oprogramowania.

W tym artykule przedstawiono dwie metody sprawdzenia, czy w instancji SQL Server są używane przestarzałe funkcje.

Metoda 1 – sys.dm_os_performance_counters

Być może najszybszym sposobem na to jest użycie sys.dm_os_performance_counters widok dynamicznego zarządzania systemem. Wśród wielu rzeczy, które możesz zrobić w tym widoku, jest lista przestarzałych funkcji wraz z informacją, ile razy były one używane od czasu uruchomienia SQL Server.

Oto przykład zaczerpnięty z mojego artykułu Najszybszy sposób na znalezienie przestarzałych funkcji, które są nadal używane w instancji SQL Server:

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             |
+-----------------------------------+---------------+

W tym przykładzie zwracam tylko te wiersze, w których object_name kolumna ma wartość SQLServer:Deprecated Features i cntr_value wartość kolumny jest większa od zera.

Możesz usunąć cntr_value kolumny z tego zapytania, aby zwrócić wszystkie przestarzałe funkcje, w tym te, które nie były używane.

Metoda 2 – Użyj rozszerzonych wydarzeń

Innym sposobem na to jest użycie rozszerzonych wydarzeń. Jest to bardziej wszechstronna metoda i można jej użyć do utworzenia pliku dziennika zawierającego wszystkie przypadki użycia przestarzałej funkcji, wraz z użytą instrukcją SQL zawierającą przestarzałą funkcję, osobę, która ją uruchomiła, bazę danych, na której była uruchomiona itp. Poniżej znajduje się przykład.

Utwórz wydarzenie:

CREATE EVENT SESSION [Deprecation Events] ON SERVER 
ADD EVENT sqlserver.deprecation_announcement(
    ACTION(
        sqlserver.database_name,
        sqlserver.sql_text,
        sqlserver.username
        )
),
ADD EVENT sqlserver.deprecation_final_support(
    ACTION(
        sqlserver.database_name,
        sqlserver.sql_text,
        sqlserver.username
    )
)
ADD TARGET package0.event_file(
    SET filename=N'/var/opt/mssql/tmp/DeprecationEvents.xel'
    )
WITH (
    TRACK_CAUSALITY = ON
    );

Rozpocznij wydarzenie:

ALTER EVENT SESSION [Deprecation Events] ON SERVER STATE = START;

Uruchom przestarzały kod:

SELECT * FROM sys.sql_dependencies;

Przeczytaj dziennik:

SELECT
    EventXml.value('(@timestamp)[1]', 'datetime2') AS [timestamp],
    EventXml.value('(action[@name="username"]/value)[1]', 'nvarchar(256)') AS username,
    EventXml.value('(action[@name="database_name"]/value)[1]', 'nvarchar(128)') AS database_name,
    EventXml.value('(action[@name="sql_text"]/value)[1]', 'varchar(4000)') AS sql_text,
    EventXml.value('(@name)[1]', 'varchar(50)') AS event_name,
    EventXml.value('(data[@name="feature"]/value)[1]', 'varchar(255)') AS feature,
    EventXml.value('(data[@name="message"]/value)[1]', 'varchar(max)') AS message
FROM (SELECT CAST(event_data AS XML) AS XmlEventData
    FROM sys.fn_xe_file_target_read_file (
        '/var/opt/mssql/tmp/DeprecationEvents*.xel', 
        null, 
        null, 
        null
    )) AS EventTable
CROSS APPLY EventTable.XmlEventData.nodes('event') AS q(EventXml);

Wynik (przy użyciu wyjścia pionowego):

timestamp     | 2019-10-31 04:03:06.5280000
username      | sa
database_name | Test
sql_text      | SELECT * FROM sys.sql_dependencies;
event_name    | deprecation_announcement
feature       | sql_dependencies
message       | sql_dependencies will be removed in a future version of SQL Server. Avoid using this feature in new development work, and plan to modify applications that currently use it.

Aby uzyskać bardziej szczegółowe omówienie tej metody, zobacz Używanie rozszerzonych zdarzeń do rejestrowania przestarzałych funkcji używanych w wystąpieniu programu SQL Server. Ten artykuł zawiera ten sam przykład, ale z nieco bardziej szczegółowymi informacjami.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ROUND() Przykłady w SQL Server

  2. Jak używać zmiennej tabeli w dynamicznej instrukcji sql?

  3. 3 obszary, które skorzystają na wykorzystaniu narzędzia do monitorowania wydajności serwera SQL

  4. Zbieranie danych o wydajności za pomocą narzędzia SQLDiag | Rozwiązywanie problemów z wydajnością serwera SQL -6

  5. Wprowadzenie do funkcji zdefiniowanych przez użytkownika w SQL Server