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

Nejrychlejší způsob, jak najít zastaralé funkce, které se stále používají v instanci SQL Server (příklad T-SQL)

V SQL Server, sys.dm_os_performance_counters zobrazení dynamické správy systému vrací čítače výkonu spravované serverem.

Jedna z mnoha věcí, které můžete dělat s sys.dm_os_performance_counters vrátí seznam zastaralých funkcí v aktuální instanci SQL Server. Tento seznam můžete také použít ke zjištění, kolikrát byla zastaralá funkce použita od spuštění SQL Serveru.

Toto je dost možná nejrychlejší způsob, jak zjistit, zda v SQL Serveru používáte zastaralou funkci.

Zobrazení vrátí řádek na čítač výkonu spravovaný serverem. Objekt SQLServer:Deprecated Features poskytuje čítač pro sledování funkcí označených jako zastaralé. Má hodnotu cntr_value sloupec, který poskytuje počet využití, který uvádí, kolikrát byla zastaralá funkce zjištěna od posledního spuštění serveru SQL Server.

Spuštěním dotazu proti tomuto pohledu tedy můžeme vrátit všechny zastaralé funkce spolu s počtem, kolikrát byly jednotlivé funkce nalezeny od posledního spuštění SQL Serveru.

Příklad 1 – Vrácení všech zastaralých funkcí zjištěných od spuštění SQL Server

Můžeme tedy použít následující dotaz k vyhledání všech zastaralých funkcí, které jsme zaznamenali od posledního spuštění SQL Serveru, spolu s počtem případů, kdy byla každá položka nalezena:

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

Zde jsem použil RTRIM() funkce (můžete také použít TRIM() ) pro oříznutí bílého místa napravo od prvku. Udělal jsem to, protože instance_name sloupec používá nchar(128) datový typ, což způsobí, že sloupec bude doplněn na 128 znaků. Oříznutím mezer se nyní příklad vejde na webovou stránku, aniž by bylo nutné vodorovné posouvání.

Příklad 2 – Vrácení funkcí podle názvu

Pokud máte konkrétní funkci, která vás zajímá, můžete ji vždy vyhledat podle názvu:

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%';

Výsledek:

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

Další podrobnosti o každé zastarané funkci

Výše uvedená metoda je pěkný rychlý způsob, jak zjistit, zda se ve vaší aplikaci stále používají zastaralé funkce. Jednou nevýhodou je, že neposkytuje velké množství informací o tom, co s tím dělat, ani o tom, které příkazy SQL obsahovaly zastaralou funkci, natož který uživatel ji spustil.

Rozšířené relace události můžete použít k vrácení dalších informací, jako jsou problematické příkazy SQL, uživatel, který je spustil, čas, kdy byly spuštěny a další. Můžete to dokonce zaznamenat do souboru protokolu, abyste se na to mohli později odvolat. Příklad viz Použití rozšířených událostí k protokolování zastaralých funkcí používaných v instanci serveru SQL.

Přečtěte si také článek Microsoftu Zastaralé funkce databázového stroje v SQL Server 2017, kde najdete doporučení, jak se vypořádat s každou zastaralou položkou. Tento seznam je přesně stejný jako seznam pro SQL Server 2016.


  1. Co vlastně znamená Clustered and Non-Clustered index?

  2. Chyba 101 „Dotaz není povolen v aplikaci Waitfor“ na serveru SQL

  3. Chyba MySQL #1071 - Zadaný klíč byl příliš dlouhý; maximální délka klíče je 767 bajtů

  4. Připojení oci_connect se nezdařilo