Bei mir sind mehrere Tabellen ständig im gesperrten Zustand. Ein Beispiel:
| 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 |
Wenn ich zu viele solcher Prozesse habe, beginnen alle Sites, Datenbankverbindungsfehler zu melden, und ich muss den MySQL-Server neu starten, damit sie wieder funktionieren.
Ich verwende die MyISAM-Engine für meine Datenbanken, CentOS 5.7, WordPress und MySQL 5.1, falls das wichtig ist.
Ich weiß, was Sie wahrscheinlich vorschlagen: Wechseln Sie zu InnoDB oder optimieren Sie den Code. Leider liegt das außerhalb meiner Möglichkeiten. Ich muss mit der Konfiguration arbeiten, die ich habe.
Also, meine Frage an Sie: Wie kann ich solche Abfragen regelmäßig löschen? Ich bin sicher, dass dies zumindest dazu beitragen wird, eine Überlastung des Servers zu verhindern.
Ich habe es flush_time=300
ohne Erfolg versucht. Benötigen Sie hier my.cnf oder andere Konfigurationen?
Danke an alle.
UPDATE 1. meine.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
UPDATE 2. Erste Abfragen in der Prozessliste vor Sperren
| 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 |
Antwort1
Sie können pt-kill
das Percona Toolkit verwenden (http://www.percona.com/software/percona-toolkit/), um Abfragen zu beenden, die einem bestimmten Kriterium entsprechen. Sie können einen Cron-Job einrichten, der alle 300 Sekunden ausgeführt wird, um pt-kill --busy-time 300
Abfragen zu beenden, die länger als 300 Sekunden laufen.