Tìm hiểu cơ sở dữ liệu nào trong SQL Server 2005 sử dụng bao nhiêu RAM


12

Một người bạn của tôi đã hỏi tôi hôm nay (cố gắng trấn tĩnh một khách hàng bị kích động của anh ta) làm thế nào bạn có thể tìm ra trong SQL Server 2005 cơ sở dữ liệu nào sử dụng bao nhiêu bộ nhớ (trong RAM của máy chủ) tại bất kỳ thời điểm nào.

Liệu có thể không? Nếu vậy - làm thế nào? Bạn có thể làm điều này với các công cụ SQL Server tích hợp hay bạn cần thêm tùy chọn của bên thứ ba?

Tất cả khách hàng của anh đều bối rối vì máy SQL Server chuyên dụng của anh đột nhiên sử dụng tất cả trừ 200KB RAM 4 GB. Tôi không nghĩ đây là một vấn đề, thực sự - nhưng vì anh chàng này tuyên bố nó xảy ra ít nhiều trong đêm, anh ta muốn biết điều gì đã gây ra sự gia tăng sử dụng bộ nhớ này .....

Marc

Câu trả lời:


25

Rất có thể là do một truy vấn muốn đọc nhiều trang hơn vào vùng đệm và vùng đệm chiếm thêm bộ nhớ để chứa điều đó. Đây là cách SQL Server được cho là hoạt động. Nếu hộp gặp áp lực bộ nhớ, nó sẽ yêu cầu SQL Server từ bỏ một số bộ nhớ, điều này sẽ làm. Khách hàng không nên quan tâm.

Bạn có thể sử dụng DMV sys.dm_os_buffer_descriptorsđể xem có bao nhiêu bộ nhớ nhóm bộ đệm đang được sử dụng bởi cơ sở dữ liệu nào. Đoạn mã này sẽ cho bạn biết có bao nhiêu trang sạch và bẩn (được sửa đổi từ điểm kiểm tra cuối hoặc đọc từ đĩa) từ mỗi cơ sở dữ liệu trong nhóm bộ đệm. Bạn có thể sửa đổi thêm.

SELECT
   (CASE WHEN ([is_modified] = 1) THEN 'Dirty' ELSE 'Clean' END) AS 'Page State',
   (CASE WHEN ([database_id] = 32767) THEN 'Resource Database' ELSE DB_NAME (database_id) END) AS 'Database Name',
   COUNT (*) AS 'Page Count'
FROM sys.dm_os_buffer_descriptors
   GROUP BY [database_id], [is_modified]
   ORDER BY [database_id], [is_modified];
GO

Tôi giải thích điều này nhiều hơn một chút trong bài viết trên blog này Bên trong Storage Engine: Cái gì trong vùng đệm?

Bạn cũng có thể kiểm tra KB 907877 ( Cách sử dụng lệnh DBCC MEMORYSTATUS để theo dõi việc sử dụng bộ nhớ trên SQL Server 2005 ), điều này sẽ cho bạn ý tưởng về sự cố của phần còn lại của việc sử dụng bộ nhớ của SQL Server (nhưng không phải trên cơ sở dữ liệu).

Hi vọng điêu nay co ich!


Bạn là một thiên tài, Paul!
marc_s

2

Bạn của bạn cũng có thể giới hạn dung lượng RAM mà SQL sẽ sử dụng vì, như Paul nói ở trên, SQL sẽ chiếm mọi bit bộ nhớ có thể.

Giới hạn dung lượng bộ nhớ mà SQL Server lấy ở mức 2000 Mb (hoặc bất cứ thứ gì bạn nghĩ là tốt nhất).

--Enable advanced options:
USE master
EXEC sp_configure 'show advanced options', 1
RECONFIGURE WITH OVERRIDE

--Set the maximum amount of memory to 2000 MB:
USE master
EXEC sp_configure 'max server memory (MB)', 2000
RECONFIGURE WITH OVERRIDE

--Display the newly set configuration:
USE master
EXEC sp_configure 'max server memory (MB)'

--Set 'show advanced options' back to default:
USE master
EXEC sp_configure 'show advanced options', 0 
RECONFIGURE WITH OVERRIDE

Cảm ơn - Tôi đã biết cách giới hạn bộ nhớ, nhưng tôi không biết cách tìm ra db nào đang sử dụng bao nhiêu bộ nhớ nhóm bộ đệm tại bất kỳ thời điểm nào.
marc_s
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.