Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

यह देखने के 2 तरीके हैं कि SQL सर्वर इंस्टेंस में अभी भी बहिष्कृत सुविधाओं का उपयोग किया जा रहा है या नहीं

यह आश्चर्यजनक है कि सॉफ़्टवेयर की दुनिया में कुछ सुविधाएं कितनी जल्दी बहिष्कृत हो सकती हैं।

यह आलेख यह देखने के लिए दो तरीके प्रस्तुत करता है कि 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 सर्वर इंस्टेंस में उपयोग की जा रही बहिष्कृत सुविधाओं को लॉग करने के लिए विस्तारित ईवेंट का उपयोग करना देखें। उस लेख में वही उदाहरण शामिल है, लेकिन थोड़ा और विवरण के साथ।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर (T-SQL) में संपीड़न के साथ एक तालिका बनाएँ

  2. My Select SUM क्वेरी शून्य लौटाती है। इसे 0 . वापस करना चाहिए

  3. क्या मैं संग्रहीत प्रक्रिया के भीतर एक डिफ़ॉल्ट स्कीमा सेट कर सकता हूं?

  4. पेड़ पदानुक्रम प्राप्त करने के लिए सीटीई रिकर्सन

  5. SQL सर्वर हिस्टोग्राम मोटे संरेखण का उपयोग करके अनुमान में शामिल हों