SQL Server flush故障通常指数据库中的数据无法正确地写入磁盘。这可能是由于磁盘故障、存储空间不足、IO错误、操作系统问题等原因引起的。
1. 检查磁盘空间是否足够:
SELECT DISTINCT drive, CONVERT(DECIMAL(18,2),ROUND(AVG(free_mb),2)) AS free_mb
FROM sys.dm_os_sys_memory
CROSS APPLY (SELECT LEFT(physical_name,1) AS drive, CONVERT(DECIMAL(18,2),ROUND((size/128.0)/1024.0,2)) AS size, CONVERT(DECIMAL(18,2),ROUND((FILEPROPERTY(name,'SpaceUsed')/128.0)/1024.0,2)) AS used, CONVERT(DECIMAL(18,2),ROUND(((size - FILEPROPERTY(name,'SpaceUsed'))/128.0)/1024.0,2)) AS free_mb
FROM sys.database_files) files
GROUP BY drive
HAVING CONVERT(DECIMAL(18,2),ROUND(AVG(free_mb),2)) < 100
2. 检查磁盘IO性能:
SELECT io_stall_read_ms, num_of_reads, CAST(io_stall_read_ms / (1.0 + num_of_reads) AS NUMERIC(10, 1)) AS avg_read_stall_ms,
io_stall_write_ms, num_of_writes, CAST(io_stall_write_ms / (1.0 + num_of_writes) AS NUMERIC(10, 1)) AS avg_write_stall_ms,
io_stall, num_of_bytes_read, num_of_bytes_written,
CAST(io_stall / (1.0 + num_of_reads + num_of_writes) AS NUMERIC(10, 1)) AS avg_io_stall_ms
FROM sys.dm_io_virtual_file_stats(DB_ID(), NULL)
WHERE file_id = 2 -- 2代表数据文件,3代表日志文件
GO
3. 检查数据库日志:
DBCC SQLPERF(LOGSPACE)
GO