日期:2014-05-17  浏览次数:20986 次

sqlserver磁盘I/O读取不够如何解决
感觉sqlserver I/O读取在极限,如何降低I/O读取呢?比如有没有办法全部放进内存中?

------解决方案--------------------
那一定是32位系统,把OS的参数/APE 和SQL SERVER参数 AWE Enable设为1
------解决方案--------------------
降低物理读的最根本是要解决上来的sql语句效率问题。 
如果不能解决sql 语句上的问题。 

后期lz所能做的就是more memory  more cpu ,但治标不治本。

------解决方案--------------------
如何将SQL Server表驻留内存和检测
------解决方案--------------------
引用:
服务器8G内存,数据库将近4G,sql设置内存使用无限大。但进程使用始终是1.7G左右。


即使/pae、awe了,sql占用了大内存
进程的内存使用量显示的还是1.7G左右,但是系统的剩余内存量少了
------解决方案--------------------
引用:
awe 开启以后有明显改善,磁盘读取I/O大概小了几十倍.


对于数据库,内存是第一!
------解决方案--------------------
找到io高的原因,而不是一有问题就去“解决”,更多应该思考问题的根源,然后从根源去解决。IO高通常是查询语句和索引不合理,造成大量的页读取。优化语句会更加有效。
------解决方案--------------------
引用:
引用:引用:服务器8G内存,数据库将近4G,sql设置内存使用无限大。但进程使用始终是1.7G左右。

即使/pae、awe了,sql占用了大内存
进程的内存使用量显示的还是1.7G左右,但是系统的剩余内存量少了

内存剩余 4.6G, 但是 sqlserver.exe 的内存占用始终90M左……


内存比硬盘快多了,内存足够大,自然不用每次都读硬盘,自然也就快了几十倍。。。。。
------解决方案--------------------
但是开启awe也不失为一个好方法,而且SQLServer最大内存不能无限大,否则Windows的都给吃光了。一般设到比物理内存少1~2G的那个做上限就可以了
------解决方案--------------------
正常情况下内存读取比磁盘搞千倍,不止几十倍哦
------解决方案--------------------
引用:
正常情况下内存读取比磁盘搞千倍,不止几十倍哦


磁盘读写有缓存机制,也就没那么慢了
------解决方案--------------------
2005以上可以使用表分区来分摊I/O。你这种类似搜索引擎的,最好换成nosql数据库,不然一定数量级之后就出现问题了。
------解决方案--------------------
把数据库装在SSD上,哈哈
------解决方案--------------------
楼主,首先明确一下你的系统是不是32位

开启AWE并要在安全策略中,将SQL Server启动账号赋予权限“锁定内存页”并重启下。这样SQL Server才能使用扩展内存,但是只是扩充的数据缓存。

你可以开启profiler抓下物理读、逻辑读很大的语句,检查是否缺少索引。

直观上看,你的配置足够支持你这么小的数据库的操作的,并发量访问多少?
------解决方案--------------------
首先确定内存足够,比如32位的话启动AWE,然后再看IO是否还有问题。 

如果IO仍然有问题,并且数据库2000以上数据库可以查询DMV最耗费IO的语句然后针对这些语句做优化
如果是2000的话可以用Profiler.
------解决方案--------------------
引用:
如何将SQL Server表驻留内存和检测


启用AWE需要在组策略中锁定内存页,并且重启数据库,否则大内存是没有开启的

------解决方案--------------------
引用:
个人感觉 以前 读取I/O大主要原因就是判断重复所造成的。以前试过不去判断重复直接插入 出现重复异常则不管,但实际应用中会有弊端。


可以为url字段增加一个hash字段,再对hash字段做索引,以hash判断重复会高效很多