Sql-Server

SQL 儲存大小 - 如何獲取正在訪問的數據的統計資訊

  • August 4, 2017

如何監控正在訪問哪些數據以及訪問頻率?

我需要遷移幾個(非常)小的 SQL Server 實例,每個實例都有幾個小型數據庫。目前配置基於許多具有本地儲存的小型伺服器。新配置基於具有單個 NAS 的單個伺服器。

到目前為止,SQL Server 記憶體和 CPU 大小都可以。還有數據庫大小和總 IOPS。但是沒有關於實際訪問哪些數據集的現有文件。所以,基本上,我不知道真正的儲存需求是什麼,因為 IOPS 的總量可能只適用於幾個表(所以它會像只用幾個 SSD 的魅力)或者如果整個數據庫都在被掃描,我需要幾十個磁碟。

那麼,回到這個問題:我如何“分析”並獲取正在訪問的數據的統計資訊?在 SQL 或 Windows 級別?

如果問題的關鍵是“我如何獲得正確的數據來調整我的儲存子系統的大小?” 並且您想在許多伺服器上相當重複地使用 Windows 性能計數器。

這是我最低限度的清單:

Logical Disk(*)\Current Disk Queue Length
Logical Disk(*)\Disk Read Bytes/Sec
Logical Disk(*)\Disk Reads/Sec
Logical Disk(*)\Disk Write Bytes/Sec
Logical Disk(*)\Disk Writes/Sec
Logical Disk(*)\Disk Transfers/Sec
Logical Disk(*)\Avg. Disk Sec/Read
Logical Disk(*)\Avg. Disk Sec/Write
Logical Disk(*)\Avg. Disk Sec/Transfer

Avg. Disk Sec/XXX將為您提供每個操作(讀/寫)的目前毫秒數。了解這一點很重要,因此當您移動到新儲存時,您會達到或超過目前設置。這也很重要,因為我們不希望這裡的數字非常高,因為這會以其他方式表現出來,使其“感覺”就像 SQL Server 很慢。

Disk XXX/Sec將為您提供操作數 (IOPS),其中傳輸為總 IOPS(或讀取 + 寫入)。這還將為您提供伺服器的 IO 配置文件,了解您是重讀還是重寫,以便可以適當調整任何記憶體或為每個儲存單元購買更多記憶體。

Disk XXX Bytes/Sec將使您了解讀取/寫入/總計發生的 IO 大小。這與Disk XXX/Sec應該為您提供更好的 IO 配置文件相關聯。您是否在執行許多小型 IO、許多大型、混合等。它將幫助您決定如何劃分 LUN、共享等。它還將幫助您了解您需要對任何記憶體或記憶體執行哪些操作可能混合在一起的尺寸。


我知道我正在使用 30k IOPS。儲存解決方案可以提供這一點。但是建議的儲存解決方案可以使用 Fast VP / Fast Cache 來實現。這實際上意味著它能夠為某些數據(熱門數據)提供 30k。但不是所有的。我需要知道哪些數據集需要 30k IOPS。因為它整天都是隨機數據,我知道儲存將無法記憶體或將該數據移動到最快的驅動器以獲得 30k。我最終會遇到問題。

您無法控制使用者最終想要什麼,並且在某些情況下(插入)數據甚至還不存在。如果您在該級別遇到儲存問題,您需要返回並要求您的儲存管理員不要分層。如果您想知道每個數據庫、每個週期所觸及的每個頁面,您將需要創建一個擴展的事件會話並請求幾 TB 的儲存空間來處理您將要處理的大量數據。恕我直言,您的目標是一個根本不可行的未知移動目標。與您的儲存團隊交談。

您可以執行類似於以下內容的查詢,該查詢將顯示自 SQL Server 啟動以來文件的讀取和寫入次數。更改第 6 行中的數字以獲取不同數據庫的統計資訊。1 = master,2 = tempdb,3 = model,等等。5 及以上將用於您的使用者數據庫。

SELECT files.physical_name, files.name, 
 stats.num_of_writes, 
 CAST(ROUND((1.0 * stats.io_stall_write_ms / stats.num_of_writes),2) AS numeric(36,2)) AS avg_write_stall_ms,
 stats.num_of_reads, 
 CAST(ROUND((1.0 * stats.io_stall_read_ms / stats.num_of_reads),2) AS numeric(36,2)) AS avg_read_stall_ms
FROM sys.dm_io_virtual_file_stats(2, NULL) as stats
INNER JOIN master.sys.master_files AS files 
 ON stats.database_id = files.database_id
 AND stats.file_id = files.file_id
ORDER BY name

引用自:https://dba.stackexchange.com/questions/97916