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

SQL सर्वर 2008 उच्च CPU उपयोग

आप DMV का उपयोग करके महंगे प्रश्नों (और वे डेटाबेस जिनसे वे जुड़े हुए हैं) की पहचान कर सकते हैं, उदा। इस TechNet लेख से :

SELECT TOP 50
 [Average CPU used] = total_worker_time / qs.execution_count,
 [Total CPU used] = total_worker_time,
 [Execution count] = qs.execution_count,
 [Individual Query] = SUBSTRING (qt.text,qs.statement_start_offset/2, 
         (CASE WHEN qs.statement_end_offset = -1 
            THEN LEN(CONVERT(NVARCHAR(MAX), qt.text)) * 2 
          ELSE qs.statement_end_offset END - 
qs.statement_start_offset)/2)
,[Parent Query] = qt.text
,DatabaseName = DB_NAME(qt.dbid)
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) as qt
ORDER BY [Average CPU used] DESC;

ये आपको भारी हिटर प्रश्नों के बारे में बताएंगे, लेकिन दुर्भाग्य से यह एक ऐसे डेटाबेस को इंगित नहीं करेगा जिसमें बहुत अधिक मात्रा में छोटे प्रश्न हो सकते हैं जो व्यक्तिगत रूप से सीपीयू के छोटे बिट्स का उपयोग कर रहे हैं लेकिन कुल मिलाकर बड़े बिट्स का उपयोग कर रहे हैं। आप इस क्वेरी ग्लेन एलन बेरी की DMV क्वेरी से ऐसा कर सकते हैं :

WITH DB_CPU_Stats
AS
(SELECT DatabaseID, DB_Name(DatabaseID) AS [DatabaseName], 
  SUM(total_worker_time) AS [CPU_Time_Ms]
 FROM sys.dm_exec_query_stats AS qs
 CROSS APPLY (SELECT CONVERT(int, value) AS [DatabaseID] 
              FROM sys.dm_exec_plan_attributes(qs.plan_handle)
              WHERE attribute = N'dbid') AS F_DB
 GROUP BY DatabaseID)
SELECT ROW_NUMBER() OVER(ORDER BY [CPU_Time_Ms] DESC) AS [row_num],
       DatabaseName, [CPU_Time_Ms], 
       CAST([CPU_Time_Ms] * 1.0 / SUM([CPU_Time_Ms]) 
       OVER() * 100.0 AS DECIMAL(5, 2)) AS [CPUPercent]
FROM DB_CPU_Stats
WHERE DatabaseID > 4 -- system databases
AND DatabaseID <> 32767 -- ResourceDB
ORDER BY row_num OPTION (RECOMPILE);

इनमें से कोई भी क्वेरी उन्हें चलाने वाले एप्लिकेशन की पहचान नहीं करती है, और उपयोग किए गए DMV उस जानकारी को संग्रहीत नहीं करते हैं (आपको अधिनियम में प्रश्नों को पकड़ना होगा और sys.dm_exec_sessions में एप्लिकेशन का नाम नोट करना होगा, या ट्रेस की समीक्षा करनी होगी)।

बेशक आप बाज़ार में विभिन्न प्रकार के तृतीय पक्ष प्रदर्शन टूल के साथ इस कार्य को स्वचालित कर सकते हैं (अस्वीकरण:मैं उनमें से एक के लिए काम करता हूं, 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. एसक्यूएल में एक रिकॉर्ड में शून्य मान वाले सभी फ़ील्ड कैसे गिनें?

  2. SQL सर्वर 2016 - स्ट्रेच डेटाबेस का परिचय

  3. SQL सर्वर में इनलाइन टेबल-वैल्यूड फ़ंक्शंस (ITVF) का परिचय

  4. क्लाउड वर्चुअल मशीन की तुलना प्रबंधित क्लाउड डेटाबेस से करना

  5. लाइन ब्रेक एसक्यूएल सर्वर में खो गया