数据库磁盘读写问题 数据库里2个表,数据文件放在2个不同的磁盘上。单独对这2个表进行更新,差不多8分钟左右,2个表加在一起就是16分钟。现在想提高速度,于是用2个线程同时对2个表进行操作,理想着应该并行差不多8分钟就能完成对2个表的操作,但是发现2个磁盘的效率都变成了差不多原来的一半,2个线程的查询运行玩还是16分钟,这是为什么? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 其实操作都在日志里面操作的,checkpoint或者lazy writer的时候才写入mdf/ndf。而且绝大部分操作都在内存中执行,不会到磁盘执行。 学习~这篇写的不错 楼主可以看看http://www.cnblogs.com/CareySon/archive/2012/02/14/2351149.html 分布到物理磁盘的确有提高,但是别期望有极大的提高,日志还是会写磁盘的。默认checkpoint是1分钟执行一次,然后把已提交的写入到数据文件,这时候才会有提升。当日志需要写入的量很大的时候,性能才有明显提高。 分布到多个磁盘提高IO性能是有要求的,首先你的磁盘是否做了RAID,另外哦,你的RAID是否有瓶颈;还有你的日志文件和数据文件的分布等等,一般来说电脑最慢的就是写日志里,你想办法提高放日志的那个盘的IO看看! 那是不是将checkpoint的时间延长一些就能有效果? 不要随便修改这些默认配置,其实如果不是内存不足,基本上不会引起磁盘动作,磁盘速度比内存慢接近千倍。而且无论CPU多强悍,到了最最底层,还是串行执行。分开磁盘存放数据文件是好事,你应该关注如何去加快update速度,如索引等。 嗯,知道了。其实开始就是从提高update速度去考虑的,但是我这里要update的是一个varbinary(max)的p数据,每条记录都有3,4M大,执行时p=p+追加的数据,查询条件的字段上已经建了索引,没行更新时间大概500ms左右,但是会有波动,有时候只要200ms,有时候要1s,实在不知道该如何从这里进行优化 你再把ldf文件单独到一个磁盘试试,如果ldf不是瓶颈,速度上应该是会有提升的。 做两点,然后再测试:1.ldf移到与这两个数据文件不同的盘。2.将checkpoint时间改成20分钟。 如果楼主可以做的话,试一下下面的方法,记得要备份:步骤1:创建一个和源表一样的表。步骤2:把数据插入步骤1中的表,插入过程中select 其他字段,要修改的字段+追加的数据 from xxx步骤3:truncate源表。然后把数据再插入回来。但是不能频繁做,会锁表。 大神~我每半小时就要做一次这种update的... 如果做的时候可以锁一下,那倒没所谓,因为你UPDATE可能锁的时间更长。你先测测吧 sql语句,查至少选择了1,3两门课程编号的学生信息 SSMS中如何用图形界面设置一列为IDENTITY (1, 1) PRIMARY KEY sql2005文件转成sql2000文件? 关于数据合并 设置事物的最大执行时间 问题看着简单,其实比较复杂,数据库高手进来看看 请熟悉SQL的朋友进来看看,聚合函数的使用 触发器错误请教 求救!设ODBC时出现这个样的错误Errot:18452! 数据库存取图片的问题 SQLSERVER设置自动增长列 用命令行启动SQL服务问题
这篇写的不错 楼主可以看看http://www.cnblogs.com/CareySon/archive/2012/02/14/2351149.html
1.ldf移到与这两个数据文件不同的盘。
2.将checkpoint时间改成20分钟。
步骤1:创建一个和源表一样的表。
步骤2:把数据插入步骤1中的表,插入过程中select 其他字段,要修改的字段+追加的数据 from xxx
步骤3:truncate源表。然后把数据再插入回来。
但是不能频繁做,会锁表。