亲,你遇到过数据库里的表访问全部在Client Java层里看到是慢日志过吗?
亲,你遇到某个Client突然宕机,正在事务操作中的SQL,最后会回滚,但是会不会对别的Client有影响呢?
例如这样:
X锁的事务突然中止 ,其它会话进行for update就会报错, 这种情况实际工作中,遇到一次酸爽一次。
可能发生的情况:
假如client突然发生了宕机
• 假如⽹络断开⼏秒后,client断开连接
• 假如是单网卡,发⽣了故障,client断开连接
• …
老司机开车怎么防止这个事呢?上图
如果事务发生了网络抖动,事务会什么时间结束呢?
1. wait_timeout超时,如果空闲等待超时wait_timeout, 则会关闭会话。 所以建议wait_timeout可以设置的短点,例如90。
2. 等待tcp超时
● tcp_keepalive_time、tcp_keepalive_intvl、tcp_keepalive_probes● 闲置idle(双方没有任何数据流发送往来)了 tcp_keepalive_time后,服务器内核就会尝试向客户端发送侦测包,来判断TCP连接状况(有可能客户端崩溃、强制关闭了应⽤、主机不可达等等)。如果没有收到对方的回答(ack包),则会在tcp_keepalive_intvl后再次尝试发送侦测包,直到收到对方的ack,如果⼀直没有收到对⽅的ack,⼀共会尝试tcp_keepalive_probes次,每次的间隔时间在这⾥分别是15s, 30s, 45s, 60s, 75s。如果尝试tcp_keepalive_probes,依然没有收到对方的ack包,则会丢弃该TCP连接。
3. 主动kill掉这个SQL。
● 关注sqlkiller● pt-kill
● 设置max_execution_time对SQL中SELECT语句引入执行timeout超时。
你有没有遇到这样的坑呢? 你还想不想学习一下其它的坑呢?
• 如果事务中发生了网络抖动
• 当大事务遇上备份
• ⼀个不起眼的SQL导致的性能问题
• 主从默认字符集不一致导致的从库异常
• 大量删除导致的SQL查询缓慢
• TCP重传导致的慢查
• 利用strace利器甩掉这个不该背的锅
上面这些姿势,看着是不是有一种熟悉的酸爽
原文发布时间为:2018-09-26 本文作者:王航威 本文来自云栖社区合作伙伴“老叶茶馆”,了解相关信息可以关注“ 老叶茶馆 ”。