MySQLを使用している特定のデータベースのすべてのテーブルで、挿入、更新、削除が遅いようです。これらのテーブルのデータは大量ではありません(2kから20kまで)。少数の列(5〜10)、索引(2つ)、重複索引の問題なし。私はMyISAMでMySQL 5.0.45を実行しています。遅いMySQLアップデート/挿入/削除
私は、次のクエリを実行し、それを約5~7秒かかります:
UPDATE accounts SET updated_at = '2010-10-09 11:22:53' WHERE id = 8;
選択はすぐに戻ってくるように見えます。
は私に次のようになります説明:
+----+-------------+----------+-------+---------------+---------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+----------+-------+---------------+---------+---------+------+------+-------------+
| 1 | SIMPLE | accounts | index | NULL | PRIMARY | 4 | NULL | 1841 | Using index |
+----+-------------+----------+-------+---------------+---------+---------+------+------+-------------+
プロファイラは、コンテキストの一見高い番号以外の何のためのすべての重要なデータを示していないスイッチ:
+----------------------+----------+-------------------+---------------------+
| Status | Duration | Context_voluntary | Context_involuntary |
+----------------------+----------+-------------------+---------------------+
| (initialization) | 0.000057 | 0 | 0 |
| checking permissions | 0.000008 | 0 | 0 |
| Opening tables | 0.000013 | 0 | 0 |
| System lock | 0.000005 | 0 | 0 |
| Table lock | 0.000005 | 0 | 0 |
| init | 0.000061 | 0 | 0 |
| Updating | 0.000101 | 0 | 0 |
| end | 7.957233 | 7951 | 2 |
| query end | 0.000008 | 0 | 0 |
| freeing items | 0.000011 | 0 | 0 |
| closing tables | 0.000007 | 1 | 0 |
| logging slow query | 0.000002 | 0 | 0 |
+----------------------+----------+-------------------+---------------------+
これも役立つかもしれません。
+----------------------+----------+-----------------------+---------------+-------------+
| Status | Duration | Source_function | Source_file | Source_line |
+----------------------+----------+-----------------------+---------------+-------------+
| (initialization) | 0.000057 | check_access | sql_parse.cc | 5306 |
| checking permissions | 0.000008 | open_tables | sql_base.cc | 2629 |
| Opening tables | 0.000013 | mysql_lock_tables | lock.cc | 153 |
| System lock | 0.000005 | mysql_lock_tables | lock.cc | 162 |
| Table lock | 0.000005 | mysql_update | sql_update.cc | 167 |
| init | 0.000061 | mysql_update | sql_update.cc | 429 |
| Updating | 0.000101 | mysql_update | sql_update.cc | 560 |
| end | 7.957233 | mysql_execute_command | sql_parse.cc | 5122 |
| query end | 0.000008 | mysql_parse | sql_parse.cc | 6116 |
| freeing items | 0.000011 | dispatch_command | sql_parse.cc | 2146 |
| closing tables | 0.000007 | log_slow_statement | sql_parse.cc | 2204 |
| logging slow query | 0.000002 | dispatch_command | sql_parse.cc | 2169 |
+----------------------+----------+-----------------------+---------------+-------------+
追加情報: それは、Oを実行していますn CentOS-5 VPSと4ギガのラムが保証されています。 updated_at列にインデックスがなく、どこでもトリガされません。
(のように使用して)新しいテーブルを作成し、[私が試した新しい物事]
- はInnoDBテーブルを実行し、影響を受けた テーブルのいずれかからすべての レコードを挿入します。 (同じ問題)
- データベースをバックアップし、同じ サーバーインスタンス内の異なるデータベース に復元しました。 (同じ問題)
- 同じバックアップを私の ローカルマシンに復元しましたが、私には の問題がありませんでした。
- 問題データベースと他のデータベース( ワードプレスDB)を有し、同一のMySQLサーバ インスタンス内の別のデータベース を試みたが 更新/挿入を実行/うまく削除します。
- 再起動のmysqldとバージョン5.0.77(同じ問題)
- にMySQLを更新しました昨夜(同じ問題)
- サーバ全体を再起動するには、影響を受ける表の1から
次に見たいものや何が問題なのでしょうか?私はそれが正確に表示され始めたときに私は言うことはできませんが、最近の問題の詳細になるようです。
updated_at列にインデックスがありますか? –
これはどのマシンで実行されていますか?リソースが限られているマシン(つまり、あまりRAMはない)では、MySQLはメインインデックスをメモリに保持して毎回ディスクから強制的に読み込むことができません。 –
updated_at列にインデックスがありません。また、2ギガが保証されているVPSにあります。同じmysqlサーバインスタンス上の別のデータベース(WordPress)は、更新/挿入/削除をうまく処理しているようです。 – Ruben