クエリが帰って来ないなーという時は、今何やってるのか見てみる。
mysql -u **** -p
Enter password:
でログインして
show processlist;
すると今現在稼働しているプロセスリストを表示してくれる。
+----------+------+-------------------+------+-------------+-------+----------------------------------------------------------------+------------------+ | Id | User | Host | db | Command | Time | State | Info | +----------+------+-------------------+------+-------------+-------+----------------------------------------------------------------+------------------+ | 37853901 | repl | 10.10.10.10:56317 | NULL | Binlog Dump | 23241 | Has sent all binlog to slave; waiting for binlog to be updated | NULL | | 37853903 | repl | 10.10.10.11:44864 | NULL | Binlog Dump | 23238 | Has sent all binlog to slave; waiting for binlog to be updated | NULL | | 38092482 | root | localhost | NULL | Query | 0 | NULL | show processlist | +----------+------+-------------------+------+-------------+-------+----------------------------------------------------------------+------------------+
こんななら問題なし?
ココに
+----------+------+-------------------+----------+---------+-------+----------------------+-----------------------------------------------+ | Id | User | Host | db | Command | Time | State | Info | +----------+------+-------------------+----------+---------+-------+----------------------+-----------------------------------------------+ | 38081655 | root | 10.10.10.12:34775 | hogehoge | Query | 728 | Copying to tmp table | SELECT `hoge` FROM table WHERE `hoge` = null | | 38081656 | root | 10.10.10.12:34776 | hogehoge | Sleep | 728 | | NULL | +----------+------+-------------------+----------+---------+-------+----------------------+-----------------------------------------------+
って「Copying to tmp table」があったら、そりゃ遅い。メモリ上で処理できなくてディスクに書き出してるってことなので。
ちなみにTimeに728って書いてあるってことは既に12分08秒経過してる。
どうしようもないのでこのプロセスにはいなくなってもらうことにする。
kill 38081655
でいなくなってもらう。