如果发生了网络抖动,事务会什么时间结束?

 导 读

作者:王航威,有赞DBA

先来个开胃菜,重头戏9月27日本周四晚20:30见~

周四见|公开课:有赞MySQL运维经典案例分析

640?wx_fmt=jpeg


亲,你遇到过数据库里的表访问全部在Client Java层里看到是慢日志过吗?

亲,你遇到某个Client突然宕机,正在事务操作中的SQL,最后会回滚,但是会不会对别的Client有影响呢?

例如这样:

640

X锁的事务突然中止 ,其它会话进行for update就会报错, 这种情况实际工作中,遇到一次酸爽一次。 

640

可能发生的情况:

假如client突然发生了宕机

假如⽹络断开⼏秒后,client断开连接

假如是单网卡,发⽣了故障,client断开连接


老司机开车怎么防止这个事呢?上图

640


如果事务发生了网络抖动,事务会什么时间结束呢?

1. wait_timeout超时,如果空闲等待超时wait_timeout, 则会关闭会话。 所以建议wait_timeout可以设置的短点,例如90。

2. 等待tcp超时

  1. tcp_keepalive_time、tcp_keepalive_intvl、tcp_keepalive_probes

  2. 闲置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。

  1. 关注sqlkiller

  2. pt-kill

  3. 设置max_execution_time对SQL中SELECT语句引入执行timeout超时。

640


你有没有遇到这样的坑呢? 你还想不想学习一下其它的坑呢?

• 如果事务中发生了网络抖动

• 当大事务遇上备份

• ⼀个不起眼的SQL导致的性能问题

• 主从默认字符集不一致导致的从库异常

• 大量删除导致的SQL查询缓慢

• TCP重传导致的慢查

• 利用strace利器甩掉这个不该背的锅


上面这些姿势,看着是不是有一种熟悉的酸爽2_05.png

知数堂周四见公开课《有赞MySQL运维经典案例分析》 带你从高并发中的坑里跳出来。

报名预约吧

https://ke.qq.com/course/331538

640?wx_fmt=png

温馨提示:如错过直播,报名后也可以看录播和讲义哦~


640?wx_fmt=gif


640?wx_fmt=gif

加入QQ技术交流群

扫码加入知数堂4群-王者峡谷

(QQ群号:650149401)

      

640?wx_fmt=png

### 抖动的定义 抖动(Jitter)是指数字信号在传输过程中,其有效时刻相对于理想位置发生的短期偏离。这种偏离通常表现为相位上的变化,并且是不希望出现的现象[^3]。在数据网络中,抖动也可以被理解为通过一个网络的反应时间的可变性测量标准。 从另一个角度来看,抖动还可以指模拟传输线路中的失真,由信号在其原始时间选择位置的变化引起。与抖动相关的还有一个术语叫做“漂移”,它描述的是信号的有效瞬间相对于理想位置的长期偏离。尽管两者之间并没有明确的界限,但一般认为频率低于1Hz至10Hz的相位变化属于漂移范畴。 ### 抖动的产生原因 抖动可以分为系统性抖动和随机性抖动两种类型: - **系统性抖动**:这类抖动通常是由于信号再生装置中的定时恢复电路调整不当造成的。此外,码间干扰以及电缆均衡缺陷所导致的幅度到相位转换也是系统性抖动的一个来源。值得注意的是,系统性抖动往往与特定的数据模式有关[^3]。 - **随机性抖动**:而随机性抖动则来源于内部干扰信号,比如中继器产生的噪声、串话或反射等。这类抖动不受传输数据模式的影响,在大多数现有的低速数字系统中,系统性抖动占主导地位;但在一个多接力段系统中,则需要考虑所有数字波道无输入抖动时输出抖动的累计平方根值及总的抖动转移函数。 在网络环境中,抖动可能还会因为网络拥塞、路由选择不当、设备处理能力不足等因素而加剧。例如,在实时通信应用如语音和视频通话中,即使是微小量级的抖动也可能显著影响用户体验质量[^2]。 为了减少这些不利因素的影响,通常会采用一些技术手段来缓解问题,其中包括使用抖动缓冲区(Jitter Buffer),它可以有效地吸收一定程度内的延迟波动,从而保证接收端能够更加平滑地播放媒体流。 ```python # 示例代码 - 计算平均抖动 def calculate_average_jitter(packet_arrival_times): if len(packet_arrival_times) < 2: return 0 # 至少需要两个数据包才能计算抖动 jitter = 0 for i in range(1, len(packet_arrival_times)): difference = abs(packet_arrival_times[i] - packet_arrival_times[i-1]) jitter += difference average_jitter = jitter / (len(packet_arrival_times) - 1) return average_jitter # 假设这是接收到的一系列数据包到达时间(单位:毫秒) packet_times = [100, 150, 200, 250, 300, 360] avg_jitter = calculate_average_jitter(packet_times) print(f"Average Jitter: {avg_jitter} ms") ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值