Cách cân bằng bộ nhớ SQL Server với bộ nhớ Dịch vụ phân tích SQL Server


11

Chúng tôi có nhiều hệ thống có cùng cấu hình

  • Một máy chủ (ảo hoặc vật lý)
  • Chạy SQL Server (SQL) và SQL Server Phân tích máy chủ (AS)
  • nhiều lõi
  • RAM 16gb

Mỗi đêm, SQL Server sẽ thực hiện khoảng 2-3 giờ xử lý, sau đó là 2-3 giờ xử lý AS. Sau đó suốt ngày chỉ có AS được truy vấn.

Giả sử đây là một máy chủ chuyên dụng và không có ứng dụng nào đáng lo ngại, và hai bộ xử lý này hoàn toàn đồng bộ - không có sự trùng lặp luôn luôn nối tiếp nhau - làm cách nào tôi có thể đặt giới hạn bộ nhớ máy chủ SQL và AS tốt nhất.

Lý do để hỏi là nếu tôi không đặt giới hạn cho SQL, nó sẽ lấy tất cả bộ nhớ có thể. Tuy nhiên - tôi hiểu rằng SQL sẽ vui vẻ từ bỏ bộ nhớ này nếu:

  • Nó không sử dụng nó và

  • Một dịch vụ / chương trình khác yêu cầu nó.

Vì vậy, từ góc độ logic, tôi tin rằng cho phép SQL lấy bao nhiêu tùy ý, nhưng tôi không chắc lắm về AS ' TotalMemoryLimit. Tôi không chắc chắn nếu AS sẽ từ bỏ bộ nhớ của nó. Trong thực tế đọc nhiều hơn dẫn tôi tin rằng nó là sai để cho nó lấy tất cả.

Điều này có nghĩa là tôi thực sự cần đặt giới hạn cho cả hai? Tôi bối rối không biết thực tiễn tốt nhất nên là gì và chúng ta cần đo lường xem xét các quy trình không trùng lặp.

Hy vọng điều này có ý nghĩa.

Câu trả lời:


9

Tôi nghĩ việc ép buộc cả hai dịch vụ bằng cách có một nhiệm vụ hoặc dịch vụ theo lịch trình là khả thi:

(a) trước khi xử lý hàng đêm của SQL Server, tắt dịch vụ SSAS và tăng bộ nhớ được phân bổ cho SQL Server

(b) sau khi SQL Server đã xử lý xong, giảm bộ nhớ máy chủ tối đa và khởi động lại SQL Server

(c) bắt đầu SSAS

Điều này giả định rằng SSAS không bắt buộc phải trực tuyến trong khi SQL Server đang xử lý. Mặt khác, thay đổi (a) từ "tắt" thành "khởi động lại" ... miễn là SSAS không chủ động làm bất cứ điều gì trong khi SQL Server đang xử lý, không nên lo lắng rằng nó sẽ đánh cắp bộ nhớ.

Điều này cũng giả sử rằng bạn muốn mỗi dịch vụ chồng lấp mức tiêu thụ bộ nhớ và sử dụng cùng một bộ nhớ vào các thời điểm khác nhau - tôi chắc chắn có nhiều cách với ái lực / NUMA, v.v. để tách biệt hoàn toàn không gian hoạt động của chúng hoặc trong trường hợp xấu nhất, để lưu trữ chúng trên các máy khác nhau.


Tôi nghĩ có lẽ chúng ta nên khởi động lại SQL sau khi xử lý SASS - vì nó đọc lớn (Kho dữ liệu).
Preet Sangha

Thực tế nghĩ về nó - sẽ không khởi động lại máy chủ SQL thực sự ảnh hưởng đến tất cả quá trình xử lý SQL?
Preet Sangha

1
@ Xin chào, đó không phải là vấn đề sao?
Aaron Bertrand

7

SQL và SSAS có cần chạy cùng lúc không? Nếu không, bạn có chắc chắn 100% không?

Tôi sẽ xem xét việc thiết lập cài đặt bộ nhớ cho SQL và SSAS để xem liệu họ có thể hợp tác với nhau không.

Chúng ta sẽ cần để lại một số bộ nhớ cho HĐH, các quy trình khác và phân bổ nhiều trang. Có lẽ là 4G?

Hãy thử một cái gì đó như thế này ...

Về phía SQL, đặt Bộ nhớ máy chủ tối đa thành 12G và Bộ nhớ máy chủ tối thiểu thành 6G.

Về phía SSAS, đặt TotalMemoryLimit thành 12G và LowMemoryLimit thành 6G.

Ngoài ra, không kích hoạt Khóa trang trong bộ nhớ.

Hãy thử một vài lần lặp, điều chỉnh các số này lên hoặc xuống.

Nếu điều này không hoạt động và bạn biết rằng thực tế SQL và SSAS không cần phải chạy cùng một lúc, thì tôi sẽ thử đề xuất của Aaron về lập lịch công việc để tắt và bật dịch vụ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.