2012-04-25 13 views
11

हमारे पास एक SQL Server 2008 के साथ एक Windows 2008 R2 सर्वर है। उस सर्वर में एकाधिक .net साइटें हैं जिनके पास SQL ​​सर्वर डेटाबेस हैं।एसक्यूएल सर्वर 2008 उच्च CPU उपयोग

वर्तमान में हम 95% का औसत CPU उपयोग अनुभव कर रहे हैं, और SQL सर्वर उस उपयोग के अधिकांश के लिए ज़िम्मेदार है।

मैं यह जानना चाहता हूं कि किस साइट के लिए ज़िम्मेदार है ताकि हम इसे ऑप्टमाइज़ कर सकें या इसे दूसरे सर्वर पर ले जा सकें। लेकिन मुझे यह देखने का कोई सीधा तरीका नहीं मिला।

मैं अगर मैं मिल सकता है की तलाश कर रहा है:

  • डेटाबेस है कि ज्यादातर सीपीयू गहन प्रश्नों
  • प्रक्रिया है कि सीपीयू गहन प्रश्नों

एक बात के लिए जिम्मेदार है हो रही है यह चीजों को भी जटिल बनाता है कि हमारे पास एक ही डेटाबेस का उपयोग करके कई साइटें और "क्रॉन्स" हैं। तो एक बार जब मैं डेटाबेस की पहचान करता हूं तो मुझे इसके लिए कुछ संकेत मिलना होगा कि किस साइट/क्रॉन इसके लिए ज़िम्मेदार है।

मैं वास्तव में इस मुद्दे हमारी साइटों वास्तव में धीमी गति से कर रही है इस पर किसी भी मदद की सराहना करेंगे ...

धन्यवाद

उत्तर

27

आप महंगा प्रश्नों (और डेटाबेस वे से जुड़े हैं) की पहचान कर सकते DMVs का उपयोग कर उदाहरण के लिए from this TechNet article:

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; 

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

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); 
इन खोजों के

न तो आवेदन है कि उन्हें दौड़ा पहचान लेती है और DMVs कि जानकारी एकत्र नहीं करते थे (आप कार्य और नोट में प्रश्नों को पकड़ने के लिए होगा: आपको लगता है कि इस क्वेरी from Glenn Allan Berry's DMV queries साथ कर सकते हैं sys.dm_exec_sessions में एप्लिकेशन का नाम, या ट्रेस की समीक्षा करें)।

बेशक आप इस काम को बाजार पर विभिन्न तृतीय पक्ष प्रदर्शन उपकरणों के साथ स्वचालित कर सकते हैं (अस्वीकरण: मैं उनमें से एक के लिए काम करता हूं, एसक्यूएल सेंट्री, जो Performance Advisor उत्पन्न करता है, जो उपरोक्त सभी को ट्रैक रखने सहित ट्रैक करता है उच्च लागत वाले प्रश्न और जानकारी को बनाए रखना कि किस डेटाबेस में वे भाग गए थे और उन्हें किस एप्लिकेशन ने बुलाया था)।

0

वैकल्पिक रूप से आप अपने सर्वर की स्वास्थ्य स्थिति देखने के लिए गतिविधि मॉनीटर का उपयोग कर सकते हैं। वहां से आप लंबे समय से चल रहा है प्रश्नों खास तौर में सक्षम हो जाएगा, इस तरह के पंक्ति ताला, टेबल ताला आदि आदि के रूप में किसी भी ताले

http://www.mssqltips.com/sqlservertip/1917/performance-analysis-using-sql-server-2008-activity-monitor-tool/

संबंधित मुद्दे