2009-06-03 36 views
45

CPU máy chủ SQL của tôi đã ở mức khoảng 90% cho hầu hết các phần của ngày hôm nay.Làm thế nào để tìm hiểu những gì đang búa máy chủ SQL của tôi?

Tôi không ở vị trí để có thể khởi động lại do sử dụng liên tục.

Có thể tìm hiểu điều gì trong SQL đang gây ra quá tải CPU không?

Tôi đã chạy SQL Profiler nhưng rất nhiều thứ đang diễn ra thật khó để nói xem có điều gì đặc biệt gây ra nó hay không.

Tôi đã chạy sp_who2 nhưng không chắc chắn tất cả mọi thứ có nghĩa là chính xác và nếu có thể xác định các vấn đề có thể xảy ra ở đây.

Để chặn trước bất kỳ câu trả lời nào "có thể chỉ được sử dụng rất nhiều", điều này chỉ mới bắt đầu từ ngày hôm nay từ mức hoạt động hoàn toàn bình thường.

Tôi đang theo đuổi bất kỳ cách nào để tìm ra nguyên nhân gây ra nỗi đau CPU trong SQL.

+0

Bạn có thể nhận được nhiều câu trả lời hữu ích hơn trên serverfault.com –

+1

Có thể. Nó có thể được điều chỉnh perf quá mặc dù – gbn

+0

Ah, có, tôi đã nghĩ rằng serverfault.com nhưng tôi không nghĩ rằng nó đã được lên và chạy chưa! – joshcomley

Trả lời

21

tôi giả sự tích cực ở đây mà bạn khẳng định CPU là thực sự tiêu thụ bởi quá trình SQL (perfmon Process quầy đếm sẽ xác nhận điều này). Thông thường đối với những trường hợp như vậy, bạn lấy mẫu của các quầy hiệu suất có liên quan và bạn so sánh chúng với một đường cơ sở mà bạn đã thiết lập trong điều kiện hoạt động tải bình thường. Một khi bạn giải quyết vấn đề này tôi khuyên bạn nên thiết lập một đường cơ sở để so sánh trong tương lai.

Bạn có thể tìm chính xác vị trí SQL chi tiêu cho mỗi chu kỳ CPU đơn lẻ.Nhưng biết nơi để tìm kiếm mất rất nhiều biết làm thế nào và kinh nghiệm. Là SQL 2005/2008 hay 2000? May mắn thay cho năm 2005 và mới hơn có một vài giải pháp kệ. Bạn đã có một vài con trỏ tốt ở đây với câu trả lời của John Samson. Tôi muốn thêm đề xuất để tải xuống và cài đặt SQL Server Performance Dashboard Reports. Một số báo cáo bao gồm các truy vấn hàng đầu theo thời gian hoặc bằng I/O, hầu hết các tệp dữ liệu được sử dụng, v.v. và bạn có thể nhanh chóng cảm nhận được vấn đề ở đâu. Đầu ra là cả số và đồ họa vì vậy nó hữu ích hơn cho người mới bắt đầu.

Tôi cũng khuyên bạn nên sử dụng tập lệnh Adam's Who is Active, mặc dù đó là nâng cao hơn một chút.

Và cuối cùng nhưng không kém phần quan trọng, tôi khuyên bạn nên tải xuống và đọc bảng trắng Nhóm Cố vấn Khách hàng MS SQL về phân tích hiệu suất: SQL 2005 Waits and Queues.

Đề xuất của tôi cũng là xem xét I/O. Nếu bạn thêm một tải vào máy chủ mà trashes vùng đệm (tức là nó cần rất nhiều dữ liệu mà nó evicts các trang dữ liệu được lưu trữ từ bộ nhớ) kết quả sẽ là một sự gia tăng đáng kể trong CPU (âm thanh đáng ngạc nhiên, nhưng là sự thật). Thủ phạm thường là một truy vấn mới quét một bảng lớn từ đầu đến cuối.

+2

+1 và bạn có thể sử dụng liên kết này (http://www.microsoft.com/en-us/download/details.aspx?id=29063) cho phiên bản mới hơn của 'Báo cáo Bảng điều khiển Hiệu suất Máy chủ SQL '. – gotqn

5

Chạy một trong hai giây này. Bạn sẽ phát hiện kết nối CPU cao. Hoặc: CPU lưu trữ trong một biến địa phương, WAITFOR TRÌ HOÃN, so sánh lưu trữ và CPU hiện tại giá trị

select * from master..sysprocesses 
where status = 'runnable' --comment this out 
order by CPU 
desc 

select * from master..sysprocesses 
order by CPU 
desc 

Có thể không phải là thanh lịch nhất nhưng nó muốn hiệu quả và nhanh chóng.

+0

Hi cảm ơn cho điều đó, tôi đã làm điều đó và nó đã trở lại với cột CPU LOGMGR_QUEUE đang ở 20296. Đơn vị này là gì? – joshcomley

+0

mili giây. đó là thấp – gbn

+0

Đây là một Waittype quá ...? – gbn

3

Để biết cách tiếp cận GUI, tôi sẽ xem xét Hoạt động giám sát trong Quản lý và sắp xếp theo CPU.

+3

Hy vọng GUI sẽ không hết thời gian với lỗi "khóa thời gian chờ" xảy ra trên các hộp SQL Server đã tải ... – gbn

+0

Chắc chắn, nhưng tôi đã đề xuất nó vì tôi đã trải qua Nhân vật ngẫu nhiên sau: CPU quan trọng !!!! ! Tôi: Âm thanh như một công việc cho các bảng hệ thống! Không phải tôi: Đừng lo lắng về điều đó, tôi đã tìm thấy và giết chết thủ phạm trong Activity Monitor. – cmsjr

+0

Vậy thì nó là gì? –

4

Bạn có thể chạy SQL Profiler và lọc theo CPU hoặc Thời lượng để bạn loại trừ tất cả "nội dung nhỏ". Sau đó, nó sẽ được dễ dàng hơn nhiều để xác định xem bạn có một vấn đề như một proc được lưu trữ cụ thể đang chạy lâu hơn nhiều so với nó nên (có thể là một chỉ số mất tích hoặc một cái gì đó).

Hai hãy cẩn thận:

  • Nếu vấn đề là số lượng lớn các giao dịch nhỏ, sau đó các bộ lọc mà tôi mô tả ở trên sẽ loại trừ chúng, và bạn muốn bỏ lỡ này.
  • Ngoài ra, nếu vấn đề là một công việc lớn, đơn lẻ (như công việc phân tích 8 giờ hoặc lựa chọn được thiết kế kém phải vượt qua hàng tỷ tỷ) thì bạn có thể không thấy điều này trong profiler cho đến khi nó hoàn toàn thực hiện, tùy thuộc vào những sự kiện bạn đang lược tả (sp: complete vs sp: statementcompleted).

Nhưng thông thường tôi bắt đầu với Trình giám sát hoạt động hoặc sp_who2.

+1

Cảm ơn, tôi nghĩ rằng đây là lựa chọn tốt nhất – Salim

78

truy vấn này sử dụng DMV để xác định các truy vấn tốn kém nhất bởi CPU

SELECT TOP 20 
    qs.sql_handle, 
    qs.execution_count, 
    qs.total_worker_time AS Total_CPU, 
    total_CPU_inSeconds = --Converted from microseconds 
     qs.total_worker_time/1000000, 
    average_CPU_inSeconds = --Converted from microseconds 
     (qs.total_worker_time/1000000)/qs.execution_count, 
    qs.total_elapsed_time, 
    total_elapsed_time_inSeconds = --Converted from microseconds 
     qs.total_elapsed_time/1000000, 
    st.text, 
    qp.query_plan 
FROM 
    sys.dm_exec_query_stats AS qs 
CROSS APPLY 
    sys.dm_exec_sql_text(qs.sql_handle) AS st 
CROSS APPLY 
    sys.dm_exec_query_plan (qs.plan_handle) AS qp 
ORDER BY 
    qs.total_worker_time DESC 

Đối với một giải thích đầy đủ xem: How to identify the most costly SQL Server queries by CPU

+1

Điều gì xảy ra nếu hệ thống liên quan: VLFs, checkpointing, stats rebuilds etc – gbn

+2

hữu ích nhất đoạn SQL tôi đã sử dụng trong một thời gian dài Lưu lại mông của tôi Cảm ơn! –

Các vấn đề liên quan