刷新處於鎖定狀態的表

刷新處於鎖定狀態的表

我有很多表始終處於鎖定狀態。一個例子:

| 14442 | dbtable1 | localhost | dbname | Query   | 1291 | Locked       | SELECT  * FROM table1 WHERE topic_s='hooks-and-variables'                                   |
| 14443 | dbtable1  | localhost |           | Sleep   | 1291 |              |                                                                                                      |
| 14461 | dbtable1 | localhost | dbname | Query   | 1283 | Locked       | SELECT  table3.forum_id, forum_name, forum_slug, table4.topic_id, topic_name, topic_slug |

當我有太多這樣的進程時,所有網站都開始拋出資料庫連線錯誤,我必須重新啟動 MySQL 伺服器才能讓它們再次運作。

如果需要的話,我的資料庫使用 MyISAM 引擎、CentOS 5.7、WordPress 和 MySQL 5.1。

我知道你可能會建議什麼:切換到 InnoDB 或優化程式碼。不幸的是,這超出了我的範圍。我必須使用我擁有的配置。

所以,這個問題給你。如何定期刷新此類查詢?我確信這至少有助於防止伺服器過載。

我嘗試過flush_time=300但沒有運氣。您需要這裡的 my.cnf 還是其他配置?

謝謝大家。

更新1.my.cnf

[mysqld]
default-character-set=utf8
max_connections=100
set-variable        = long_query_time=10
query_cache_limit   = 32M
query_cache_size    = 128M
query_cache_type    = 1
table_cache=8K
key_buffer_size=100M
thread_cache_size=128
join_buffer_size = 1M
innodb_buffer_pool_size = 100M
join_buffer_size=4M
tmp_table_size=32M
max_heap_table_size=32M
flush_time=200

更新2.在鎖定之前先在進程清單中查詢

 | Id  | User | Host | db | Command | Time | State  | Info                                                                            
 | 1515 | dbtable1 | localhost | dbname | Query  | 2511 | Sending data | SELECT  table1.forum_id, forum_slug, forum_name, forum_status, group_id, topic_count, forum_ic |
 | 1571 | dbtable1 | localhost | dbname | Query  | 2478 | Sending data | SELECT  table1.forum_id, forum_slug, forum_name, forum_status, group_id, topic_count, forum_ic |

答案1

您可以使用pt-killPercona 工具包(http://www.percona.com/software/percona-toolkit/) 終止符合指定條件的查詢。您可以設定一個 cron 作業每 300 秒執行一次,以pt-kill --busy-time 300終止執行超過 300 秒的查詢。

相關內容