4 .2 .4 配置存储系统
4 .2 .4 配置存儲系統
在考慮存儲系統時,數量、大小、速度及陣列情況都是需要納人考慮范圍內的,并且
需要根據工作負載而定。當 SQL Server所需的數據不在內存的Buffer cache中時,就會讀 取磁盤,引起磁盤I/O。當數據修改時,事務也會寫到事務日志文件中,然后寫人數據文件
中,這也會引起磁盤I/O。除了應用程序日常操作引起的I/O以外,還有以下操作也會引起
額外的I/O。
□ 日志備份:會引起讀寫I/O壓力,因為需要讀取事務日志文件中的信息,然后寫入
日志備份文件中。
□索引維護:包括重組和重建,這個操作非常消耗1/0、內存、CPU資源。
□全文目錄和全文索引:“天生”就是高讀寫I/O的操作。
□數據庫Checkpoint操作:會引發臟頁寫進數據文件的操作。 □髙可用:絕大部分高可用都借助同步日志實現,對日志的讀寫會引起磁盤I/O。
在OLTP中,天生就具有高IOPS及寫操作。對于這類負載,最起碼的合理配置應該是,
把數據文件、日志文件及TempDB的文件分到不同物理磁盤存放,從而分攤對文件的I/O爭用。 對于OLAP,事務運行時間長、規模大,數據相對靜態,對磁盤的IOPS要求較低,但
是對I/O吞吐量的要求較髙,因為每次返回的數據量相對較大。并且這種負載中索引維護、
日志備份等操作較少,所以應該針對I/O吞吐量進行優化。
4 .2 .5 檢查讀寫速率
除了前期規劃,有時候需要對當前已經在使用的系統進行檢查。下面的腳本可以運行
在當前系統,并查看當前數據庫文件中的IO情況。
— 當前數據庫文件的I /O 統計信息
SELECT DB_NAME(vfs.database_id) AS database_name ,
vfs.database_id ,
vfs.FILE_ID ,
io_stall_read_ms / NULLIF(num_of_reads, 0) AS avg_read_latency ,
io_stall_write_ms / NULLIF(num_of_writes, 0) AS avg_write_latency ,
io_stall / NULLIF(num_of_reads + num_of_writes, 0) AS avg_total_latency ,
num_of_bytes_read / NULLIF(num_of_reads, 0) AS avg_bytes_per_read ,
num_of_bytes_written / NULLIF(num_of_writes, 0) AS avg_bytes_per_write ,
vfs.io_stall ,
vfs.num_of_reads ,
vfs.num_of_bytes_read ,
vfs.io_stall_read_ms ,
vfs.num_of_writes ,
vfs.num_of_bytes_written ,
vfs.io_stall_write_ms ,
size_on_disk_bytes / 1024 / 1024. AS [size_on_disk_mbytes(MB)] ,
mf.physical_name
FROM sys.dm_io_virtual_file_stats(DB_ID('master'), 1) AS vfs
JOIN sys.master_files AS mf ON vfs.database_id = mf.database_id
AND vfs.FILE_ID = mf.FILE_ID
?
除了這個腳本,還有其他3個腳本可用于檢査當前系統的讀寫情況,如代碼清單
4-1? 4-3所示 )。
代碼清單4 -1 計劃緩存中存儲過程的邏輯寫排名
--計劃緩存中存儲過程的邏輯寫排名(SQL 2008 and 2008 R 2 適 用 },主要是寫操作的壓力
SELECT p.name AS [SP N a m e ] , qs.total_logical_writes AS [TotalLogicalWrites], qs.total_logical_reads AS [TotalLogicalReads], qs.execution_count , qs.cached_time FROM sys.procedures AS p INNER JOIN sys.dm_exec_jprocedure_stats AS qs ON p.[object_id] = qs. [object_
id]
WHERE qs.database_id = DB_ID()AND qs.total_logical_writes > 0 ORDER BY qs.total_logical_writes DESC;
代碼清單4 - 2 計劃緩存中存儲過程的物理讀排名
--計劃緩存中存儲過程的物理讀排名(SQL 2008 and 2008 R 2 適用} , 主要是讀操作的壓力
SELECT p.name AS [SP Name] ? qs.total_physical_reads AS [TotalPhysicalReads], qs.total_logical_reads AS [TotalLogicalReads], qs.total_physical_reads / qs.execution_count AS [AvgPhysicalReads], qs .execution_count , qs.cached_time FROM sys.procedures AS p INNER JOIN sys.dm_exec_procedure_stats AS qs ON p.[object_id] = qs.[object_
id]
WHERE qs.database_id = DB_ID() AND qs.total_physical_reads > 0
代碼清單4 - 3 計劃緩存中存儲過程的邏輯寫排名
--計劃緩存中存儲過程的邏輯寫排名(SQL 2008 and 2008 R 2 適用) ,主要是讀操作的壓力,并且在 內存中
SELECT p.name AS [SP N a m e ] , qs.total_logical_reads AS [TotalLogicalReads] , qs.total_logical_wri tes AS [TotalLocicalWrites], qs.execution_count , qs.cached_time FROM sys.procedures AS p INNER JOIN sys.dm_exec_procedure_stats AS qs ON p.[object_id] = qs.[object_
id]
WHERE qs.database_id = DB_ID() AND qs.total_logical_reads > 0 ORDER BY qs.total_logical_reads DESC;
具有高度寫操作的負載,應該與日志文件分開存放,否則會給數據文件及日志文件帶
來I/O壓力。對于大數據量的庫,通常會使用多個數據文件分別存放數據,以減少I/O爭
用。分開文件的原因之一是數據文件和日志文件的行為不一樣,特別是日志文件的順序讀
寫,如果與數據文件放在一起,會導致磁頭的來回移動,降低I/O性能。上面的腳本在一
定程度上也和RAID配置有關,對于OLTP,寫性能一般比讀性能重要;而對于OLAP系
統,讀性能往往比寫性能重要。
轉載于:https://www.cnblogs.com/zhouwansheng/p/9247670.html
總結
以上是生活随笔為你收集整理的4 .2 .4 配置存储系统的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Shell脚本自动备份数据库
- 下一篇: SSH框架整合遇到的错误——org.sp