解决MySQL删除和插⼊数据很慢的问题
推荐阅读
Helm3(K8S 资源对象管理⼯具)视频教程:
Helm3(K8S 资源对象管理⼯具)博客专栏:
公司开发⼈员在测试环境中执⾏⼀条 insert 语句时,需要花费 10 ⼏秒才可以执⾏成功。查看测试环境数据库性能、数据量、死锁等信息,均为发现异常。最后通过修改⽇志写⼊⽅式解决此问题。
1. 修改办法
修改/etc/myf⽂件,将 innodb_flush_log_at_trx_commit = 1改为0, 但这样就要承担数据库Crash后,1秒内未存储到数据库数据丢失可能的风险。MySQL⽂档中对该参数的描述如下:
免费mysql视频教程If the value of innodb_flush_log_at_trx_commit is 0, the log buffer is written out to the log file once per second and the flush to disk operation is performed on the log file, but nothing is done at a transaction commit. When the value is 1 (the default), the log buffer is written out to the log file at each transaction commit and the flush to disk operation is performed on the log file. When the value is 2, the log buffer i
s written out to the file at each commit, but the flush to disk operation is not performed on it. However, the flushing on the log file takes place once per second also when the value is 2. Note that the once-per-second flushing is not 100% guaranteed to happen every second, due to process scheduling issues.
2. 参数说明
0:log buffer将每秒⼀次地写⼊log file中,并且log file的flush(刷到磁盘)操作同时进⾏。该模式下在事务提交的时候,不会主动触发写⼊磁盘的操作
1:每次事务提交时MySQL都会把log buffer的数据写⼊log file,并且flush(刷到磁盘)中去,该模式为系统默认
2:每次事务提交时MySQL都会把log buffer的数据写⼊log file,但是flush(刷到磁盘)操作并不会同时进⾏。该模式下,MySQL会每秒执⾏⼀次 flush(刷到磁盘)操作
3. 注意事项
当设置为0时,该模式速度最快,但不太安全,mysqld进程的崩溃会导致上⼀秒钟所有事务数据的丢失。
当设置为1时,该模式是最安全的,但也是最慢的⼀种⽅式。在mysqld 服务崩溃或者服务器主机crash的情况下,binary log 只有可能丢失最多⼀个语句或者⼀个事务。
当设置为2时,该模式速度较快,也⽐0安全,只有在操作系统崩溃或者系统断电的情况下,上⼀秒钟所有事务数据才可能丢失。
innodb_flush_log_at_trx_commit和sync_binlog 两个参数是控制MySQL 磁盘写⼊策略以及数据安全性的关键参数,当两个参数都设置为1的时候写⼊性能最差,推荐做法是innodb_flush_log_at_trx_commit=2,sync_binlog=500 或1000。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论