感觉sqlserver I/O读取在极限,如何降低I/O读取呢?比如有没有办法全部放进内存中?
------解决方案--------------------
那一定是32位系统,把OS的参数/APE 和SQL SERVER参数 AWE Enable设为1
------解决方案--------------------
降低物理读的最根本是要解决上来的sql语句效率问题。
如果不能解决sql 语句上的问题。
后期lz所能做的就是more memory more cpu ,但治标不治本。
------解决方案--------------------
如何将SQL Server表驻留内存和检测
------解决方案--------------------
即使/pae、awe了,sql占用了大内存
进程的内存使用量显示的还是1.7G左右,但是系统的剩余内存量少了
------解决方案--------------------
对于数据库,内存是第一!
------解决方案--------------------
找到io高的原因,而不是一有问题就去“解决”,更多应该思考问题的根源,然后从根源去解决。IO高通常是查询语句和索引不合理,造成大量的页读取。优化语句会更加有效。
------解决方案--------------------
内存比硬盘快多了,内存足够大,自然不用每次都读硬盘,自然也就快了几十倍。。。。。
------解决方案--------------------
但是开启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.
------解决方案--------------------
启用AWE需要在组策略中锁定内存页,并且重启数据库,否则大内存是没有开启的
------解决方案--------------------
可以为url字段增加一个hash字段,再对hash字段做索引,以hash判断重复会高效很多