SQL bỏ tất cả các trang từ bộ đệm bộ đệm cứ sau vài phút


9

Tôi có một nút SQL2012 SP4 duy nhất chạy một số cơ sở dữ liệu.

Máy chủ có sẵn 20GB bộ nhớ, 14GB được phân bổ cho SQL (không có gì khác chạy trên hộp).

Cứ sau vài phút SQL lại xóa toàn bộ bộ đệm. Tuổi thọ của trang đạt 0, các mô tả bộ đệm bộ đệm cho thấy rằng không có gì trong bộ đệm.

Tôi đã xem qua các thông báo giám sát tài nguyên và các thông báo đang nảy xung quanh từ mức cao / ổn định / thấp cứ sau vài mili giây:

RESOURCE_MEMPHYSICAL_HIGH RESOURCE_MEM_STEADY RESOURCE_MEMPHYSICS_LOW

Với dấu thời gian cách nhau vài mili giây. PLE về cơ bản là một mô hình răng cưa.

Tôi đã thấy điều này xảy ra trước đây với SQL2012 SP1 và câu hỏi này:

Các trang miễn phí SQL Server 2012 trong bộ đệm Cache không được sử dụng

Có vẻ là một vấn đề tương tự, mặc dù tôi đã cập nhật lên SP4.

Tôi đã thử bật LPIM cho tài khoản dịch vụ và tôi đã thử làm rối với cài đặt bộ nhớ tối đa. Việc giảm bộ nhớ tối đa dường như đã khiến bộ đệm bộ đệm trống thường xuyên hơn.

Bất kỳ ý tưởng về những gì để kiểm tra tiếp theo?

Khối lượng công việc của máy chủ hoàn toàn không có gì (Tôi đang cuộn qua danh sách các mục trong hệ thống ERP và nó đạt khoảng 40-50 MB trước khi bộ nhớ cache giảm xuống một lần nữa).

Thật thú vị vì tôi đã nâng cấp từ SP1 để thử và sửa lỗi này - bộ nhớ cache có khoảng 500MB. Kể từ đó, tôi giảm cài đặt bộ nhớ tối đa xuống 14GB, điều này dường như đã làm cho nó tồi tệ hơn.

Tôi tự hỏi liệu Windows có hoảng loạn và ném thông báo không chính xác về áp suất bộ nhớ tại SQL hay không - theo sau đó, máy chủ có bộ nhớ tối đa được đặt thành không bị chặn dường như chạy ok-ish nhưng không bao giờ lấp đầy bộ đệm hơn vài trăm MB - nhưng bây giờ nó hầu như không đến 50 ...

Thông tin thêm: cho những người đã hỏi

Số lõi: 4

Kích thước cơ sở dữ liệu: 80GB

Nhật ký lỗi hiển thị: A significant part of sql server process memory has been paged out. This may result in a performance degradation. Duration: 0 seconds. Working set (KB): 247928, committed (KB): 495656, memory utilization: 50%.

Kết quả chạy tập lệnh từ liên kết này: https://www.sqlskills.com/bloss/jonathan/identifying-external-memory-pressure-with-dm_os_ring_buffers-and-ring_buffer_resource_monitor/

Kết quả truy vấn áp lực bộ nhớ

Không chắc chắn làm thế nào để giải thích những điều này - có vẻ như có cả áp lực bộ nhớ bên trong và bên ngoài tại nhiều thời điểm ..

Thông tin thêm

Đây là một vị khách Hyper-V đang ngồi trên một máy chủ với 96GB tổng ram trong đó khoảng một nửa được phân bổ cho khách.

Các triệu chứng có vẻ tương tự như thế này:

SQL Server 2012 x64 - không thể phân bổ an toàn hơn 50% RAM

Tuy nhiên, khi tôi phân bổ 14GB cho SQL, các triệu chứng đã xuất hiện ngay lập tức (chỉ có 3GB bộ nhớ máy chủ được cam kết)

Đêm qua tôi đã tăng bộ nhớ khách lên 32GB và vấn đề đã biến mất nhưng tôi chỉ thấy 14GB cam kết của tổng bộ nhớ máy chủ (và doanh nghiệp chạy DB đang bận sáng nay và đây là lúc họ thường gặp vấn đề về hiệu năng).

Khoảng 8-9GB dữ liệu trong bộ nhớ cache tại thời điểm này, dường như ổn định.

Dường như gợi ý rằng 20GB là đủ cho khối lượng công việc trên hộp này. Bây giờ tôi rất vui khi để lại 32GB nhưng tôi thực sự muốn tìm hiểu sâu hơn về vấn đề này để tôi có thể định cấu hình tốt hơn cho VM / SQL.

Tôi sẽ tiếp tục đào và cập nhật nếu tôi tìm thấy câu trả lời!

Nhiều thông tin hơn nữa:

Tôi đã không khởi động lại SQL sau khi bật LPIM (không nhận ra đó là yêu cầu) nhưng tôi đã bật cài đặt này và khởi động lại để nâng cấp bộ nhớ nên bây giờ tôi không chắc việc tăng bộ nhớ hay LPIM đã giảm bớt các vấn đề.

Sẽ nhảy vào tối nay khi máy chủ không hoạt động và kiểm tra xem nó trông như thế nào ở mức 20GB nữa.

Hơn nữa Thông tin thêm:

Hiện tại máy chủ đang hoạt động ổn với 32 GB được phân bổ và chúng tôi chưa thấy vấn đề gì kể từ đó. Nếu cây này mọc lại, tôi sẽ quay lại câu hỏi này và tiếp tục đào.

Hiện tại vẫn còn là một bí ẩn nhưng tôi đoán là hiện tại tôi chỉ che giấu các vấn đề.


3
Đây có phải là một máy ảo? Nghe có vẻ như trình điều khiển bóng của VMware gây áp lực bộ nhớ.
Max Vernon

1
Nếu đây là VM chạy trên VMWare, hãy xem bài viết này: Khắc phục sự cố Hiệu suất CPU trên VMware . Tôi biết nó nói CPU trong tiêu đề, nhưng cũng có thông tin về bộ đếm trong đó.
Erik Darling

Có, đó là một máy chủ siêu v chạy 3 máy chủ. Cảm ơn thông tin tôi sẽ kiểm tra
Charleh

Tôi đã tìm thấy cho đến nay máy chủ có đủ bộ nhớ để thêm 12GB. Tôi đã cho phép SQL 24GB (tổng số khách lên tới 32GB) và cho đến nay nó có vẻ lành mạnh hơn, nhưng tôi vẫn muốn hiểu những gì đang diễn ra vì 14-16GB dường như quá đủ cho khối lượng công việc mà SQL sẽ tiêu thụ hàng ngày ..
Charleh

1
Bạn đã điều tra Ballooning? Nếu VMWare tăng trình điều khiển bóng, thì HĐH sẽ báo hiệu bộ nhớ thấp và SQL Server sẽ phản hồi tương ứng. Bước đầu tiên là điều tra xem bạn có khinh khí cầu hay không.
Tibor Karaszi

Câu trả lời:


4

Mặc dù bạn dường như đã tự giải quyết vấn đề, đây là tóm tắt các thông tin liên quan xung quanh giải pháp.

Tùy chọn cấu hình máy chủ bộ nhớ máy chủ

Microsoft viết trong bài viết của họ Tùy chọn cấu hình máy chủ bộ nhớ máy chủ (Microsoft | SQL Docs) cho phần Đặt thủ công các tùy chọn bộ nhớ

( nhấn mạnh của tôi)

Ngoài ra, việc đặt giá trị min_server_memory là điều cần thiết trong môi trường ảo hóa để đảm bảo áp lực bộ nhớ từ máy chủ bên dưới không cố gắng phân bổ bộ nhớ từ nhóm bộ đệm trên máy ảo SQL Server khách (VM) ngoài những gì cần thiết cho hiệu năng chấp nhận được.

Phần liên quan đến Trang khóa trong bộ nhớ (cùng tài liệu) có đoạn hấp dẫn tương đương với nội dung:

( nhấn mạnh của tôi)

Chính sách Windows này xác định tài khoản nào có thể sử dụng một quy trình để giữ dữ liệu trong bộ nhớ vật lý, ngăn hệ thống phân trang dữ liệu sang bộ nhớ ảo trên đĩa . Khóa các trang trong bộ nhớ có thể giữ cho máy chủ phản hồi khi bộ nhớ phân trang vào đĩa xảy ra. Tùy chọn Khóa trang trong bộ nhớ được đặt thành BẬT trong phiên bản SQL Server Standard và cao hơn khi tài khoản có đặc quyền chạy sqlservr.exe đã được cấp quyền người dùng Windows Lock Pages trong bộ nhớ (LPIM).

Phần LPIM tiếp tục giải thích rằng:

( nhấn mạnh của tôi)

Đặt tùy chọn này không ảnh hưởng đến quản lý bộ nhớ động của SQL Server, cho phép nó mở rộng hoặc thu hẹp theo yêu cầu của các thư ký bộ nhớ khác. Khi sử dụng Khóa trang trong Bộ nhớ người dùng, bạn nên đặt giới hạn trên cho bộ nhớ máy chủ tối đa như chi tiết ở trên.

... và trong một bình luận quan trọng rằng:

( nhấn mạnh của tôi)

Đặt tùy chọn này chỉ nên được sử dụng khi cần thiết, cụ thể là nếu có dấu hiệu cho thấy quá trình sqlservr đang được phân trang . Trong trường hợp này, lỗi 17890 sẽ được báo cáo trong Errorlog, giống như ví dụ dưới đây:

A significant part of sql server process memory has been paged out. 
This may result in a performance degradation. Duration: #### seconds. 
Working set (KB): ####, committed (KB): ####, memory utilization: ##%.  

Bắt đầu với SQL Server 2012 (11.x), cờ theo dõi 845 không cần thiết cho Phiên bản Chuẩn để sử dụng Trang bị khóa.

Giải pháp

Dựa trên những phát hiện trên và quan sát của bạn, giải pháp cho vấn đề của bạn sẽ là cấu hình các cài đặt sau:

  1. min_server_memory (5-10 GB?) Dựa trên nhận xét của bạn:

    Khoảng 8-9GB dữ liệu trong bộ nhớ cache tại thời điểm này, dường như ổn định.

    ... và khuyến nghị của Microsoft về việc thiết lập a min_server_memory.

  2. max_server_memory (20-32 GB) dựa trên quan sát của bạn:

    Dường như gợi ý rằng 20GB là đủ cho khối lượng công việc trên hộp này. Bây giờ tôi rất vui khi để lại 32GB nhưng tôi thực sự muốn tìm hiểu sâu hơn về vấn đề này để tôi có thể định cấu hình tốt hơn cho VM / SQL.

    ... và khuyến nghị của Microsoft về việc thiết lập a max_server_memory.

  3. Khóa trang trong bộ nhớ: Được bật cho tài khoản dịch vụ máy chủ SQL.
    Dựa trên mục nhập ERRORLOG của phiên bản SQL Server mà bạn đã đề cập và tài liệu tham khảo của Microsoft trong bài viết.

    Đặt tùy chọn này chỉ nên được sử dụng khi cần thiết, cụ thể là nếu có dấu hiệu cho thấy quá trình sqlservr đang được phân trang .

Trước khi bạn tiếp tục ...

(Một trong) lợi ích của việc có một môi trường ảo hóa là các tài nguyên có thể / nên được chia sẻ và thậm chí có thể được cam kết quá mức. Tuy nhiên, bật Khóa trang trong bộ nhớ (LPIM) có thể có tác động tiêu cực đến môi trường Hyper-V của bạn, nếu phần cứng của bạn đang lưu trữ nhiều phiên bản. Một cam kết quá mức của RAM có thể làm cạn kiệt các trường hợp khác.

Trước khi bạn xem xét chuyển đổi tất cả các đòn bẩy, hãy bắt đầu với cài đặt 1. và 2. và nếu tinh chỉnh các cài đặt bộ nhớ này không hoạt động, thì hãy xem xét bật LPIM nếu bạn có đủ phần cứng .

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.