关于writes写入次数的误区

原创 2017年09月28日 13:10:45

前言

在群里小伙伴提出的一个问题,感觉很有意思,所以专门分享一下。

背景

在运维数据库的时候,有时候会遇到磁盘写入非常频繁的情况。磁盘活动时间100%,队列长度高等。如下图:

此时,我们经常会去做的一件事情是,开启profier 然后查看write数字高的语句,找出是什么语句造成的写入压力。

关于这个列,微软的说明如下:代表写入物理磁盘的次数

数据修改的过程
当客户端发出如下请求时:update test set id=10 where id=1 ,数据库内部修改过程如下:
1 .修改内存中,也就是BUFFER POOL里面的数据页.
2.把日志写入LDF日志文件
此时 事务就可以提交了。对前面应用来讲。这个update操作已经完成。
3.后台进程进行checkpoint 或者 lzay writer 的时候,才会吧内存中的脏页刷新到mdf磁盘文件
不过对于批量写入比如bulk insert and select into.,有一个 eager writer。页面可能会马上被写入磁盘

测试

CHECKPOINT
DBCC DropCleanBuffers
SELECT *
FROM sys.dm_os_buffer_descriptors
WHERE database_id = DB_ID()
AND is_modified = 1
SELECT '更新前', num_of_writes, num_of_bytes_written
FROM sys.dm_io_virtual_file_stats(db_id(), 1)

UPDATE test SET id =10 WHERE id=1


--更新后
SELECT *
FROM sys.dm_os_buffer_descriptors
WHERE database_id = DB_ID()
AND is_modified = 1

SELECT '更新后', num_of_writes, num_of_bytes_written
FROM sys.dm_io_virtual_file_stats(db_id(), 1)

从图中,可以看到,脏页增加了,但是 数据文件的写入次数并没有增加。
--checkpoint以后
CHECKPOINT
SELECT *
FROM sys.dm_os_buffer_descriptors
WHERE database_id = DB_ID()
AND is_modified = 1

SELECT 'checkpoint后', num_of_writes, num_of_bytes_written
FROM sys.dm_io_virtual_file_stats(db_id(), 1)

checkpoint以后脏页没有了,写入磁盘次数从77变成了84

总结

从上面测试可以看出,profiler里面的writer 栏位 和官方的描述有出入。并不能代表实际的磁盘写入.所以如果磁盘有压力还需要从其他的是方法去排查。
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

HDU 3732 Ahui Writes Word 解题报告

动态规划 背包问题

Realm源码分析之Writes

上篇是Realm源码分析的开篇,是关于Realm数据库的初始化,关键一点是要抓住RealmProxyMediator这个代理中介者的实例化过程。在理解了Realm初始化之后,接下来就可以追踪Realm...
  • tscyds
  • tscyds
  • 2017年07月26日 15:50
  • 488

hdu 3732 Ahui Writes Word 【多重背包】、好题

Ahui Writes Word Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)...

hdu 3732 Ahui Writes Word(简单dp+贪心)

Ahui Writes Word Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others...

【hdu3732】Ahui Writes Word——多重背包

题目: Ahui Writes Word Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot...
  • CFhM_R
  • CFhM_R
  • 2016年03月07日 17:05
  • 157

延长FLASH和EEPROM芯片写入次数的小方法

开发电子产品时,常常需要断电后保存某些数据,这就需要使用FLASH或EEPROM芯片,这两种芯片,可擦除的次数是有限制的,通常FLASH为10万次,EEPROM要多一点,为100万甚至1000万次。F...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于writes写入次数的误区
举报原因:
原因补充:

(最多只允许输入30个字)