私の友人は本日(彼の興奮した顧客を落ち着かせようとして)SQL Server 2005でどのデータベースが(サーバーのRAM)で)どのくらいのメモリを使用しているかを知る方法を尋ねましたいつでも。
それはまったく可能ですか?もしそうなら-どのように?組み込みのSQL Serverツールを使用してこれを実行できますか、それとも追加のサードパーティオプションが必要ですか?
彼の専用SQL Serverマシンが4 GBのRAMの200 KBを除いてすべて突然使用したため、彼の顧客はすべて混乱しました。私はこれが問題だとは本当に思っていませんが、この男は多かれ少なかれ夜間に起こったと主張しているので、メモリ使用量の増加の原因を知りたがっています。
マーク
これは、クエリがバッファプールにさらにページを読み込もうとしていること、およびバッファプールがより多くのメモリを取得してそれに対応することが原因であると考えられます。これがSQL Serverの動作方法です。ボックスでメモリ不足が発生した場合、SQL Serverにメモリを放棄するように要求します。顧客は心配する必要はありません。
DMVを使用できますsys.dm_os_buffer_descriptors
どのデータベースで使用されているバッファプールメモリの量を確認します。このスニペットは、各データベースからのクリーンアンドダーティ(最後のチェックポイント以降に変更された、またはディスクから読み取られた)ページがバッファプールにある数を示します。さらに変更できます。
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
これについては、このブログ投稿でもう少し詳しく説明します ストレージエンジンの内部:バッファープールには何がありますか?
また、KB 907877( DBCC MEMORYSTATUSコマンドを使用してSQL Server 2005のメモリ使用量を監視する方法 )をチェックアウトすることもできます。これにより、SQL Serverの残りのメモリ使用量の内訳がわかります(ただし、データベースごと)。
お役に立てれば!
友人は、SQLが取るRAMの量を制限することもできます。これは、Paulが上で述べたように、SQLは可能な限りすべてのメモリを使用するためです。
SQL Serverが使用するメモリの量を2000 Mb(またはあなたが最も良いと思うもの)に制限します。
--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