一般使用innodb引擎做事务管理,死锁也是经常见到的,比如秒杀场景,对一个共同的物品进行减库存,此时我们可以关闭mysql的死锁检测机制,减少单行整体服务的时间。既然关闭了死锁检测机制,我们需要减少锁的等待时间。
不过不适合死锁过多的情景,我们可以通过程序来减少死锁的存在。其次还有mysql为了事务的安全,会将提交的事务刷新到磁盘,如果改变刷盘的策略,也可以提高mysql应对高并发的情况,但是会有丢失数据和事务的情况,在系统崩溃或者断电的时候。
sync_binlog=0,当事务提交之后,MySQL不做fsync之类的磁盘同步指令刷新binlog_cache中的信息到磁盘,而让Filesystem自行决定什么时候来做同步,或者cache满了之后才同步到磁盘。这个是性能最好的。
sync_binlog=1,当每进行1次事务提交之后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘。
sync_binlog=n,当每进行n次事务提交之后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘。
注:
大多数情况下,对数据的一致性并没有很严格的要求,所以并不会把 sync_binlog 配置成 1. 为了追求高并发,提升性能,可以设置为 100 或直接用 0.
而和 innodb_flush_log_at_trx_commit 一样,对于支付服务这样的应用,还是比较推荐 sync_binlog = 1.
上面文字来自:https://www.linuxidc.com/Linux/2017-09/146671.htm
总结上面的方法是关闭死锁检测,改变刷盘策略,但是这是在特殊的情况使用,过了这个时间段要恢复安全的策略。相关参数:
sync_binlog=0
innodb_flush_log_at_trx_commit=0
innodb_deadlock_detect=OFF
这篇文章作为自己知识总结,参考https://mp.weixin.qq.com/s/U7_3yhdmZm0iYztl9LVkzw