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

Най-бързият начин за намиране на остарели функции, които все още се използват в екземпляр на SQL сървър (пример за T-SQL)

В SQL Server sys.dm_os_performance_counters изгледът за динамично управление на системата връща броячите на производителността, поддържани от сървъра.

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

Това вероятно е най-бързият начин да разберете дали използвате оттеглена функция в SQL Server.

Изгледът връща ред на брояч на производителност, поддържан от сървъра. Обектът SQLServer:Deprecated Features предоставя брояч за наблюдение на функциите, определени като остарели. Има cntr_value колона, която предоставя брой на използване, който изброява колко пъти е била срещана оттеглената функция от последното стартиране на SQL Server.

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

Пример 1 – Връщане на всички остарели функции, възникнали след стартирането на 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             |
+-----------------------------------+---------------+

Тук използвах RTRIM() функция (можете също да използвате TRIM() ), за да отрежете бялото пространство отдясно на елемента. Направих това, защото instance_name колоната използва nchar(128) тип данни, което кара колоната да бъде разширена до 128 знака. Чрез изрязване на празното пространство примерът вече може да се побере на уеб страницата, без да изисква хоризонтално превъртане.

Пример 2 – Връщане на функции по име

Ако имате конкретна функция, която ви интересува, винаги можете да я потърсите по име:

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%';

Резултат:

+------------------------------------+---------------+
| Feature                            | Usage Count   |
|------------------------------------+---------------|
| INSERT NULL into TIMESTAMP columns | 0             |
| TIMESTAMP                          | 1             |
+------------------------------------+---------------+

Повече подробности за всяка отхвърлена функция

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

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

Вижте също статията на Microsoft Deprecated Database Engine Features в SQL Server 2017 за препоръки как да се справите с всеки остарял елемент. Този списък е точно същият като този за 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. Как да получите ефективно управление на блокиране на Sql Server в C# с ADO?

  2. SQL Server:Разлика между PARTITION BY и GROUP BY

  3. SQL JOIN срещу IN производителност?

  4. Как мога да принудя рамката на обекта да вмъква колони за идентичност?

  5. TSQL PIVOT МНОГО КОЛОНИ