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

数据库从SQL SERVER 2000升级到2008后插入速度变慢
因为要用到数据库镜像,所以把2000升级到了2008,
还有感觉2008 可能优化了某些查询以为速度回快点


但是升级好后,在业务繁忙的时候,经常死锁,我已经把表的数据移除很多,现在在插入的时候总死锁,或者卡主
延迟严重,
1.后来想想是不是索性建的不对,就把索引全删了再加了一遍
2.利用数据库2008自带的工具“重新生成索引任务”和“更新统计信息任务”,查询我感觉是比以前快了
但是在高峰期的时候还是会卡主,死锁。假如是我程序写的事务不对,那2000也应该会卡主,但是在2000的时候很正常
求大师救命啊!!!
------解决方案--------------------
直接附加上去的话可能存在很多隐患,我个人觉得问题主要有两个:
1、配置问题,毕竟跨越了2代产品,很多配置,特别是对操作系统的利用都不尽相同。建议去找一下2008的配置。重新配置一下。
2、2000使用了大量只有2000才有,但是2008仅仅是兼容而已的语法或功能。使得虽然不报错,但是没发挥出来。如果时间允许,建议全面检查并改进。毕竟这是一次性的动作而已,所以还是建议仔细、并多话点时间。
------解决方案--------------------
昨天忘了说其中一个问题,就是tempdb,新版本对tempdb的使用远远超过过往的版本,所以tempdb如果太小,或频繁增长,将严重影响性能。配置方面我说几个吧,其实这方面太多了,一下子我也记不得那么多,并且要根据业务需要来调试的。下面是我目前想到的:
1、cpu个数,最好保留1个cpu给操作系统,然后其他分给SQLServer;
2、tempdb根据cpu的个数,配置同等数量的tempdb【数据文件】,tempdb的日志文件最好扩大一点,像我现在的生产环境,大概初始化tempdb日志文件是40G。数据文件是10个,初始化2G,限制增长到4G每个。
3、配置SQLServer的最大、最小内存,建议留2G给操作系统。
4、数据库的日志文件和数据文件分开存放到不同的【物理】磁盘。而不是逻辑盘符。
5、如果你的索引重建会短时有效的话,研究一下索引建的是否合理?比如会不会因为一天的数据量而导致索引碎片太多?如果是,那要考虑把索引的填充因子改大(看联机丛书)。
还有一些就是磁盘配置、语法调优了。这些实在太多了
------解决方案--------------------
这个主要是升级数据引擎后统计数据没有更新,所以性能开始会变慢.一段时间后就会好了.
也可以有针对性的对瓶颈或常用查询从SSMS多跑几遍,然后 update statistics来提升性能.
------解决方案--------------------
说一句哦,如果用镜像的话,那么有两种模式,一种会使性能降低点;所以感觉是镜像把事务的时间拉长了,然后再高峰的时候会有很多死锁,镜像有两种方式,同步应用日志和异步应用方式,如果要性能,就用异步应用日志的吧,另外查一查具体死锁的原因,有助于更好的出解决方案,毕竟你现在做的只是小修小改而已。