在Windows下安裝MySQL ,用了官方的配置向導生成了my.ini,本以為很安穩了,誰知十多個小時過去之後,系統響應非常慢,看資源管理器的性能卡,發現句柄數竟然達到了10萬!怪不得無論使用什麼程序都卡得很。
網上搜索一下,大概是說 innodb_buffer_pool_size 這個默認的8M太大,但我已經skip-innodb了啊。
後來又看到一個設置innodb_flush_log_at_trx_commit
innodb_flush_log_at_trx_commit (這個很管用)
抱怨Innodb比MyISAM慢 100倍?那麼你大概是忘了調整這個值。默認值1的意思是每一次事務提交或事務外的指令都需要把日志寫入(flush)硬盤,這是很費時的。特別是使用電池供電緩存(Battery backed up cache)時。設成2對於很多運用,特別是從MyISAM表轉過來的是可以的,它的意思是不寫入硬盤而是寫入系統緩存。日志仍然會每秒flush到硬盤,所以你一般不會丟失超過1-2秒的更新。設成0會更快一點,但安全方面比較差,即使MySQL掛了也可能會丟失事務的數據。而值2只會在整個操作系統掛了時才可能丟數據。
後來設置成了innodb_flush_log_at_trx_commit = 2。
重啟MYSQL服務,的確好了許多,句柄數最終保持在2萬左右,處於穩定狀態,其它程序快了許多。
看來在配置文件中innodb即使skip掉了,也仍然在使用系統中的內存、磁盤IO,看來對於MYSQL的配置還是要手工研究,不能完全依賴於自帶的配置工具。
總結下來,對於innodb類型的庫,將innodb_flush_log_at_trx_commit設置成2,能夠提高MySQL的性能,解決句柄占用過多的問題。
以上就是解決MySQL句柄占用過多的方法,希望能給大家一個參考,了解更多MySQL語法,大家可以關注《MySQL 5.1參考手冊》,也希望大家多多支持。