web-dev-qa-db-ja.com

データベースごとのSQLメモリ使用量の累積

次のクエリは、各データベースで使用されているバッファメモリの現在のビューを見つける方法を示しています。現在の時刻のスナップショットだけでなく、最後のSQLサーバーの再起動以降の各データベースの平均/累積メモリバッファー使用量を確認するにはどうすればよいですか?

1つのサーバーに5つのマイクロサービスデータベースがあり、データベース間の結合はなく、関連していません。ストアドプロシージャは、適切なデータベースから呼び出されます。私たちは異なるサーバーに分離しようとしており、ベースラインのRAMとコアプロセッサの要件を見つけようとしていますが、これを行うための最良の方法はわかりません

ありがとう、

データベースによるSQLメモリ使用量の決定

-- Note: querying sys.dm_os_buffer_descriptors
-- requires the VIEW_SERVER_STATE permission.

DECLARE @total_buffer INT;

SELECT @total_buffer = cntr_value
FROM sys.dm_os_performance_counters 
WHERE RTRIM([object_name]) LIKE '%Buffer Manager'
AND counter_name = 'Database Pages';

;WITH src AS
(
SELECT 
database_id, db_buffer_pages = COUNT_BIG(*)
FROM sys.dm_os_buffer_descriptors
--WHERE database_id BETWEEN 5 AND 32766
GROUP BY database_id
)
SELECT
[db_name] = CASE [database_id] WHEN 32767 
THEN 'Resource DB' 
ELSE DB_NAME([database_id]) END,
db_buffer_pages,
db_buffer_MB = db_buffer_pages / 128,
db_buffer_percent = CONVERT(DECIMAL(6,3), 
db_buffer_pages * 100.0 / @total_buffer)
FROM src
ORDER BY db_buffer_MB DESC; 
1
user129291

これには累積的/平均的な指標はないと思います。また、このように見るのも意味がないと思います。そのような見方から、有益な結論を導き出すことはできないと思います。この情報は、そのように使用するには揮発性が高すぎます。一部のものは他のものより早く古くなります。これは、頻繁にアクセスされるページ、システムで使用可能なメモリの量などに大きく依存します。また、メモリの使用はバッファプールだけではありません。アクセス許可キャッシュ、プランキャッシュ、DBメタデータキャッシュなどもあります。したがって、そのようなアプローチはおそらく誤解を招くでしょう。

sys.dm_os_buffer_descriptorsを調べることに加えて、チェックする次のリソースもあります。

  • DBCC MEMORYSTATUS;
  • SELECT * FROM sys.dm_os_memory_clerks;
  • SELECT * FROM sys.dm_os_performance_counters;

これらの3つのリソースに関して、次の点に注意してください。

  1. dBCCと他のDMV(およびここにリストされていない他のDMV)の間にはいくつかの重複があります。
  2. これらの各リソースには、接続プールキャッシュ、プランキャッシュなど、すべてのデータベースをカバーし、簡単に分類できないエントリがいくつかあります。
0
Solomon Rutzky