Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Maneira mais rápida de encontrar recursos obsoletos que ainda estão sendo usados ​​em uma instância do SQL Server (exemplo T-SQL)


No SQL Server, os sys.dm_os_performance_counters a exibição de gerenciamento dinâmico do sistema retorna os contadores de desempenho mantidos pelo servidor.

Uma das muitas coisas que você pode fazer com sys.dm_os_performance_counters é retornar uma lista de recursos preteridos na instância atual do SQL Server. Você também pode usar essa lista para ver quantas vezes um recurso preterido foi usado desde que o SQL Server foi iniciado.

Essa é possivelmente a maneira mais rápida de descobrir se você está usando um recurso obsoleto no SQL Server.

A exibição retorna uma linha por contador de desempenho mantido pelo servidor. O objeto SQLServer:Deprecated Features fornece um contador para monitorar os recursos designados como obsoletos. Tem um cntr_value coluna, que fornece uma contagem de uso que lista o número de vezes que o recurso preterido foi encontrado desde a última inicialização do SQL Server.

Portanto, executando uma consulta nessa exibição, podemos retornar todos os recursos obsoletos juntamente com uma contagem de quantas vezes cada um foi encontrado desde a última inicialização do SQL Server.


Exemplo 1 – Retornar todos os recursos obsoletos encontrados desde a inicialização do SQL Server


Portanto, podemos usar a seguinte consulta para encontrar todos os recursos obsoletos encontrados desde a última inicialização do SQL Server, juntamente com o número de vezes que cada item foi encontrado:
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;

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

Aqui eu usei o RTRIM() função (você também pode usar TRIM() ) para cortar o espaço em branco à direita do recurso. Eu fiz isso porque o instance_name coluna usa um nchar(128) tipo de dados, que faz com que a coluna seja preenchida com 128 caracteres. Ao aparar o espaço em branco, o exemplo agora pode caber na página da Web sem exigir rolagem horizontal.

Exemplo 2 – Recursos de retorno por nome


Se você tiver um recurso específico no qual está interessado, sempre poderá pesquisá-lo pelo nome:
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%';

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

Mais detalhes sobre cada recurso obsoleto


O método acima é uma boa maneira rápida de ver se os recursos obsoletos ainda estão sendo usados ​​em seu aplicativo. Uma desvantagem é que ele não fornece muitas informações sobre o que fazer a respeito, ou mesmo quais instruções SQL incluíam o recurso obsoleto, muito menos qual usuário o executou.

Você pode usar sessões de eventos estendidos para retornar mais informações, como as instruções SQL incorretas, o usuário que o executou, a hora em que foi executado e muito mais. Você pode até mesmo capturar tudo em um arquivo de log para poder consultá-lo mais tarde. Consulte Usando eventos estendidos para registrar recursos obsoletos sendo usados ​​em uma instância do SQL Server para obter um exemplo.

Consulte também o artigo da Microsoft Recursos do mecanismo de banco de dados obsoletos no SQL Server 2017 para obter recomendações sobre como lidar com cada item obsoleto. Essa lista é exatamente a mesma do SQL Server 2016.