Theo mặc định máy chủ SQL tiêu thụ toàn bộ bộ nhớ nếu không được ngắt và sử dụng tất cả bộ nhớ có sẵn khi được giới hạn. Đây là Normal.You cũng sẽ phải đảm bảo SQLSERVER là ứng dụng duy nhất trên hộp (được khuyến nghị) và also try to cap memory as per best practices.
tôi sẽ bắt đầu xử lý sự cố sử dụng dưới đây cách tiếp cận
1.Start tìm ký ức đầu tiêu thụ các truy vấn và xem liệu tôi có thể làm giảm sử dụng bộ nhớ của các truy vấn truy vấn tiêu thụ ..memory có thể được tìm thấy bằng cách dưới đây truy vấn.
SELECT TOP 10 SUBSTRING(qt.TEXT, (qs.statement_start_offset/2)+1,
((CASE qs.statement_end_offset
WHEN -1 THEN DATALENGTH(qt.TEXT)
ELSE qs.statement_end_offset
END - qs.statement_start_offset)/2)+1),
qs.execution_count,
qs.total_logical_reads, qs.last_logical_reads,
qs.total_logical_writes, qs.last_logical_writes,
qs.total_worker_time,
qs.last_worker_time,
qs.total_elapsed_time/1000000 total_elapsed_time_in_S,
qs.last_elapsed_time/1000000 last_elapsed_time_in_S,
qs.last_execution_time,
qp.query_plan
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp
ORDER BY qs.total_logical_reads DESC -- logical reads
-- ORDER BY qs.total_logical_writes DESC -- logical writes
-- ORDER BY qs.total_worker_time DESC -- CPU time
bây giờ bạn đã tìm thấy các truy vấn gây ra bộ nhớ cao, bạn cần tinh chỉnh chúng để xem bạn có thể giảm mức sử dụng bộ nhớ hay không.
EX: truy vấn có thể được thực hiện nhiều lần đọc do một chỉ số không phù hợp hoặc có thể là thiết bị IO của bạn có một vấn đề do đó vùng đệm dữ liệu là nhận được đỏ mặt nhiều lần
2.You cũng có thể tìm linh kiện hàng đầu mà sử dụng bộ nhớ, mang đến cho bạn một sự hiểu biết về cách RAM là chi
SELECT TOP(20) [type], [name], SUM(single_pages_kb) AS [SPA Mem, Kb]
FROM sys.dm_os_memory_clerks
GROUP BY [type], [name]
ORDER BY SUM(single_pages_kb) DESC;
nếu vùng đệm dữ liệu sử dụng bộ nhớ nhiều hơn một cách nhất quán, tôi sẽ không phải lo lắng về điều đó, nhưng nếu nó là cachestore_obcp.sau đó bạn có thể gặp phải nhiều truy vấn ad-hoc lấp đầy cửa hàng bộ nhớ cache mà là xấu
Một cuộc điều tra dẫn đến khác, vì vậy bạn sẽ phải khắc phục dựa trên dẫn như không có giải pháp một cú nhấp chuột
Lưu ý phụ: Không được đề xuất:
một trong các trường hợp dev của chúng tôi được sử dụng để đối mặt với cùng một vấn đề, vì vậy thay vì thực hiện tất cả các công cụ điều chỉnh, chúng tôi đã sử dụng lệnh dưới đây để phát hành bộ nhớ hiệu quả ngay lập tức..nhưng điều này không hề đề nghị cho một trường hợp sản xuất, vì điều này tuôn ra kế hoạch được lưu trữ trong bộ nhớ cache và bạn có thể phải đối mặt với áp lực CPU nhẹ
DBCC FREEPROCCACHE WITH NO_INFOMSGS;
Tài liệu tham khảo:
Tôi đã có một vấn đề tương tự, nhưng tìm thấy giải pháp (hơi kỳ lạ) là đặt giới hạn thấp hơn nhiều. Đúng là SQL Server sẽ chỉ lấy nhiều bộ nhớ cho chính nó vì nó được cho phép và không phát hành nó. Nếu giới hạn quá cao, thì cuối cùng các chức năng khác của máy chủ bị mất bộ nhớ, và toàn bộ hệ thống phải tiếp tục hoán đổi, làm chậm mọi thứ trong đó có SQL Server –
Kích thước cơ sở dữ liệu của bạn là bao nhiêu? Bạn đã kiểm tra thủ công các chức năng, thủ tục cho bất kỳ mức tiêu thụ bộ nhớ cao nào chưa? – user4221591
@JonathanWillcock chính xác là lý do tại sao máy chủ sql nên được cài đặt trên một máy chuyên dụng (ảo hoặc phisical, không quan trọng) mà không có gì khác hiện diện ngoại trừ mức tối thiểu cần thiết để máy chủ chạy. –