sql >> Databáze >  >> RDS >> Sqlserver

2 způsoby, jak zjistit, zda se v instanci serveru SQL Server stále používají zastaralé funkce

Je úžasné, jak rychle mohou být některé funkce ve světě softwaru zastaralé.

Tento článek představuje dvě metody, jak zjistit, zda jsou v instanci serveru SQL Server používány zastaralé funkce.

Metoda 1 – sys.dm_os_performance_counters

Snad nejrychlejší způsob, jak to udělat, je použít sys.dm_os_performance_counters pohled na dynamickou správu systému. Mezi mnoha věcmi, které můžete s tímto zobrazením udělat, je získat seznam zastaralých funkcí spolu s tím, kolikrát byly použity od spuštění SQL Server.

Zde je příklad převzatý z mého článku Nejrychlejší způsob, jak najít zastaralé funkce, které se stále používají v instanci SQL Server:

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;

Výsledek:

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

V tomto příkladu vracím pouze ty řádky, kde je object_name sloupec má hodnotu SQLServer:Deprecated Features a cntr_value hodnota sloupce je větší než nula.

Můžete odstranit cntr_value sloupec z tohoto dotazu vrátit všechny zastaralé funkce, včetně těch, které nebyly použity.

Metoda 2 – použití rozšířených událostí

Dalším způsobem, jak to udělat, je použít rozšířené události. Toto je komplexnější metoda a můžete ji použít k vytvoření souboru protokolu, který obsahuje všechny instance použití zastaralé funkce, spolu s použitým příkazem SQL, který obsahuje zastaralou funkci, kdo ji spustil, databázi, proti které byla spuštěna atd. Níže je uveden příklad.

Vytvořte událost:

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
    );

Spusťte událost:

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

Spusťte nějaký zastaralý kód:

SELECT * FROM sys.sql_dependencies;

Přečtěte si protokol:

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);

Výsledek (při použití vertikálního výstupu):

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.

Podrobnější diskusi o této metodě najdete v tématu Použití rozšířených událostí k protokolování zastaralých funkcí používaných v instanci SQL Server. Tento článek obsahuje stejný příklad, ale trochu podrobněji.


  1. Instalace softwaru Oracle Database 12c v systému Windows

  2. Sběr dat o výkonu pomocí nástroje SQLDiag | Odstraňování problémů s výkonem serveru SQL -6

  3. Síťová rozhraní SQL Server:Připojovací řetězec není platný [87]

  4. ZKONTROLUJTE Omezení na serveru SQL Server