在线业务kill SQL一系列想法

简介:

写了一个存储过程为玩家发送奖励,MySQL5.0

    在本地测试语法没有问题,但在线上运行十分缓慢,show processlist ,status显示 sending data;可初步判断语句未使用索引。由于执行太慢,我们选择kill 掉了该语句。

    设计到的语句部分:select ... from p join a ON  p.pid=a.gameid=1428;explain type 显示 all 即全表扫描;(pid和gameid 都是含有索引的);按道理来说不应该是全表扫描,初步怀疑是利用索引的成本(CBO)太大,MySQL才选择了全表扫描;但这一的解释也是不合理的。pid和gameid都是唯一的。及表中索引的基数还是很大的。修改语句为:select ... from p join a ON  p.pid=a.gameid and p.pid=1428; explain type显示为a表为all,p表为const;执行速度提高百倍。

    小结:select查询共有3个过滤器,on、where、having,on是最先执行的过滤过程。应该讲多个条件依次写出,不要写出三个选项作为一个过滤条件,即不要出现:p.pid=a.gameid=1428 应该为p.pid=a.gameid and p.pid=1428(这个算不算MySQL 5.0的bug 呢?)

    由于是多区多服DB批量执行该脚本。再次执行脚本的时候造成部分玩家收到双份奖励,这个可以通过临时表中进行记录,并及时更新到正确状态。关键是如何更好的更好的减少出错:

    小结:对于线上更新语句,线上必须有足够多的数据进行测试;

          批量执行过程遇到截断或停止(人为或突发情况),截断的时候要考虑到DBA是否能承受错误数据的压力;对于突发情况终止,进行操作行为记录,具体行为数据前后变化状态等。






本文转自 位鹏飞 51CTO博客,原文链接:http://blog.51cto.com/weipengfei/1192569,如需转载请自行联系原作者

目录
相关文章
|
SQL 数据库 Windows
SQL Server会话KILL不掉,一直处于KILLED /ROLLBACK状态情形浅析
今天遇到一个很奇怪的情况,发现一个会话异常,这个会话只是在执行一个简单的存储过程,里面使用了链接服务器(Linked Server)查询另外一台服务器数据(存储过程里面没有任何显性事务、UPDATE、DELETE操作,只有几个简单的SELECT查询,其中有两个查询使用了链接服务器Linked Server,由于生产环境,不好贴出SQL语句),在DPA监控工具里面,发现该会话引起了非常长的OLEDB等待时间,手工执行测试,发现并不耗费很长时间,KILL该会话后, 回滚状态已完成一直是0%, 估计剩余时间也一直是0秒。
2476 0
|
SQL 关系型数据库 MySQL
一个SQL无法kill掉的案例
一个SQL无法kill掉的案例 问题描述 因为业务需要,客户有一个ddl需求扩展某一drds单表的列的长度,但是在drds上执行ddl的时候被一个select阻塞mdl(metadata lock)锁,详情见官方文档8.11.4 Metadata Locking。
1412 0
|
SQL 数据库 Windows
SQL Server会话KILL不掉,一直处于KILLED /ROLLBACK状态情形浅析
原文:SQL Server会话KILL不掉,一直处于KILLED /ROLLBACK状态情形浅析 今天遇到一个很奇怪的情况,发现一个会话异常,这个会话只是在执行一个简单的存储过程,里面使用了链接服务器(Linked Server)查询另外一台服务器数据(存储过程里面没有任何显性事务、UPDATE、D...
2048 0
|
SQL 关系型数据库
PLSQL_案例优化系列_感悟SQL等价改写优化思路想法(案例13)
2012-10-13 Created By BaoXinjian 一、摘要 从案例中感悟SQL等价改写优化思路之一 1. 具体SQL调优思路 2. 高级SQL介绍与案例 3. 总结与思考   二、具体SQL调优思路 待续   三、高级SQL介绍与案例 待续 ...
912 0
|
SQL Oracle 关系型数据库
linux中查看oracle进程在做什么,是否sql引起了锁 kill掉进程
ps -l 查看系统进程    PID 每个进程的ID。  PPID 每个进程的父进程ID。  UID 每个进程所有者的UID 。  USER 每个进程所有者的用户名。
1187 0
|
2月前
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
4月前
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
98 13
|
4月前
|
SQL
解锁 SQL Server 2022的时间序列数据功能
【7月更文挑战第14天】要解锁SQL Server 2022的时间序列数据功能,可使用`generate_series`函数生成整数序列,例如:`SELECT value FROM generate_series(1, 10)。此外,`date_bucket`函数能按指定间隔(如周)对日期时间值分组,这些工具结合窗口函数和其他时间日期函数,能高效处理和分析时间序列数据。更多信息请参考官方文档和技术资料。
|
4月前
|
SQL 存储 网络安全
关系数据库SQLserver 安装 SQL Server
【7月更文挑战第26天】
58 6