More Related Content
[db tech showcase Tokyo 2015] C27:楽天MySQL Backup Structure by 楽天株式会社 粟田啓介 S08 Microsoft Azure SQL Server の活用 (IaaS 環境における設定や運用) Hatena's Infrastructure from the beginning MHA for MySQLとDeNAのオープンソースの話 What's hot (20)
Azure sql database 入門 2014年10月版 S01 企業で活用が進む Microsoft Azureの仮想マシン (Windows) Azure SQLデータベース最新動向&TIPS MySQL のオンラインバックアップ & リカバリ Data consistency 入門 data partitioning ガイダンス 160625 cloud samurai_adds_migration_160625 Sql database 基本構成と直近で追加されていた機能の紹介 今日から使えるCouchbaseシステムアーキテクチャデザインパターン集 ISUCONの勝ち方 YAPC::Asia Tokyo 2015 SQL Server/SQL Database の新機能のお話し SQLまで使える高機能NoSQLであるCouchbase Serverの勉強会資料 Linux/DB Tuning (DevSumi2010, Japanese) Active Directoryドメインを作ってみよう ~フォレストに新しいツリーのドメインを追加~ Viewers also liked (20)
【ビズリーチ】プロダクトマネージャーの仕事と魅力 Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜 Esri Developer Summit 参加報告 Information sharing and Experience consistency at Cookpad mobile application JAWS-UG ECS Best Practices #jawsug_ct After tests marzo 2017: Pruebas de Integración Automatizadas con Docker Caps & robbers louis sihler Netwatcher Credit Union Tech Talk Las Vegas es llamada “La Capital Mundial del Entretenimiento” por una buena r... Ecossistema de Uso dos dados abertos Message to White House to take Cyber Security seriously - from MIT Informe del perfil profesional rima 2016 Campamento de Verano 2017 Los Alcázares Campamentos de Verano San Martín de Valdeiglesias 2017 Similar to 20170329 D3 DBAが夜間メンテをしなくなった日 発表資料 (20)
20170329 D3 DBAが夜間メンテをしなくなった日 発表資料 DevOps with Database on AWS DBワークロードのAWS化とデータベースサービス関連最新情報 Online schema change in mysql casual #1(2010/12/11) Online schema change in mysql casual #1(2010/12/11) いよいよマルチクラウドの時代!マルチクラウド検討比較する前に知っておくべきポイント(Oracle Cloudウェビナーシリーズ: 2020年9月9日) 株... Online schema change_for_mysql_casual [db tech showcase Sapporo 2015] B15:ビッグデータ/クラウドにデータ連携自由自在 (オンプレミス ↔ クラウド ↔ クラ... [CTC Forum 2019/10/25] 事例から学ぶ!AWS 移行でデータベースの管理・コストを削減する方法 Webアプリを並行開発する際のマイグレーション戦略 20151120_ビッグデータ/クラウドにデータ連携自由自在 “オンプレミス ↔ クラウド ↔ クラウド” by 株式会社インサイトテクノロジー 森田俊哉 [Aurora事例祭り]AWS Database Migration Service と Schema Conversion Tool の使いドコロ [Aws]database migration seminar_20191008 今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 - MySQL at Yahoo! JAPAN #dbts2018 20210216 AWS Black Belt Online Seminar AWS Database Migration Service More from dcubeio (20)
AWS Summit Tokyo 2019登壇資料「DevOpsの劇的改善!古いアーキテクチャから王道のマネージドサービスを活用しフルリプレイス! 」 ビットコインとブロックチェーンを初めからていねいに(超基礎編) 20171206 d3 health_tech発表資料 Go初心者がGoでコマンドラインツールの作成に挑戦した話 初めての Raspberry pi 〜プラレールをunityの世界の中で走らせよう〜 (1) Apiドキュメンテーションツールを使いこなす【api blueprint編】 すごーい!APIドキュメントを更新するだけでAPIが自動テストできちゃう!たのしー! Python × Herokuで作る 雑談slack bot 機械学習を支えるX86 64の拡張命令セットを読む会 20170212 簡単、クレカ決済! PAY.JPを使ったクレカ決済の仕組み・開発運用時の考慮点について React NativeでTwitterクライアントを作ってみよう 20170329 D3 DBAが夜間メンテをしなくなった日 発表資料
- 2. アジェンダ
1. はじめに
1-1. 自己紹介
1-2. 本日お話すること
2. 導入検討フェーズ
2-1. 克服すべき運用課題
2-2. 達成するにあたって検討したこと
2-2-1. オンラインスキーマチェンジする為の方法
2-2-2.InnoDB とオンライン DDL について
2-2-3. 最初に考えたこと
2-2-4. オンラインスキーマチェンジする為の方法
- 3. 2-3. ツール選定
2-3-1. 選定したツール
2-3-2. 実際のツールの挙動
2-4. ツールの運用環境
2-4-1.AWS RDS(MySQL) の運用環境
2-4-2.Percona Toolkit の運用環境
2-4-3.AWS RDS(MySQL) パラメータグループの変更内容
2-4-4.pt-online-schema-change コマンド発行時に
発生した課題と回避オプション
2-4-5. 最終的なコマンドサンプル
アジェンダ
- 4. 3. 運用フェーズ
3-1. 運用実績
3-1-1. 達成できたこと
3-1-2. アプリケーションリリース時にスキーマ変更が
必要な場合の実績
3-1-3. バッチ処理で OPTIMIZE TABLE を実行する場合の実績
3-2. 運用実績 ( 障害例 )
3-2-1. トリガー使用時のロックダウンについて
アジェンダ
- 6. 1-1. 自己紹介
氏名:益子 徹
経歴:
・ 2002 年 新卒で中堅 SIer に入社、テキストマイニングツールの
パッケージソフト開発から大手製造業、サービス業向けの受託開発
に従事。
・ 2013 年 株式会社ビズリーチに入社、弊社サービスの DBA, イン
フラからスマートフォンアプリケーションの製造・運用、開発部隊
のマネジメントまで幅広く担当。
1. はじめに
- 8. 補足:
MySQL(InnoDB) は、スキーマ変更 ( カラム追加やテーブルの再編成など ) を行うと、
その間、テーブルに共有ロックがかかる仕様となっています。 (※ 注 1)
ALTER TABLE 構文を実行すると、ユーザからは見えないテンポラリーテーブルを新しい定義で
作成し、構文適用前のテーブルからデータをすべてコピーし、コピーが完了すると既存のテーブ
ルとテンポラリーテーブルのテーブル名をリネームするという処理が行われます。この処理中は
、ユーザーはテーブルに対して、ノンロッキングリードのみ許可されており、他の処理はブロッ
クされます。更新やロッキングリードが必要なアプリケーションでは、処理が停止します。加え
て、最後のテーブルリネーム時は、アクセスが排他的になります。
※ 注 1 MySQL のバージョンによって、設定値の変更と実施したスキーマ変更の種類により、共
有ロックを回避できるものもございます。
"14.11.1 オンライン DDL の概要 ". MySQL 公式サイト . https://dev.mysql.com/doc/refman/5.6/ja/innodb-
create-index-overview.html, ( 参照 2017-03-26)
1. はじめに
- 9. 2 1.− 克服すべき運用課題
弊社のいくつかのサービスでは、 AWS RDS(MySQL) を利用したサービス開発が行わ
れております。
データモデルの整合性を保つ為、 MySQL のテーブル間に外部キー制約を貼ることを
基本ルールとしておりました。
MySQL でテーブルへのカラム追加やテーブルの再編成などを行うと、その間テーブ
ルと関連テーブルに共有ロックが発生致しますが、サービスが成長する ( 各テーブル
のデータ量、起点テーブルに紐づく関連テーブルの数、特定テーブルに対するアクセ
ス頻度が増加 ) に連れ、オンサービス中における共有ロックの発生時間の増加や、共
有ロックが原因で発生するシステム停止障害がリスクとなりました。
2. 導入検討フェーズ
- 11. 2 2.− 達成するにあたって検討したこと
2-2-1. オンラインスキーマチェンジする為の方法
(1).MySQL の InnoDB 用オンライン DDL を使用する
(2). スキーママイグレーション・ツールを使用する
「 Percona Toolkit 」 pt-online-schema-change, Facebook OSC, LHM, oak-online-alter-table 等。
(3). スキーマをマイグレーション用レプリカに移行、リファクタリングしたレプリカ
を新しいマスターとして使用する
2. 導入検討フェーズ
- 13. 2-2-2.InnoDB とオンライン DDL について
(2).MySQL5.1 + InnoDB PlugIn と MySQL5.5 バージョン
MySQL5.5 では、 Fast Index Creation という機能が追加されました。
この機能により、インデックスを追加する際のみ、新しい定義のテーブルのコピー処
理が行われなくなりました。但し、インデックスの作成中は、ノンロッキングリード
のみが許可される為、実質的には内部処理の効率だけが改善されました。
2. 導入検討フェーズ
- 14. 2-2-2.InnoDB とオンライン DDL について
(3).MySQL5.6 バージョン
InnoDB オンライン DDL 機能が追加されました。
一部の ALTER TABLE 構文のみ、ノンロッキングリード以外の処理も許可されました。
但し、 ALTER TABLE 構文の開始と終了時点では、排他処理が行われ、
行ロックが必要なトランザクションと同時に実行することができない問題を抱えてい
ます。
2. 導入検討フェーズ
- 15. 2-2-2.InnoDB とオンライン DDL について
(4).MySQL5.7 バージョン
MySQL5.6 で追加されたオンライン DDL 機能の制限が一部緩和されました。
例として、カラム定義の変更等にて以前は行えなかった VARCHAR 型のサイズの増加
変更が行えるようになりました。
RENAME INDEX という構文が追加されました。
2. 導入検討フェーズ
- 17. 2-2.4. オンラインスキーマチェンジする為の方法
(1).MySQL の InnoDB 用オンライン DDL を使用する。
→ カラム追加や Optimize Table 等、実施したいことに対して実現できないケースが
ある
(2). スキーママイグレーション・ツールを使用する。
→ 「 Percona Toolkit 」 pt-online-schema-change の動作内容を調べたところ、自身が最初
に考えた内容と近かった為、深掘り調査を実施。
(3). スキーマをマイグレーション用レプリカに移行、リファクタリングしたレプリカ
を新しいマスターとして登用する。
→ レプリカ遅延状況をオンライン状態で追いかけることは、現実的ではない。
また、レプリカのマスター昇格時にオンラインではなくなるタイミングが発生
する。
2. 導入検討フェーズ
- 18. 2-3. ツール選定
2-3-1. 選定したツール
「 Percona Toolkit 」 pt-online-schema-change
PERCONA 社が開発した、 MySQL のテーブルをロックをせずに、指定のテーブルの
スキーマを変更する事ができるツール。
すべて Perl で作成されており、ライセンスは GPL V2 。
MySQL と同様、オープンソースで提供され、ユーザは無償で利用することが可能。
2017 年 02 月に最終更新。更新頻度は数ヶ月単位で実施され、情報源が多い。
2. 導入検討フェーズ
- 20. • 2-4. ツールの運用環境
• 2-4-1.AWS RDS(MySQL) の運用環境
• エンジン : MySQL 5.6.19a
• インスタンスクラス : db.r3.xlarge
• 2-4-2.Percona Toolkit の運用環境
• OS : Amazon Linux version 2015.09
• ツール : percona-toolkit-2.2.14-1.noarch.rpm
• その他 : システム要件を参照
• ※ 最新版のツールを使用しない理由: percona-toolkit-2.2.16 を使用して動作検証した際
に下記の bug 情報と一致する不具合が発生した為、 percona-toolkit-2.2.14 にダウングレー
ドして使用することに致しました。
• 不具合情報
• https://bugs.launchpad.net/percona-toolkit/+bug/1498128
2. 導入検討フェーズ
- 21. • 2-4-3.AWS RDS(MySQL) パラメータグループの変更内容
• 運用中の AWS RDS(MySQL) に対して、 pt-online-schema-change を適用するにあたり、以下
のパラメータグループの変更とインスタンスの再起動を実施いたしました。
2. 導入検討フェーズ
- 23. • 2-4-5. 最終的なコマンドサンプル
• pt-online-schema-change
• --alter "ADD カラム追加構文 "
• --alter-foreign-keys-method "rebuild_constraints"
• --charset "utf8mb4"
• --recursion-method none
• --execute t=table_name
2. 導入検討フェーズ
- 24. • 3 1.− 運用実績
• 3-1-1. 達成できたこと
• サービスを全く停止すること無く、下記のスキーマ変更を実現することが出来ました
。
• ・ ALTER table_name ADD ( カラム追加 Null, Not Null, デフォルト値設定含む )
• ・ ALTER table_name MODIFY ( カラム再編成 )
• ・ ADD INDEX ( インデックス追加 )
• ・ ADD CONSTRAINT FK ( 外部キー制約追加 )
• ・ OPTIMIZE TABLE table _ name ( オプティマイズ )
•
• ※ 「 Percona Toolkit 」 pt-online-schema-change は上記以外にも多くのスキーマ変更に対応し
ておりますが、段階的に適用範囲を広げることにし、採用した内容は上記のみとなり
ます。
3. 運用フェーズ
- 26. • 3-1-3. バッチ処理で OPTIMIZE TABLE を実行する場合の実績
• 本番運用中の RDS(MySQL) に対して日次バッチとして pt-online-schema-change を定期実行
しました。
• 日次で全行の洗い替えが発生する集計テーブルを対象とし、データーファイルのデフ
ラグ処理を目的に 5 ヶ月以上の連続運用実績がございます。
3. 運用フェーズ
- 27. • 3-2. 運用実績 ( 障害例 )
• 3-2-1. トリガー使用時のロックダウンについて
• 本番運用中の RDS(MySQL) に対して pt-online-schema-change を定期実行した際に、完全な
ロックダウンを経験したことが一度だけございます。
• トリガー作成時のロック競合に起因して、テーブルまたはデータベース全体がアクセ
ス不能になりました。
• トリガーの生成または削除時に要求されるロックはメタデータロックである為、マイ
グレーション対象のテーブルもしくは、関連テーブルへのアクセス頻度が高すぎる場
合は、トリガーの作成、削除の僅かなタイミングでロックダウンするリスクがござい
ます。
3. 運用フェーズ
- 28. • 4-1. メリット
• 1. 共有ロック不要でスキーマ変更可能
• 2. 実行中に進行割合を確認可能
• 3. ツールの処理中にデットロックエラーが発生し、処理が落ちても、エラーメッセー
ジを返し、ロールバックされる
• 4. ツールの処理中に強制停止した場合、ツール実行時に作成されたトリガーと一時
テーブルを洗い出して削除することでリラン可能
4. 終わりに
- 29. • 4.2. デメリット
• 1. テーブルコピーを伴う為、若干の IO と CPU (最大で使用率 30 %上積み)を消費
する
• 2. 直接 ALTER TABLE を実行するよりは、 150% 以上の所要時間が必要
• 3. 一時的なテーブルコピーに際して、余分なディスク容量が必要
• 4. ツールのバージョンによっては、困った不具合を抱えている為、運用回避を前提に
事前検証が必要
• 5. トリガー作成・削除時にメタデータロックダウンする可能性を抱えている
4. 終わりに
- 30. • 4.3. 所感
• 冒頭で述べました、「可能な限り、サービスを停止することなく、システムの開発サ
イクルに合わせて、データモデルを変更する」という目的に対して、 pt-online-schema-
change の導入は確実に成果がありました。
• RDS(MySQL) 自体のパラメータ変更や本当に大規模なデータ移行を除いて、システム
停止を伴うメンテナンスの頻度が大きく減少しました。
• 但し、運用するシステムの RDS(MySQL) への参照・更新頻度が本当に高い場合は、こ
のツールを使用しても解決できないケースが発生するのも確かです。
• このツールの使用に際しては、十分な検証作業と利用方針を定めた上で活用すること
をお勧めします。
4. 終わりに
- 31. • 4.4. 免責事項
• 最後になりますが、本日の発表に含まれる情報もしくは内容を利用することで直接・
間接的に生じた損失に関し、弊社 ( 株式会社ビズリーチ ) と発表者は一切の責任を負
わないものとします。オンラインスキーマチェンジを実行する際には、細心の注意を
心掛けて下さい。
• 本日は、ご清聴ありがとうございました。
4. 終わりに