刚到公司,死锁每天300~500!太恐怖了,优化一遍后,近期很少管了,现在每天还有将近10个。 1. 首先跟踪死锁,找出死锁语句,优化。(语句问题:索引问题、类型转换、join 问题,连接条件……) 2. 后台先跟踪一天的大于三五秒的语句,隔天再分析耗时或者耗IO较大的语句,优化。 3. 用系统dmv查看缓存中的计划,看看哪些执行计划、语句耗IO、CPU、时间较多的,优化。 4. 高峰时期执行dmv查看当前的语句,哪些语句出现什么问题最多,优化。 要想查询快,就必须走索引。但不一定都加索引,有些操作不频繁的,增加反而影响更新,也同样导致死锁。若语句出现有多线程执行,尽量优化成单线程(大部分是语句没走索引导致扫描并发线程),同样也就减少cpu了。死锁直接体系的结果,主要是sql语句问题,影响着影响着 memory、IO、cpu等
deadlock 只能从索引和程序上面入手,可以在数据库上面dbcc traceon(1222,-1),这样所有的死锁信息就会写入日志,从日志里面拿到deadlock 的具体信息,创建应该有的索引基本就可以解决了
死锁很难控制不发生。 一般解决死锁都是从代码着手,尽量让代码获取锁的顺序一致。 你可以先用sql profile监控死锁,知道到底是在哪些表上有死锁,涉及到哪些代码,然后再想办法,是该代码,还是说参数修改。 有些死锁,特别是修改数据时发生的死锁,通过参数设置是解决不了的。必须要针对不同的情况,分别处理
27,579
社区成员
68,558
社区内容
加载中
试试用AI创作助手写篇文章吧