上一篇讲到如何从实例级别,知道最大的瓶颈在哪儿。
一般情况下数据库的瓶颈很有可能在 IO上,因为当数据库比较大的时候,内存没办法缓存下所有数据,所以,总是需要从磁盘读取数据到内存,在从内存访问数据进行计算的,而磁盘的访问速度和内存的访问速度相差千倍,就会拖慢整个处理速度。
可以通过sys.dm_io_virtual_file_stats 函数, 获取到 数据库-文件级别的性能统计信息,包括:
1、读取次数,读取字节数
2、写入次数,写入字节数
3、等待次数
这样我们就能知道哪个数据库、哪个文件是访问最频繁的,这就是IO瓶颈。
代码如下:
select DB_NAME(database_id),
file_name(file_id),
-- 该文件在磁盘上占用的字节数。
--对于稀疏文件,此数字是数据库快照在磁盘上所占用的实际字节数
size_on_disk_bytes,
sample_ms, --自从计算机启动以来的毫秒数
io_stall_read_ms, --用户等待文件中发出读取所用的总时间
io_stall_write_ms, --用户等待在该文件中完成写入所用的总时间
io_stall, --用户等待在文件中完成 I/O 操作所用的总时间
--为io_stall_read_ms+io_stall_write_ms
num_of_reads, --在该文件中读取的次数
num_of_bytes_read, --在该文件中读取的总字节数
num_of_writes, --在该文件中写入的次数
num_of_bytes_written --在该文件中写入的总字节数
from sys.dm_io_virtual_file_stats(null, --数据库id
null --文件id
)
order by io_stall desc