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.