数据库磁盘读写问题

码农阿呆 2012-12-10 03:35:06
数据库里2个表,数据文件放在2个不同的磁盘上。单独对这2个表进行更新,差不多8分钟左右,2个表加在一起就是16分钟。现在想提高速度,于是用2个线程同时对2个表进行操作,理想着应该并行差不多8分钟就能完成对2个表的操作,但是发现2个磁盘的效率都变成了差不多原来的一半,2个线程的查询运行玩还是16分钟,这是为什么?
...全文
240 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
發糞塗牆 2012-12-10
  • 打赏
  • 举报
回复
如果做的时候可以锁一下,那倒没所谓,因为你UPDATE可能锁的时间更长。你先测测吧
码农阿呆 2012-12-10
  • 打赏
  • 举报
回复
引用 16 楼 DBA_Huangzj 的回复:
如果楼主可以做的话,试一下下面的方法,记得要备份: 步骤1:创建一个和源表一样的表。 步骤2:把数据插入步骤1中的表,插入过程中select 其他字段,要修改的字段+追加的数据 from xxx 步骤3:truncate源表。然后把数据再插入回来。 但是不能频繁做,会锁表。
大神~我每半小时就要做一次这种update的...
开启时代 2012-12-10
  • 打赏
  • 举报
回复
如果是物理盘 那IO就不是问题所在了,两表直接是否有关系,导致阻塞存在?
發糞塗牆 2012-12-10
  • 打赏
  • 举报
回复
如果楼主可以做的话,试一下下面的方法,记得要备份: 步骤1:创建一个和源表一样的表。 步骤2:把数据插入步骤1中的表,插入过程中select 其他字段,要修改的字段+追加的数据 from xxx 步骤3:truncate源表。然后把数据再插入回来。 但是不能频繁做,会锁表。
nzperfect 2012-12-10
  • 打赏
  • 举报
回复
做两点,然后再测试: 1.ldf移到与这两个数据文件不同的盘。 2.将checkpoint时间改成20分钟。
nzperfect 2012-12-10
  • 打赏
  • 举报
回复
你再把ldf文件单独到一个磁盘试试,如果ldf不是瓶颈,速度上应该是会有提升的。
码农阿呆 2012-12-10
  • 打赏
  • 举报
回复
引用 11 楼 lixzhong 的回复:
楼主的不同磁盘 ,是不同物理盘 还是不同逻辑盘? 貌似逻辑盘啊
是不同的磁盘,插了两~
码农阿呆 2012-12-10
  • 打赏
  • 举报
回复
引用 10 楼 DBA_Huangzj 的回复:
引用 9 楼 spiritzhi 的回复: 引用 5 楼 DBA_Huangzj 的回复: 分布到物理磁盘的确有提高,但是别期望有极大的提高,日志还是会写磁盘的。默认checkpoint是1分钟执行一次,然后把已提交的写入到数据文件,这时候才会有提升。当日志需要写入的量很大的时候,性能才有明显提高。 那是不是将checkpoint的时间延长一些就能有效果?不要随便修改这些默认配置,其实如果不……
嗯,知道了。其实开始就是从提高update速度去考虑的,但是我这里要update的是一个varbinary(max)的p数据,每条记录都有3,4M大,执行时p=p+追加的数据,查询条件的字段上已经建了索引,没行更新时间大概500ms左右,但是会有波动,有时候只要200ms,有时候要1s,实在不知道该如何从这里进行优化
开启时代 2012-12-10
  • 打赏
  • 举报
回复
楼主的不同磁盘 ,是不同物理盘 还是不同逻辑盘? 貌似逻辑盘啊
發糞塗牆 2012-12-10
  • 打赏
  • 举报
回复
引用 9 楼 spiritzhi 的回复:
引用 5 楼 DBA_Huangzj 的回复: 分布到物理磁盘的确有提高,但是别期望有极大的提高,日志还是会写磁盘的。默认checkpoint是1分钟执行一次,然后把已提交的写入到数据文件,这时候才会有提升。当日志需要写入的量很大的时候,性能才有明显提高。 那是不是将checkpoint的时间延长一些就能有效果?
不要随便修改这些默认配置,其实如果不是内存不足,基本上不会引起磁盘动作,磁盘速度比内存慢接近千倍。而且无论CPU多强悍,到了最最底层,还是串行执行。分开磁盘存放数据文件是好事,你应该关注如何去加快update速度,如索引等。
码农阿呆 2012-12-10
  • 打赏
  • 举报
回复
引用 5 楼 DBA_Huangzj 的回复:
分布到物理磁盘的确有提高,但是别期望有极大的提高,日志还是会写磁盘的。默认checkpoint是1分钟执行一次,然后把已提交的写入到数据文件,这时候才会有提升。当日志需要写入的量很大的时候,性能才有明显提高。
那是不是将checkpoint的时间延长一些就能有效果?
zhazhuzhao 2012-12-10
  • 打赏
  • 举报
回复
分布到多个磁盘提高IO性能是有要求的,首先你的磁盘是否做了RAID,另外哦,你的RAID是否有瓶颈;还有你的日志文件和数据文件的分布等等,一般来说电脑最慢的就是写日志里,你想办法提高放日志的那个盘的IO看看!
Sylaro0 2012-12-10
  • 打赏
  • 举报
回复
大神 签个名呗
發糞塗牆 2012-12-10
  • 打赏
  • 举报
回复
引用 2 楼 Sylaro0 的回复:
学习~ 这篇写的不错 楼主可以看看 http://www.cnblogs.com/CareySon/archive/2012/02/14/2351149.html
我认识他....
發糞塗牆 2012-12-10
  • 打赏
  • 举报
回复
分布到物理磁盘的确有提高,但是别期望有极大的提高,日志还是会写磁盘的。默认checkpoint是1分钟执行一次,然后把已提交的写入到数据文件,这时候才会有提升。当日志需要写入的量很大的时候,性能才有明显提高。
码农阿呆 2012-12-10
  • 打赏
  • 举报
回复
引用 1 楼 DBA_Huangzj 的回复:
其实操作都在日志里面操作的,checkpoint或者lazy writer的时候才写入mdf/ndf。而且绝大部分操作都在内存中执行,不会到磁盘执行。
那请问很多文章提到,多个文件分布数据到多个硬盘中可以极大的提高IO性能,又是什么意思呢?为什么我这种情况就不行?
码农阿呆 2012-12-10
  • 打赏
  • 举报
回复
不太明白,我的那个操作就是往表的一个字段后面追加数据,发现日志文件确实长的很快。现在就是不懂为什么磁盘之间会受影响
Sylaro0 2012-12-10
  • 打赏
  • 举报
回复
学习~ 这篇写的不错 楼主可以看看 http://www.cnblogs.com/CareySon/archive/2012/02/14/2351149.html
發糞塗牆 2012-12-10
  • 打赏
  • 举报
回复
其实操作都在日志里面操作的,checkpoint或者lazy writer的时候才写入mdf/ndf。而且绝大部分操作都在内存中执行,不会到磁盘执行。

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧