2009-05-13 46 views
11

Tôi đang tiến hành kiểm tra căng thẳng trên cơ sở dữ liệu của mình, được lưu trữ trên SQL Server 2008 64 bit chạy trên máy 64 bit có RAM 10 GB.SQL Server 2008 chiếm nhiều bộ nhớ?

Tôi có 400 chuỗi. Mỗi chuỗi truy vấn cơ sở dữ liệu mỗi giây, nhưng thời gian truy vấn không mất thời gian, như trình lược tả SQL nói rằng, nhưng sau 18 giờ SQL Server sử dụng lên 7,2 GB RAM và 7,2 GB bộ nhớ ảo.

Đây có phải là hành vi bình thường không? Làm thế nào tôi có thể điều chỉnh SQL Server để làm sạch bộ nhớ không sử dụng?

+0

Bạn đo những số liệu này như thế nào? Ghi nhớ rằng trình quản lý tác vụ có thể cung cấp các số liệu gây hiểu nhầm (tôi luôn lựa chọn perfmon và xem các byte riêng/ảo) –

+0

Tôi đang theo dõi sql sever bằng cách sử dụng trình quản lý tác vụ và ứng dụng dotnet riêng biệt sử dụng lớp PerformanceCounter –

Trả lời

27

Máy chủ SQL được thiết kế để sử dụng càng nhiều bộ nhớ càng tốt, để cải thiện hiệu suất bằng cách lưu vào bộ nhớ cache các nội dung trong bộ nhớ. Đề xuất là sử dụng các máy chuyên dụng cho SQL Server, điều này làm cho phương pháp này hoàn toàn hợp lệ, vì nó không mong đợi bất kỳ ai khác cần bộ nhớ. Vì vậy, bạn không nên lo lắng về điều này; nó hoàn toàn bình thường.

Điều đó nói rằng, nếu bạn đang sử dụng máy phát triển thay vì môi trường sống, bạn có thể muốn giới hạn số lượng bộ nhớ để ngăn hộp của bạn bị chiếm đoạt. Trong trường hợp này, cách dễ nhất là mở SQL Server Management Studio, nhấp chuột phải vào máy chủ và chọn "Properties", sau đó trên tab "Memory", bạn có thể đặt bộ nhớ máy chủ tối đa.

1

Tắt câu trả lời của Greg, khi bạn định cấu hình bộ nhớ, hãy thử để lại ít nhất 10% bộ nhớ tổng thể miễn phí cho hệ điều hành. Nếu SQL quay ngoài tầm kiểm soát trên một truy vấn dài bạn muốn đệm đó có thể điều khiển từ xa trong và vẫn quản trị hộp.

4

Thực ra, có một mẹo nhỏ gọn gàng để có được những gì bạn đang tìm kiếm. Vấn đề/câu hỏi, là làm thế nào để làm cho SQL Server "tạm thời" từ bỏ bộ nhớ nó có thể không agressively cần, sau đó để cho nó reconsume nó theo yêu cầu.

Để làm điều này, hãy chạy lệnh sau:

EXEC sys.sp_configure N'show advanced options', N'1' 

RECONFIGURE WITH OVERRIDE 

GO 

EXEC sys.sp_configure N'max server memory (MB)', N'{low water mark}' 

GO 

RECONFIGURE WITH OVERRIDE 

GO 

EXEC sys.sp_configure N'max server memory (MB)', N'{High water mark}' 

GO 

RECONFIGURE WITH OVERRIDE 

GO 

EXEC sys.sp_configure N'show advanced options', N'0' 

RECONFIGURE WITH OVERRIDE 

GO 

Đặt các giá trị của riêng bạn cho {dấu nước thấp} và {dấu nước cao} (tính bằng MB).

Điều này sẽ buộc bộ nhớ giảm xuống mức tối thiểu, sau đó mở lại ngay nếu SQL Server cần/muốn.

Điều duy nhất còn lại để làm, là lập biểu cho tập lệnh chạy theo định kỳ.

Đề xuất:

Trường hợp SQL Server không được sử dụng nhiều, hãy thử chạy 6 giờ một cách tự động. Nếu nó được sử dụng nhiều, hãy chạy 24 giờ một lần (nói vào giữa đêm hoặc ngay trước ngày bắt đầu). Việc sử dụng của bạn sẽ thay đổi.