質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Amazon RDS

Amazon RDSは、米アマゾン社が提供しているRDBMSサービス。クラウド上でのリレーショナルデータベースの構築および運用が可能です。MySQL/PostgreSQL/Oracle/SQL Serverのインストールを容易にすることができます。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

解決済

3回答

9955閲覧

Amazon RDS(MySQL)のInsert速度が、突然遅くなる件について

Mozart

総合スコア25

Amazon RDS

Amazon RDSは、米アマゾン社が提供しているRDBMSサービス。クラウド上でのリレーショナルデータベースの構築および運用が可能です。MySQL/PostgreSQL/Oracle/SQL Serverのインストールを容易にすることができます。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

0グッド

0クリップ

投稿2020/08/21 22:37

恐れ入ります。

現在、仕事でAmazon RDS のMySQLを使用しています。

主に、ログデータの移動のようなことをバッチで行っています。

1回のバッチで、100~1000万件ほどの処理を何回か実行します。

単純なSQLで、1つのテーブルから1つのテーブルへの移動で、
insert... select で実行しています。

ただ、10秒程度で終わる処理が、
繰り返していると、あるときに突然遅くなり、2~3分かかるようになってしまいます。

この重い処理を通り抜けると、以前よりは遅いですが速度が戻ってきます。

原因を調べている間に、primary や index をすべて外して処理することも実施しましたが、
体感できる速度の変化はありませんでした。。

RDSのモニターでは、
CPUは20%程度、使用できるメモリーも5GB以上の余裕があり安定しているようです。

index も付いていない、単純な1対1のテーブルの insert... select 文ですので、
SQL自体に問題があるとは考えにくいということになり、MySQLの設定調整を調べてみました。

それぞれのサイトで紹介されていた以下のパラメーターを変更してみたのですが、
体感できる効果はありませんでした。

innodb_buffer_pool_size
innodb_lru_scan_depth
innodb_log_buffer_size
innodb_log_file_size
innodb_log_file_size
bulk_insert_buffer_size
max_allowed_packet
innodb_log_file_size

同様の現象について、ご経験のある方がいれば、
教えていただけると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sazi

2020/08/22 01:08 編集

確実な再現性はあるのですか? >繰り返していると、あるときに突然遅くなり は同じ状況で再度実施して再現させることができるなら、多少原因の絞り込みは出来るでしょうが
sazi

2020/08/22 01:10

トランザクション制御はどのように行っていますか? COMMITのタイミングは?
Mozart

2020/08/22 02:31

確実に再現する場所がございます。 複数のテーブルから必要なデータを「insert... select 」で、temporaryテーブルに集めます。 その後、temporaryテーブルのデータを、insert... select で実体テーブルに書き込むのですが、 ここで、スローダウンします。 書き込み方法は、insert... select ではなく、一度データファイルをexport して、 その後、load data ... をしても、同じようで、load data ... 時にスローダウンしました。 トランザクションは、 「全体でコミット、少しずつコミット、常にコミット」で調整してみましたが、 体感できる変化はありませんでした。。
sazi

2020/08/22 03:11 編集

ストレージに問題がある可能性もありますけどRDSですしねぇ。 再現性はinsertする件数に依存しますか? また、分割コミットはどのような実装ですか? 再現する状況で、insert先のテーブルを空にしても再現しますか?
Mozart

2020/08/22 03:13

再現性は件数に依存するようです。 大きな量だと、その分遅くなるようです。 平時に同じload data を実行した場合、100万件程度のため10秒未満でした。 分割コミットは、ログを時間ごとに24分割してcommitするようにしてみました。
sazi

2020/08/22 03:21 編集

insert先を同じ構造で別な名前の空のテーブルにしても再現しますか?
Mozart

2020/08/22 03:19

はい。それも実施しまして、再現してしまいました。
sazi

2020/08/22 03:24 編集

1回あたりトランザクション量を調整して下さい。 単にlimitで件数を調整して確認する方が早いと思います。
guest

回答3

0

自己解決

こちら、MySQLサーバーの起動パラメーター設定について、
専門書をみながら調整したことで解決できました。

投稿2020/08/23 02:48

Mozart

総合スコア25

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sazi

2020/08/23 02:56 編集

もう少し具体的な内容で報告してもらえると、有用な記事になると思います。 どんな専門書をみて、どのパラメータを調整したのでしょうか。
guest

0

単純なSQLで、1つのテーブルから1つのテーブルへの移動で、insert... select で実行しています。

逆に、トランザクション量が意識されていない単純な処理になっているとも言えます。
処理件数が一定でないなら、上限を決めた分割コミットを行って下さい。

MySQLに大量のデータを入れるときに最適な方法は?

パラメーターを変更してみたのですが、体感できる効果はありませんでした。

無暗に変更していませんか?バッファの変更には注意が必要です。
やってはいけない!!MySQLに悲鳴をあげさせる10の方法

投稿2020/08/22 01:29

編集2020/08/22 01:38
sazi

総合スコア25327

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

主に、ログデータの移動のようなことをバッチで行っています。

最初から移動先にデータを作っては?
必要なら今までのログデータの場所と移動先の両方にINSERTするとか?

パフォーマンス監視ツールを使うという選択肢もあります

投稿2020/08/21 23:10

Orlofsky

総合スコア16417

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問