यह आश्चर्यजनक है कि सॉफ़्टवेयर की दुनिया में कुछ सुविधाएं कितनी जल्दी बहिष्कृत हो सकती हैं।
यह आलेख यह देखने के लिए दो तरीके प्रस्तुत करता है कि SQL सर्वर इंस्टेंस में बहिष्कृत सुविधाओं का उपयोग किया जा रहा है या नहीं।
विधि 1 - sys.dm_os_performance_counters
शायद इसे करने का सबसे तेज़ तरीका sys.dm_os_performance_counters
का उपयोग करना है सिस्टम गतिशील प्रबंधन दृश्य। इस दृश्य के साथ आप कई चीजों में से एक है, बहिष्कृत सुविधाओं की एक सूची प्राप्त करें, साथ ही SQL सर्वर शुरू होने के बाद से उनका कितनी बार उपयोग किया गया है।
यहाँ मेरे लेख से लिया गया एक उदाहरण दिया गया है जो SQL सर्वर इंस्टेंस में अभी भी उपयोग की जा रही बहिष्कृत सुविधाओं को खोजने का सबसे तेज़ तरीका है:
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;
परिणाम:
+-----------------------------------+---------------+ | 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 | +-----------------------------------+---------------+
इस उदाहरण में, मैं केवल उन्हीं पंक्तियों को लौटाता हूँ जहाँ object_name
कॉलम का मान SQLServer:Deprecated Features
. है , और cntr_value
कॉलम का मान शून्य से ज़्यादा है.
आप cntr_value
को हटा सकते हैं उपयोग नहीं की गई सुविधाओं सहित सभी पदावनत सुविधाओं को वापस करने के लिए इस क्वेरी से कॉलम।
विधि 2 - विस्तारित ईवेंट का उपयोग करें
ऐसा करने का एक और तरीका विस्तारित घटनाओं का उपयोग करना है। यह एक अधिक व्यापक विधि है, और आप इसे एक लॉग फ़ाइल बनाने के लिए उपयोग कर सकते हैं जिसमें बहिष्कृत सुविधा उपयोग के सभी उदाहरण शामिल हैं, साथ ही SQL कथन का उपयोग किया गया है जिसमें बहिष्कृत सुविधा शामिल है, जिसने इसे चलाया था, जिस डेटाबेस के खिलाफ चलाया गया था, आदि . नीचे एक उदाहरण है।
इवेंट बनाएं:
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 );
इवेंट शुरू करें:
ALTER EVENT SESSION [Deprecation Events] ON SERVER STATE = START;
कुछ बहिष्कृत कोड चलाएँ:
SELECT * FROM sys.sql_dependencies;
लॉग पढ़ें:
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);
परिणाम (ऊर्ध्वाधर आउटपुट का उपयोग करके):
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.
इस पद्धति पर अधिक विस्तृत चर्चा के लिए, SQL सर्वर इंस्टेंस में उपयोग की जा रही बहिष्कृत सुविधाओं को लॉग करने के लिए विस्तारित ईवेंट का उपयोग करना देखें। उस लेख में वही उदाहरण शामिल है, लेकिन थोड़ा और विवरण के साथ।