私は、あるマシンでホストされているMySQLデータベースと、ローカルネットワーク上で読み書きする他のマシンで実行されている6クライアントを使用するアプリケーションを持っています。MySQLのアップデートが徐々に遅くなります
私は、作業する行に約120,000の項目を含む1つのメイン作業表を持っています。各クライアントは、割り当てられていない40個の作業項目をテーブルから取得し(割り当て済みとしてマークする)、作業を行い、結果を同じ作業表に書き戻します。この作業は、これ以上行うことができなくなるまで続きます。
上記更新クエリを使用して、クライアントのいずれかから表40の結果の各ブロックをライトバックにかかる時間の量を示す写真です。ほとんどの時間は持続時間がかなり短いことがわかりますが、突然持続時間は300秒になり、すべての作業が完了するまでそこにとどまります。最後までクエリを実行する時間のこの急激な増加は、私が助けが必要なものです。
クライアントに負荷がかかりません。サーバーは少ししか搭載されていますが、16GBのRAMと8つのコアがあり、このdbのホスティング以外は何もしていません。
ここに関連するSQLコードがあります。
表の作成:
CREATE TABLE work (
item_id MEDIUMINT,
item VARCHAR(255) CHARACTER SET utf8,
allocated_node VARCHAR(50),
allocated_time DATETIME,
result TEXT);
/* Then insert 120,000 items, which is quite fast. No problem at this point. */
INSERT INTO work VALUES (%s,%s,%s,NULL,NULL,NULL);
クライアント上で動作するように40の項目を割り当てる:
UPDATE work SET allocated_node = %s, allocated_time=NOW()
WHERE allocated_node IS NULL LIMIT 40;
SELECT item FROM work WHERE allocated_node = %s AND result IS NULL;
アップデート完了結果に行(これは数時間後には本当に遅くなる部分です実行中):
/* The chart above shows the time to execute 40 of these for each write back of results */
UPDATE work SET result = %s WHERE item = %s;
私はUbuntu 14.04ですべての標準設定ings。 最終テーブルは約160MBで、インデックスはありません。
私の質問に間違いはありませんし、全体的に2倍の時間がかかります。
これらの問題の経験をお持ちの方は、このパフォーマンスの問題を解決するためにMySQLで変更する必要がある設定を示唆することができますか、またはチャートのタイミングを説明する可能性のある問題を指摘してください。
ありがとうございました。
「仕事」はどれくらい大きくなるのですか? 'innodb_buffer_pool_size'と' key_buffer_size'の値は何ですか?どのエンジンが使用されていますか? –