MySQL刪除和插入數(shù)據(jù)很慢的問題解決
公司開發(fā)人員在測試環(huán)境中執(zhí)行一條 insert 語句時,需要花費 10 幾秒才可以執(zhí)行成功。查看測試環(huán)境數(shù)據(jù)庫性能、數(shù)據(jù)量、死鎖等信息,均為發(fā)現(xiàn)異常。最后通過修改日志寫入方式解決此問題。
1. 修改辦法修改/etc/my.cnf文件,將 innodb_flush_log_at_trx_commit = 1改為0, 但這樣就要承擔(dān)數(shù)據(jù)庫Crash后,1秒內(nèi)未存儲到數(shù)據(jù)庫數(shù)據(jù)丟失可能的風(fēng)險。MySQL文檔中對該參數(shù)的描述如下:
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 is 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. 參數(shù)說明 0:log buffer將每秒一次地寫入log file中,并且log file的flush(刷到磁盤)操作同時進行。該模式下在事務(wù)提交的時候,不會主動觸發(fā)寫入磁盤的操作 1:每次事務(wù)提交時MySQL都會把log buffer的數(shù)據(jù)寫入log file,并且flush(刷到磁盤)中去,該模式為系統(tǒng)默認 2:每次事務(wù)提交時MySQL都會把log buffer的數(shù)據(jù)寫入log file,但是flush(刷到磁盤)操作并不會同時進行。該模式下,MySQL會每秒執(zhí)行一次 flush(刷到磁盤)操作 3. 注意事項當(dāng)設(shè)置為0時,該模式速度最快,但不太安全,mysqld進程的崩潰會導(dǎo)致上一秒鐘所有事務(wù)數(shù)據(jù)的丟失。
當(dāng)設(shè)置為1時,該模式是最安全的,但也是最慢的一種方式。在mysqld 服務(wù)崩潰或者服務(wù)器主機crash的情況下,binary log 只有可能丟失最多一個語句或者一個事務(wù)。
當(dāng)設(shè)置為2時,該模式速度較快,也比0安全,只有在操作系統(tǒng)崩潰或者系統(tǒng)斷電的情況下,上一秒鐘所有事務(wù)數(shù)據(jù)才可能丟失。
innodb_flush_log_at_trx_commit和sync_binlog 兩個參數(shù)是控制MySQL 磁盤寫入策略以及數(shù)據(jù)安全性的關(guān)鍵參數(shù),當(dāng)兩個參數(shù)都設(shè)置為1的時候?qū)懭胄阅茏畈睿扑]做法是innodb_flush_log_at_trx_commit=2,sync_binlog=500 或1000。
到此這篇關(guān)于MySQL刪除和插入數(shù)據(jù)很慢的問題解決的文章就介紹到這了,更多相關(guān)MySQL刪除和插入數(shù)據(jù)很慢內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. Mysql入門系列:在MYSQL結(jié)果集上執(zhí)行計算2. Microsoft Office Access創(chuàng)建一個表的子表的方法3. 巧用SQL語言在ACCESS數(shù)據(jù)庫中批量替換內(nèi)容4. SQLite3 API 編程手冊5. CentOS安裝和設(shè)置MariaDB的教程6. MySql分組后隨機獲取每組一條數(shù)據(jù)的操作7. Oracle災(zāi)難防護的關(guān)鍵技術(shù)8. Oracle Optimizer:遷移到使用基于成本的優(yōu)化器-----系列1.29. SQLServer查找字符串在另一字符串的索引位置10. Microsoft Office Access重新編號的方法
