InnoDBエンジンを備えたMySQL 5.5データベースにデータを保存する仮想マシンで実行されている単純なWebアプリケーションがあります。すべてが約3年間問題なく動作しましたが、突然、非常に遅くなりました。
たとえば、住所を保持する非常に単純なテーブルがあります。
CREATE TABLE `addresses` (
`address_id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(64) CHARACTER SET latin1 NOT NULL,
`firstname` varchar(64) CHARACTER SET latin1 NOT NULL,
`street` varchar(64) CHARACTER SET latin1 NOT NULL,
`housenumber` varchar(16) CHARACTER SET latin1 NOT NULL,
`Zip` varchar(5) CHARACTER SET latin1 NOT NULL,
`city` varchar(64) CHARACTER SET latin1 NOT NULL,
`email` varchar(64) CHARACTER SET latin1 NOT NULL,
`phone` varchar(16) CHARACTER SET latin1 NOT NULL,
`birthdate` date NOT NULL,
PRIMARY KEY (`address_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin
このテーブルには約800のエントリがありますが、実際にはそれほど多くありません。しかし、クエリを実行する
SELECT * FROM addresses
テスト目的では、決して終了しないようです。サーバー自体のmysql CLIでこれを確認しました。テーブルのいくつかの行を出力し、次の行が出力されるまで非常に長く待機します。
データ送信フェーズの問題かもしれませんが、よくわかりません。
VMには2GBのRAMがあり、使用されるのは320MBのみです。CPUも非常に低い1〜2%で実行されます。mytopは他のクエリを表示しませんIT管理者は、ハードウェア側で何も変更しなかったと述べました。
データベースサーバーを再起動したり、仮想マシンを再起動したりするようなことをすでに試しました。何も役に立たなかった。
編集:
EXPLAIN SELECT * FROM addresses
私にこの結果を与えます:
+----+-------------+-----------+------+---------------+------+---------+------+------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-----------+------+---------------+------+---------+------+------+-------+
| 1 | SIMPLE | addresses | ALL | NULL | NULL | NULL | NULL | 793 | |
+----+-------------+-----------+------+---------------+------+---------+------+------+-------+
1 row in set (0.00 sec)
CPUの負荷が低い場合は、インデックスが不足しているという問題がないことを示しています。その場合、クエリはCPUとディスクへのアクセスを増やす必要があるだけです。また、3年間は問題なく動作したとおっしゃっていました。
一般的なディスクアクセス速度(特にデータベースが配置されているパーティション)を確認しましたか?例えば。 dd
ここのように を使用します。あなたが説明しているものは、死んだディスクや半死んだレイドのような音です。希望するバックアップがありましたか?
いくつかのことを試すことができます
インデックスを作成すると、最初に全テーブルスキャンを実行せずにレコードをすばやく見つけることができ、実行時間が大幅に短縮されます。
CREATE INDEX idx_name ON addresses(name);
SELECTクエリの前で使用すると、MySQLがクエリを実行する方法と、クエリが完了する前に処理する必要がある行数が記述されます。
あなたを導くことができる多くのMySQLオプティマイザがあります。
これが役立つ