MYSQL大表DDL処理知識点

2318 ワード

背景
IT担当者は、オンラインmysqlで追加フィールドを実行し、インデックスを追加するDDLの操作を行うことがよくあります.しかし、いくつかのテーブルのデータ量が比較的大きく、数百万を超えるか、フィールドが特に多いため、これらのDDLの操作がテーブルをロックし、生産環境に問題をもたらすかどうかを考慮する必要があります.そのため、リスクを感じているDDLを実行する場合は、ロックされていないテーブルを確認し、内部操作の流れを知ることが重要です.
インテリジェントポイント
SQL実行中にブロッキングロックが存在するかどうかを確認できます
SQLを実行するときにロックが表示されるかどうかを確認し、現在ロックされているかどうかを確認するには、3つのテーブルを確認します.
select * from information_schema.innodb_locks;
select * from information_schema.innodb_trx;
select * from information_schema.innodb_lock_waits;

show profilesを使用してSQLの具体的な実行プロセスを表示できます.
show profilesは5.0.37以降に追加され、あるセッションがこの機能を開くと、そのセッションのSQLはtraceを取得し、そのSQLの具体的な実行手順を分析することができます.以下のようにします.
テスト環境でテストテーブルを作成し、その実行プロセスを確認し、SQLの実行時間を推定できます.
Mysql 5.6 Online ddl
mysql 5から6からオンラインDDL特性が導入される(ストレージエンジン要件はinnodb).多くの種類のAlter Table操作を強化し、テーブルのコピーとロックを回避し、Alter操作を実行すると同時にselect、insert、update、delete文の実行を許可します.したがって、最新バージョンでは、ALGORITHMとLOCKオプションを使用してファイルのコピーとロックを抑制できます.でもmysql 5でも6では、alter操作(カラムの追加/削除、プライマリ・キーの追加/削除、データ型の変更など)の再構築が必要です.
非常に実用的で、次の表を参照してください.
追加ツールpt-online-schema-change
mysqlがonline ddl特性を追加しない前に、大きなテーブルのddl文はmysql dbaに大きな悩みをもたらします.そこで、これらの問題を解決するための追加の3つのツールがありますpt-online-schema-changeは、オンラインでDDL操作を実行することができ、読み書き操作をブロックしてビジネスプログラムに影響を与えることはありません.
具体的な使用は、筆者が深く使用したことがないので、ここでは推薦するだけで、ブログを参考にしてください.
https://blog.csdn.net/mchdba/article/details/76253016
https://blog.csdn.net/lijingkuan/article/details/68951089
https://www.aliyun.com/jiaocheng/1120002.html
最後に、大表DDLのベストプラクティス
1、必ず業務が少ない時にDDLを実行し、必ず、蜜汁自信を持たないでください.
2、DDLを実行する前に、ライブラリにコミットされていないトランザクションがあるかどうかを確認し、トランザクションinformation_を確認することに注意してください.schema.innodb_trxテーブル
3、いつでもサーバーログの状況に注目し、すでに問題があったら先に解決しなければならない.show processlistでもいくつかの問題が見つかります
4、特に危険な操作は必ず事前生産環境或いはテスト環境で先にシミュレーションし、リスクを評価する.
5、killセッションのプロセスをできるだけ避け、場合によってはデータの問題を引き起こす可能性があります.
6、研究开発の时、予想表が比较的に大きい时、何度も审査して、多くいくつかのプリセットフィールドを残して、DDL操作を避けます.
参考資料及びブログ:
https://www.cnblogs.com/mysql-dba/p/6192897.html