sql >> Base de Datos >  >> RDS >> Sqlserver

La forma más rápida de encontrar funciones obsoletas que aún se utilizan en una instancia de SQL Server (ejemplo de T-SQL)

En SQL Server, sys.dm_os_performance_counters La vista de gestión dinámica del sistema devuelve los contadores de rendimiento que mantiene el servidor.

Una de las muchas cosas que puede hacer con sys.dm_os_performance_counters es devolver una lista de características obsoletas en la instancia actual de SQL Server. También puede utilizar esta lista para ver cuántas veces se ha utilizado una característica en desuso desde que se inició SQL Server.

Esta es posiblemente la forma más rápida de averiguar si está utilizando una función obsoleta en SQL Server.

La vista devuelve una fila por contador de rendimiento mantenido por el servidor. El objeto SQLServer:Deprecated Features proporciona un contador para monitorear las funciones designadas como obsoletas. Tiene un cntr_value columna, que proporciona un recuento de uso que enumera la cantidad de veces que se encontró la función en desuso desde que se inició SQL Server por última vez.

Por lo tanto, al ejecutar una consulta en esta vista, podemos devolver todas las funciones obsoletas junto con un recuento de cuántas veces se encontró cada una desde la última vez que se inició SQL Server.

Ejemplo 1:devuelva todas las funciones obsoletas encontradas desde el inicio de SQL Server

Por lo tanto, podemos usar la siguiente consulta para buscar todas las funciones obsoletas que se han encontrado desde que se inició SQL Server por última vez, junto con la cantidad de veces que se ha encontrado cada elemento:

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

Aquí usé el RTRIM() función (también puede usar TRIM() ) para recortar el espacio en blanco a la derecha de la función. Hice esto porque instance_name la columna usa un nchar(128) tipo de datos, lo que hace que la columna se rellene a 128 caracteres. Al recortar el espacio en blanco, el ejemplo ahora puede caber en la página web sin necesidad de desplazamiento horizontal.

Ejemplo 2:Devolver funciones por nombre

Si tiene una función específica que le interesa, siempre puede buscarla por nombre:

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

Más detalles sobre cada función obsoleta

El método anterior es una buena manera rápida de ver si las funciones obsoletas todavía se usan en su aplicación. Una desventaja es que no proporciona mucha información sobre qué hacer al respecto, o incluso qué instrucciones SQL incluyeron la función obsoleta, y mucho menos qué usuario la ejecutó.

Puede usar sesiones de eventos extendidas para devolver más información, como las declaraciones SQL ofensivas, el usuario que las ejecutó, la hora en que se ejecutó y más. Incluso puede capturarlo todo en un archivo de registro para poder consultarlo más tarde. Consulte Uso de eventos extendidos para registrar funciones obsoletas que se utilizan en una instancia de SQL Server para ver un ejemplo.

Consulte también el artículo de Microsoft Funciones obsoletas del motor de base de datos en SQL Server 2017 para obtener recomendaciones sobre cómo tratar cada elemento obsoleto. Esa lista es exactamente la misma que la de SQL Server 2016.