テーブルをロックせずにmysqlスキーマに変更を加えるためにしばらくの間Percona OSCを使用していましたが、通常は大きなテーブル(〜380万行)に新しいカラムやインデックスを追加しました。数時間Percona pt-online-schema-changeのパフォーマンスが悪いのはなぜですか?
しかし私が試した最後の更新は、完了するまでにさらに11時間の見積もりで、7時間(一晩、私たちの最も静かな時間に)実行した後にわずか40%しか完了しませんでした。 RedHatサーバー上で使用可能なメモリの4GBのすべてが使用されていました - 最近32GBから16GBにアップグレードしました。
ここで何が起こっているのですか?なぜ突然時間がかかったのですか? percona/mysql /サーバが対応できないようなしきい値に達しましたか?パフォーマンスを改善するために調整できる設定はありますか?
テーブルには、32の列と12のインデックス(プライマリキーと2つのユニークインデックスを含む)があります。私はそれがたくさんあることを知っていますが、私が最近言っているように、それはうまくいったのです。
また、このテーブルには、drop_swapメソッドを使用して更新を設定するいくつかの外部キーがあります。
私が使用した完全なコマンドは以下のとおりであった:
pt-online-schema-change --execute --ask-pass --set-vars innodb_lock_wait_timeout=50 --alter-foreign-keys-method=drop_swap
--alter "ADD is_current TINYINT(1) DEFAULT '1' NOT NULL" u=admin,p=XXXXXXX,D=xxxxx_live,t=applicant
innodb_buffer_pool_sizeは現在、2147483648に設定されている - これは、増加すべきか?もしそうなら、どれくらい? Webサーバー(apache/php/symfony)もこのボックスで実行されています。
この特定のテーブルで最後に行った変更は、1つのフィールドの照合順序をutf8_bin(他のフィールドはutf8_unicode_ci)に変更することでした。違いがありますか?