先描述下现象,我的程序是不停把终端发来的数据,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在内存和磁盘之间切换,但这个挂起时间真的无法接收,虽然是一次性的。

解决方案 »

  1.   

    mysql数据会定期从内存flush到磁盘文件,这个需要时间。除非足够大内存
      

  2.   


    感谢版主大大,想了解一下这个内存flush到磁盘文件的规则是怎样的,周期是多久,每次需要的时间又和什么相关。
    是不是innodb_buffer_pool_size被用完之后就会flush一次。再次感谢。
    我已经大概知道该怎么做了,我准备定期清除数据,把数据量控制在innodb_buffer_pool_size范围内。
      

  3.   

    你的内在有多大,我估计是innodb_buffer_pool_size配置得太大