http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

一次惨痛的数据库锁死经历(都是加锁的祸根,索引的祸根)

查看数: 8745 | 评论数: 4 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2016-4-27 15:16

正文摘要:

一次惨痛的数据库锁死经历(都是加锁的祸根,索引的祸根) 数据库锁我就不多说了,相信大家都知道,先说说我的经历吧 上午10左右,突然平台用户登录缓慢,甚至无法登录,但登录成功之后网站速度很快,没有任何异 ...

回复

wtf3505 发表于 2018-2-7 22:45:16
强烈支持楼主ing……
mingsn 发表于 2016-9-22 09:50:05
强烈支持楼主ing……
钢板-王玉松 发表于 2016-4-28 11:24:05
吸取教训
站长苏飞 发表于 2016-4-27 15:39:13
解决死锁

这里有几个方法可以帮助我们解决死锁问题。

      优化查询



      我们在写查询语句时,要考虑一下查询是否Join了没有必要的表?是否返回数据太多(太多的列或行)?查询是否执行表扫描?是否能通过调整查询次序来避免死锁?是否应该使用Join的地方使用了Left Join?Not In语句是否考虑周到?



      我们在写查询语句可以根据以上准则来考虑查询是否应该做出优化。



      慎用With(NoLock)



      默认情况下SELECT语句会对查询到的资源加S锁(共享锁),由于S锁与X锁(排他锁)不兼容,在加上With(NoLock)后,SELECT不对查询到的资源加锁(或者加Sch-S锁,Sch-S锁可以与任何锁兼容);从而使得查询语句可以更好和其他语句并发执行,适用于表数据更新不频繁的情况。



     也许有些人会提出质疑With(NoLock),可能会导致脏读,首先我们要考虑查询的表是否频繁进行更新操作,而且是否要读回来的数据会被修改,所以衡量是否使用With(NoLock)还是要根据具体实际出发。



     优化索引



     是否有任何缺失或多余的索引?是否有任何重复的索引?



     处理死锁



     我们不能时刻都观察死锁的发生,但我们可以通过日志来记录系统发生的死锁,我们可以把系统的死锁错误写入到表中,从而方便分析死锁原因。



     缓存



     也许我们正在执行许多相同的查询非常频繁,如果我们把这些频繁的操作都放到Cache中,执行查询的次数将减少发生死锁的机会。我们可以在数据库的临时表或表,或内存,或磁盘上应用Cache,或是磁盘文件。

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-11-18 06:32

© 2014-2021

快速回复 返回顶部 返回列表