Sql-Server
每個數據庫的 SQL 記憶體使用累積
以下查詢顯示如何查找每個數據庫使用的緩衝區記憶體的目前視圖。如何查找自上次 SQL 伺服器重新啟動以來每個數據庫的平均/累積記憶體緩衝區使用情況,而不僅僅是目前時間快照?
我們在一台伺服器上有 5 個微服務數據庫,沒有跨數據庫連接,不相關。從適當的數據庫呼叫儲存過程。我們正在嘗試分離到不同的伺服器,並找到基準 Ram 和核心處理器要求,但不確定最好的方法
謝謝,
-- 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;
我不相信有任何累積/平均指標。我也不認為以這種方式看待它是有意義的。我認為你不能從這樣的觀點中得出任何有用的結論。此資訊太不穩定,無法以這種方式使用。有些東西比其他東西老化得更快。這很大程度上取決於哪些頁面被頻繁訪問,系統上有多少可用記憶體等。此外,緩衝池並不是唯一使用記憶體的地方。還有權限記憶體、計劃記憶體、數據庫元數據記憶體等。因此,這種方法很可能會產生誤導。
除了查看之外
sys.dm_os_buffer_descriptors
,還有以下資源可以查看:
DBCC MEMORYSTATUS;
SELECT * FROM sys.dm_os_memory_clerks;
SELECT * FROM sys.dm_os_performance_counters;
關於這三個資源,請注意:
- DBCC 和其他的有一些重複(甚至還有一些其他的 DMV 沒有在這裡列出)
- 在這些資源中的每一個中,都有一些條目覆蓋了所有數據庫並且不容易分解,例如連接池記憶體、計劃記憶體等