✅MySQL热点数据更新会带来哪些问题?

典型回答

热点数据更新是指频繁更新某个或某些特定行的数据,比如大促期间,有一个大商家,如小米旗舰店、Apple旗舰店等他们的某个商品,会因为有很多人要买,所以他就是热点商品,而大家在短时间内同时买这个商品的时候,就会热点更新这个商品的库存,这就是所谓的热点数据更新,或者叫做热点行更新,如:

UPDATE products
SET stock_quantity = stock_quantity - 10
WHERE product_id = 10086;

热点数据的更新是我们需要避免的,因为他存在以下问题:

1、锁竞争,热点数据的更新是通过update语句进行的,而update是需要给记录增加排他锁的,这就会导致大量的请求被阻塞。降低整个系统的吞吐量。

2、占用数据库连接,当有大量的update语句,因为要修改同一条记录而被阻塞的时候,他们持有的数据库连接是不会释放的,而数据库连接又是有限的,所以会导致连接数不够,进而影响整个系统的吞吐量及可用性。

3、耗尽数据库CPU,大量锁等待,就会导致大量的自旋,多个线程就会不断的尝试获取锁,CPU就需要不断的执行自旋操作,消耗大量CPU时间。并且在这个过程中,操作系统也需要频繁的进行线程上下文的切换,这个过程会导致CPU时间片的浪费。

✅数据库CPU被打满排查过程

4、死锁风险,在高并发的情况下。由于数据库需要频繁定位和更新这些特定行,可能会增加锁竞争和死锁的风险,影响并发性能。

5、索引维护开销大,频繁的更新热点数据,不仅会导致数据的变化,还可能导致相关索引的频繁维护,这可能会增加数据库的开销,导致性能下降。

6、主从不一致,热点数据的频繁更新,如果在主从复制出现延迟的情况下,就会放大数据不一致的概率。

扩展知识

如何解决和避免

✅MySQL怎么做热点数据高效更新?

✅高并发的积分系统,在数据库增加积分,怎么实现?

原文: https://www.yuque.com/hollis666/xkm7k3/gccycd2mvmpthq1s