2013-02-08 38 views
11

Dự án hiện tại của tôi sẽ gửi truy vấn đến máy chủ sql liên tục và có thể sử dụng 100% bộ nhớ hoặc CPU.Phát hiện Sử dụng Máy chủ SQL với truy vấn

  • Làm thế nào tôi có thể kiểm tra nếu máy chủ sắp sử dụng đầy đủ trong một thủ tục lưu trữ để tôi có thể quyết định có nên thực hiện các truy vấn hay không hoặc lưu một số cài đặt trong một bảng để các truy vấn sau đây có thể biết được khối lượng công việc cao và quyết định phải làm gì

  • Nếu không, làm thế nào tôi có thể ngăn máy chủ SQL sử dụng đầy đủ?

Thông tin thêm về các trường hợp: Ngay bây giờ tôi biết máy chủ thử nghiệm hiện tại của chúng tôi có thể xử lý 40-50 truy vấn mỗi giây (một thủ tục lưu trữ cụ thể). Và bây giờ chúng tôi sẽ quyết định có bao nhiêu truy vấn được gửi đến máy chủ mỗi giây. Nếu chúng ta thiết lập số lượng thậm chí 1 cao hơn dự kiến, về lâu dài, các truy vấn cuối cùng sẽ điền vào bộ nhớ ảo và khách hàng sẽ phải khởi động lại cá thể máy chủ sql của họ theo định kỳ.

kết quả mong đợi (Đối với thợ săn tiền thưởng):

@memory_usage float, @cpu_usage float; /* in percentage */ 

Bất kỳ ý tưởng được hoan nghênh. Cảm ơn.

+9

Tối ưu hóa sớm là gốc rễ của mọi điều ác. – Andomar

+1

Dựa trên câu hỏi của bạn, tôi nghĩ tôi sẽ quay lại và xem xét một cách tiếp cận thay thế. –

+1

Trước tiên, nếu bạn đang sử dụng hết bộ nhớ ảo trên máy chủ của mình, hãy đảm bảo rằng bản sao của bạn có bộ cài đặt bộ nhớ tối đa. SQL Server là khá tốt trong việc quản lý bộ nhớ cache của nó vì vậy bạn sẽ không bao giờ cần phải khởi động lại cá thể (cho vấn đề cụ thể này) trừ khi bạn đang dùng bộ nhớ mà hệ điều hành cần để hoạt động. Có rất nhiều bài viết hiện có trên bao nhiêu bộ nhớ để lại hệ điều hành, nhưng bạn có thể bắt đầu bằng cách nhìn vào BOL ở đây: http://msdn.microsoft.com/en-us/library/ms178067.aspx. Đó là năm 2012 nhưng tôi không chắc bạn đang sử dụng phiên bản nào. –

Trả lời

1

Không chắc làm thế nào để làm điều này trong SQL nhưng bạn luôn có thể tạo một hàm trong C# và sau đó làm cho nó có sẵn trong SQL Server của bạn như thủ tục lưu trữ sử dụng CRL.

http://msdn.microsoft.com/en-us/library/ms131094.aspx

5

Đối với bất kỳ sử dụng chuyên sâu như của SQL Server và nỗ lực để tinh chỉnh nó, tôi giả định rằng (ảo) máy là dành riêng cho SQL Server.

Nói xong, nhận được tỷ lệ hiện hành của máy của CPU và bộ nhớ sử dụng nên làm các trick:

CREATE PROCEDURE dbo.p_GetSystemUsage 
    @cpuUsage float out, -- % CPU usage 
    @memoryUsage float out -- % memory usage 
AS 
BEGIN 
    SET NOCOUNT ON; 

    /* 
    * % CPU usage 
    */ 

    SELECT TOP 1 
     @cpuUsage = 100 - r.SystemIdle 
    FROM (
     SELECT 
      rx.record.value('(./Record/@id)[1]', 'int') AS record_id, 
      rx.record.value('(./Record/SchedulerMonitorEvent/SystemHealth/SystemIdle)[1]', 'int') AS SystemIdle 
     FROM (
      SELECT CONVERT(XML, record) AS record 
      FROM sys.dm_os_ring_buffers 
      WHERE 
       ring_buffer_type = N'RING_BUFFER_SCHEDULER_MONITOR' AND 
       record LIKE '%<SystemHealth>%') AS rx 
     ) AS r 
    ORDER BY r.record_id DESC 

    /* 
    * % memory usage 
    */ 

    SELECT 
     @memoryUsage = 
      (((m.total_physical_memory_kb - m.available_physical_memory_kb)/
       convert(float, m.total_physical_memory_kb)) * 
      100) 
    FROM sys.dm_os_sys_memory m 
END 

Một số điều cần lưu ý:

  • sys.dm_os_sys_memory là một nguồn tốt cho máy của sử dụng bộ nhớ vật lý. Nó cung cấp thông tin tương tự về cách sử dụng tập tin trang của máy. Theo kinh nghiệm của tôi, thông tin của nó thay đổi thường xuyên - nhiều truy vấn chống lại nó trong vòng một giây cho ra các kết quả khác nhau.
  • sys.dm_os_ring_buffers là một nguồn tốt để sử dụng CPU của máy, nhưng nó không được cập nhật thường xuyên - mỗi phút từ những gì tôi đã thấy. Có thể bạn có thể ảnh hưởng đến điều này nếu bạn cần thêm thông tin thời gian thực.
  • Giá trị sử dụng CPU trong sys.dm_os_ring_buffers là một số nguyên, nhưng tôi đã thực hiện @cpuUsage một float theo thông số kỹ thuật của bạn. Vì proc được lưu trữ sử dụng hai thông số float, bạn có thể cấu trúc lại xác suất sử dụng CPU để cung cấp phần phân số mà không thay đổi người gọi của nó.
+2

sử dụng cpu không hoạt động - sys.dm_os_sys_memory hữu ích –

+0

Rất vui khi biết rằng kiểm tra mức sử dụng bộ nhớ sẽ giúp, @ Uğur Gümüşhan. Cách kiểm tra sử dụng CPU không hoạt động như thế nào? Nó có lỗi không? Có lẽ điều chỉnh đơn giản là cần thiết để nó hoạt động trong môi trường của bạn. Ngoài ra, điều đó nhắc tôi - bạn đang sử dụng phiên bản SQL Server và hệ điều hành nào? (Theo '@@ VERSION', tôi đã kiểm tra proc được lưu trữ trên Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (Intel X86) ngày 17 tháng 6 năm 2011 00:57:23 Bản quyền (c) Microsoft Corporation Express Edition với Dịch vụ Nâng cao trên Windows NT 6.1 (Xây dựng 7601: Gói Dịch vụ 1).) – J0e3gan

+2

chúng tôi có máy chủ sql 2008r2 trong công ty .. cpuusage trả về 1 mỗi lần –

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