Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

2 начина да видите дали остарелите функции все още се използват в екземпляр на SQL сървър

Удивително е колко бързо някои функции могат да отпаднат в света на софтуера.

Тази статия представя два метода, за да видите дали оттеглените функции се използват в екземпляр на SQL Server.

Метод 1 – sys.dm_os_performance_counters

Може би най-бързият начин да го направите е да използвате sys.dm_os_performance_counters изглед за динамично управление на системата. Сред многото неща, които можете да правите с този изглед, е да получите списък с оттеглените функции, заедно с това колко пъти са били използвани от стартирането на SQL Server.

Ето пример, взет от моята статия Най-бързият начин за намиране на остарели функции, които все още се използват в екземпляр на 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;

Резултат:

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

В този пример връщам само онези редове, където object_name колоната има стойност SQLServer:Deprecated Features и cntr_value стойността на колоната е по-голяма от нула.

Можете да премахнете cntr_value колона от тази заявка, за да върне всички оттеглени функции, включително тези, които не са били използвани.

Метод 2 – Използвайте разширени събития

Друг начин да го направите е да използвате разширени събития. Това е по-изчерпателен метод и можете да го използвате, за да създадете регистрационен файл, който съдържа всички случаи на използване на оттеглена функция, заедно с използвания SQL оператор, който съдържа оттеглената функция, кой я е стартирал, базата данни, срещу която е била стартирана и т.н. По-долу е даден пример.

Създайте събитието:

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
    );

Започнете събитието:

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

Изпълнете някакъв остарял код:

SELECT * FROM sys.sql_dependencies;

Прочетете дневника:

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);

Резултат (с помощта на вертикален изход):

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.

За по-подробна дискусия относно този метод вижте Използване на разширени събития за регистриране на остарели функции, използвани в екземпляр на SQL сървър. Тази статия включва същия пример, но с малко повече подробности.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Добавете ограничение CHECK към съществуваща таблица в SQL Server (T-SQL)

  2. Как да промените типа данни на колона в SQL Server (T-SQL)

  3. Не може да се зареди DLL 'SqlServerSpatial.dll'

  4. Изследване на опциите за изчакване на заключване с нисък приоритет в SQL Server 2014 CTP1

  5. Използване на резултата от израз (например извикване на функция) в списък с параметри на запомнени процедури?