我们网站前两天IP日一万左右。这两天流量特别大。但是自从卡了之后流量不大的时候也卡。
我的网站运行一段时间后变卡,前段几个月时间还好好的,就这两天运行一段时间大概十多二十分钟后卡了,去服务器看数据库很卡,甚至从界面上无法登录数据库,还必须以dos命令 net stop mssqlserver, 然后net start mssqlserver来重启数据库,我用的是2005, 很多个数据库,最大的数据库主要数据文件达到1.39G, 服务器2003。
当卡的时候,我用 exec sp_who_lock 命令无查看死锁和堵塞,一运行一大堆的死锁和堵塞,难道真是那些语句或者存储过程的原因吗?那么多,我怎么改啊,我觉得我的sql还算是比较优化的啊。而且为什么前两天还好好的,突然这样子呢?
请问这是什么原因啊,我程序里用到了数据缓存,这应该是减轻数据库压力的啊。 我真的很郁闷,请高手帮帮我,欲哭无泪。
我的qq454881823

解决方案 »

  1.   

    可能最近几天数据库的数据量增加了很多吧。先看看服务器的cpu和内存以及服务器的带宽情况。然后看死锁,看看是哪个sql语句造成的,看看是本身语句有问题还是数据库问题,比如,字段没有加索引,逐一检查造成死锁的语句。数据库这么大了,看看能不能拆分数据库,比如把今年之前的数据拆到另外一个数据。
      

  2.   

    难道真的是流量增多原因吗?
    经常查询的表,都根据排序字段做好了索引的。
    cup内存的情况 还可以。
    用 exec sp_who_lock 命令查看死锁和堵塞 总是一大片的,为什么前两天速度还那么好呢。
    我们网站操作行比较强,是不是用户平凡操作数据库,产生了什么的原因?
      

  3.   

    你看服务器进程里面,哪个进程CPU点多大,内存是否够用,什么进程占内存大
      

  4.   

    极有可能是表的索引问题。
    由于部分查询涉及到的表的索引未建立或存在大量碎片(需要重建索引),导致在查询此表时出现较长的执行周期,从而引起其他SQL执行的排除现象。
    看到的死锁的SQL,事实上并不一定是其引起的,很可能是其他SQL造成等待,导致后续一大堆的排队现象。
    此外,也有可能是由于部分查询语句,在数据量少的时候不影响,但数量量大了以后,执行周期过长从而造成排队现象。
    解决办法:
    1.把某时刻的锁对应的SQL取出来。
    2.数据库在本地重新建立一个,并且重现正在使用数据库的全部数据。
    3.运行上述SQL,争取有重点的查找出耗时最长的SQL并加以改造。