Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Il modo più rapido per trovare funzionalità obsolete ancora in uso in un'istanza di SQL Server (esempio T-SQL)

In SQL Server, il sys.dm_os_performance_counters la visualizzazione a gestione dinamica del sistema restituisce i contatori delle prestazioni gestiti dal server.

Una delle tante cose che puoi fare con sys.dm_os_performance_counters restituisce un elenco di funzionalità deprecate nell'istanza corrente di SQL Server. È inoltre possibile utilizzare questo elenco per vedere quante volte è stata utilizzata una funzionalità deprecata dall'avvio di SQL ServerSQL Server.

Questo è probabilmente il modo più rapido per scoprire se stai utilizzando una funzionalità obsoleta in SQL Server.

La vista restituisce una riga per contatore delle prestazioni gestito dal server. L'oggetto SQLServer:Deprecated Features fornisce un contatore per monitorare le funzionalità designate come obsolete. Ha un cntr_value colonna, che fornisce un conteggio dell'utilizzo che elenca il numero di volte in cui è stata rilevata la funzionalità deprecata dall'ultimo avvio di SQL ServerSQL Server.

Pertanto, eseguendo una query su questa vista, possiamo restituire tutte le funzionalità deprecate insieme a un conteggio di quante volte ciascuna è stata rilevata dall'ultimo avvio di SQL Server.

Esempio 1:restituzione di tutte le funzionalità obsolete rilevate dall'avvio di SQL Server

È quindi possibile utilizzare la query seguente per trovare tutte le funzionalità obsolete che sono state rilevate dall'ultimo avvio di SQL Server, insieme al numero di volte in cui è stato riscontrato ciascun 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;

Risultato:

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

Qui ho usato RTRIM() funzione (potresti anche usare TRIM() ) per ritagliare lo spazio bianco a destra dell'elemento. L'ho fatto perché il instance_name colonna usa un nchar(128) tipo di dati, che fa sì che la colonna venga riempita fino a 128 caratteri. Tagliando lo spazio bianco, l'esempio può ora adattarsi alla pagina Web senza richiedere lo scorrimento orizzontale.

Esempio 2 – Restituzione di funzioni per nome

Se hai una caratteristica specifica che ti interessa, puoi sempre cercarla per 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%';

Risultato:

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

Maggiori dettagli su ciascuna funzione obsoleta

Il metodo sopra è un modo rapido e piacevole per vedere se le funzionalità deprecate sono ancora utilizzate nell'applicazione. Uno svantaggio è che non fornisce molte informazioni su cosa fare al riguardo, o anche quali istruzioni SQL includevano la funzionalità deprecata, per non parlare dell'utente che l'ha eseguita.

È possibile utilizzare sessioni di eventi estese per restituire più informazioni, ad esempio le istruzioni SQL dannose, l'utente che l'ha eseguita, l'ora in cui è stata eseguita e altro ancora. Puoi persino catturarlo tutto in un file di registro in modo da poterlo fare riferimento in seguito. Per un esempio, vedere Utilizzo di eventi estesi per registrare funzionalità obsolete utilizzate in un'istanza di SQL Server.

Vedere anche l'articolo di Microsoft Funzionalità del motore di database obsoleto in SQL Server 2017 per consigli su come gestire ogni elemento obsoleto. Tale elenco è esattamente lo stesso di SQL Server 2016.