sql >> Databasteknik >  >> RDS >> Sqlserver

2 sätt att se om föråldrade funktioner fortfarande används i en SQL Server-instans

Det är häpnadsväckande hur snabbt vissa funktioner kan utfasas i mjukvaruvärlden.

Den här artikeln presenterar två metoder för att se om föråldrade funktioner används i en SQL Server-instans.

Metod 1 – sys.dm_os_performance_counters

Det kanske snabbaste sättet att göra det är att använda sys.dm_os_performance_counters system dynamisk förvaltningsvy. Bland de många saker du kan göra med den här vyn är att få en lista över föråldrade funktioner, tillsammans med hur många gånger de har använts sedan SQL Server startade.

Här är ett exempel från min artikel Snabbaste sättet att hitta föråldrade funktioner som fortfarande används i en SQL Server-instans:

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;

Resultat:

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

I det här exemplet returnerar jag bara de rader där object_name kolumnen har värdet SQLServer:Deprecated Features , och cntr_value kolumns värde är större än noll.

Du kan ta bort cntr_value kolumnen från den här frågan för att returnera alla föråldrade funktioner, inklusive de som inte har använts.

Metod 2 – Använd utökade händelser

Ett annat sätt att göra det är att använda utökade evenemang. Detta är en mer omfattande metod, och du kan använda den för att skapa en loggfil som innehåller alla instanser av föråldrad funktionsanvändning, tillsammans med den använda SQL-satsen som innehåller den föråldrade funktionen, vem som körde den, databasen den kördes mot, etc. Nedan är ett exempel.

Skapa händelsen:

CREATE EVENT SESSION [Deprecation Events] ON SERVER 
ADD EVENT sqlserver.deprecation_announcement(
    ACTION(
        sqlserver.database_name,
        sqlserver.sql_text,
        sqlserver.username
        )
),
ADD EVENT sqlserver.deprecation_final_support(
    ACTION(
        sqlserver.database_name,
        sqlserver.sql_text,
        sqlserver.username
    )
)
ADD TARGET package0.event_file(
    SET filename=N'/var/opt/mssql/tmp/DeprecationEvents.xel'
    )
WITH (
    TRACK_CAUSALITY = ON
    );

Starta eventet:

ALTER EVENT SESSION [Deprecation Events] ON SERVER STATE = START;

Kör någon föråldrad kod:

SELECT * FROM sys.sql_dependencies;

Läs loggen:

SELECT
    EventXml.value('(@timestamp)[1]', 'datetime2') AS [timestamp],
    EventXml.value('(action[@name="username"]/value)[1]', 'nvarchar(256)') AS username,
    EventXml.value('(action[@name="database_name"]/value)[1]', 'nvarchar(128)') AS database_name,
    EventXml.value('(action[@name="sql_text"]/value)[1]', 'varchar(4000)') AS sql_text,
    EventXml.value('(@name)[1]', 'varchar(50)') AS event_name,
    EventXml.value('(data[@name="feature"]/value)[1]', 'varchar(255)') AS feature,
    EventXml.value('(data[@name="message"]/value)[1]', 'varchar(max)') AS message
FROM (SELECT CAST(event_data AS XML) AS XmlEventData
    FROM sys.fn_xe_file_target_read_file (
        '/var/opt/mssql/tmp/DeprecationEvents*.xel', 
        null, 
        null, 
        null
    )) AS EventTable
CROSS APPLY EventTable.XmlEventData.nodes('event') AS q(EventXml);

Resultat (med vertikal utdata):

timestamp     | 2019-10-31 04:03:06.5280000
username      | sa
database_name | Test
sql_text      | SELECT * FROM sys.sql_dependencies;
event_name    | deprecation_announcement
feature       | sql_dependencies
message       | sql_dependencies will be removed in a future version of SQL Server. Avoid using this feature in new development work, and plan to modify applications that currently use it.

För en mer detaljerad diskussion om denna metod, se Använda utökade händelser för att logga föråldrade funktioner som används i en SQL Server-instans. Den artikeln innehåller samma exempel, men med lite mer detaljer.


  1. Hur får man primärnyckelkolumn i Oracle?

  2. SQL Server 2008 Windows Auth Login Error:Inloggningen är från en otillförlitlig domän

  3. Skapa ett databasdiagram i MySQL Workbench

  4. MariaDB JSON_KEYS() Förklarad