Sungguh menakjubkan betapa cepatnya beberapa fitur dapat ditinggalkan di dunia perangkat lunak.
Artikel ini menyajikan dua metode untuk melihat apakah fitur yang tidak digunakan lagi digunakan dalam contoh SQL Server.
Metode 1 – sys.dm_os_performance_counters
Mungkin cara tercepat untuk melakukannya adalah menggunakan sys.dm_os_performance_counters
tampilan manajemen dinamis sistem. Di antara banyak hal yang dapat Anda lakukan dengan tampilan ini, adalah mendapatkan daftar fitur yang tidak digunakan lagi, bersama dengan berapa kali fitur tersebut digunakan sejak SQL Server dimulai.
Berikut ini contoh yang diambil dari artikel saya Cara Tercepat untuk Menemukan Fitur Usang yang Masih Digunakan di Instance 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;
Hasil:
+-----------------------------------+---------------+ | 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 | +-----------------------------------+---------------+
Dalam contoh ini, saya hanya mengembalikan baris di mana object_name
kolom memiliki nilai SQLServer:Deprecated Features
, dan cntr_value
nilai kolom lebih besar dari nol.
Anda dapat menghapus cntr_value
kolom dari kueri ini untuk mengembalikan semua fitur yang tidak digunakan lagi, termasuk yang belum digunakan.
Metode 2 – Gunakan Peristiwa yang Diperpanjang
Cara lain untuk melakukannya adalah dengan menggunakan acara diperpanjang. Ini adalah metode yang lebih komprehensif, dan Anda dapat menggunakannya untuk membuat file log yang berisi semua contoh penggunaan fitur yang tidak digunakan lagi, bersama dengan pernyataan SQL yang digunakan yang berisi fitur yang tidak digunakan lagi, siapa yang menjalankannya, database yang digunakan untuk menjalankannya, dll. . Di bawah ini adalah contohnya.
Buat acara:
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 );
Mulai acara:
ALTER EVENT SESSION [Deprecation Events] ON SERVER STATE = START;
Jalankan beberapa kode usang:
SELECT * FROM sys.sql_dependencies;
Baca lognya:
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);
Hasil (menggunakan keluaran vertikal):
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.
Untuk diskusi yang lebih mendetail tentang metode ini, lihat Menggunakan Peristiwa yang Diperpanjang untuk Mencatat Fitur yang Tidak Digunakan Lagi di Instance SQL Server. Artikel itu menyertakan contoh yang sama, tetapi dengan sedikit lebih detail.