先描述下現象,我的程式是不停把終端發來的資料,insert到mysql的表中。
用的程序中發現,總是一段時間之后(幾小時),就會出現insert操作掛起的情況,時長5-20秒不等,但之后又恢復正常。
經過不斷的摸索,發現mysqld.exe的占用記憶體會不斷上升,而上升到一定程度,就不再增加了。這個上升量大約就是innodb_buffer_pool_size的大小。而Innodb_buffer_pool_pages_free這個值被耗盡的時候,就是mysql陳述句掛起的時候,掛起占用的時間不定,一般都要好幾秒。
我嘗試過修改innodb_buffer_pool_size這個值,但是由于Innodb_buffer_pool_pages_data會不停增加,再大的innodb_buffer_pool_size也無濟于事。
請教如何才能避免這種Innodb_buffer_pool_pages_free耗盡帶來的mysql掛起呢?這到底是是什么原理,我大概猜測應該是mysql在記憶體和磁盤之間切換,但這個掛起時間真的無法接收,雖然是一次性的。
uj5u.com熱心網友回復:
mysql資料會定期從記憶體flush到磁盤檔案,這個需要時間。除非足夠大記憶體uj5u.com熱心網友回復:
感謝版主大大,想了解一下這個記憶體flush到磁盤檔案的規則是怎樣的,周期是多久,每次需要的時間又和什么相關。
是不是innodb_buffer_pool_size被用完之后就會flush一次。
再次感謝。
我已經大概知道該怎么做了,我準備定期清除資料,把資料量控制在innodb_buffer_pool_size范圍內。
uj5u.com熱心網友回復:
你的內在有多大,我估計是innodb_buffer_pool_size配置得太大uj5u.com熱心網友回復:
是不是當時有什么備份作業在鎖表?轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/90972.html
標籤:MySQL
