SlideShare a Scribd company logo
AWS RDS(MySQL) をオンサービスのまま
スキーマモデル変更する運用を
1年間続けた所感
DBA が夜間メンテをしなくなった日
アジェンダ
1. はじめに
1-1. 自己紹介
1-2. 本日お話すること
2. 導入検討フェーズ
2-1. 克服すべき運用課題
2-2. 達成するにあたって検討したこと
2-2-1. オンラインスキーマチェンジする為の方法
2-2-2.InnoDB とオンライン DDL について
2-2-3. 最初に考えたこと
2-2-4. オンラインスキーマチェンジする為の方法
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. 最終的なコマンドサンプル
アジェンダ
3. 運用フェーズ
3-1. 運用実績
3-1-1. 達成できたこと
3-1-2. アプリケーションリリース時にスキーマ変更が
必要な場合の実績
3-1-3. バッチ処理で OPTIMIZE TABLE を実行する場合の実績
3-2. 運用実績 ( 障害例 )
3-2-1. トリガー使用時のロックダウンについて
アジェンダ
4. 終わりに
4-1. メリット
4.2. デメリット
4.3. 所感
4.4. 免責事項
アジェンダ
1-1. 自己紹介
氏名:益子 徹
経歴:
・ 2002 年 新卒で中堅 SIer に入社、テキストマイニングツールの
パッケージソフト開発から大手製造業、サービス業向けの受託開発
に従事。
・ 2013 年 株式会社ビズリーチに入社、弊社サービスの DBA, イン
フラからスマートフォンアプリケーションの製造・運用、開発部隊
のマネジメントまで幅広く担当。
1. はじめに
1 2.− 本日お話すること
アクセス頻度の高い Web サービスにて、 MySQL(InnoDB) を利用した
場合に於いても、サービスを運用したまま、スキーマ変更を実施す
る運用経験についてお話します。
1. はじめに
補足:
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. はじめに
2 1.− 克服すべき運用課題
弊社のいくつかのサービスでは、 AWS RDS(MySQL) を利用したサービス開発が行わ
れております。
データモデルの整合性を保つ為、 MySQL のテーブル間に外部キー制約を貼ることを
基本ルールとしておりました。
MySQL でテーブルへのカラム追加やテーブルの再編成などを行うと、その間テーブ
ルと関連テーブルに共有ロックが発生致しますが、サービスが成長する ( 各テーブル
のデータ量、起点テーブルに紐づく関連テーブルの数、特定テーブルに対するアクセ
ス頻度が増加 ) に連れ、オンサービス中における共有ロックの発生時間の増加や、共
有ロックが原因で発生するシステム停止障害がリスクとなりました。
2. 導入検討フェーズ
2 1.− 克服すべき運用課題
弊社はベンチャー企業、スピード感を大切にしている為、システムの開発リリースサ
イクルは、短いスプリントで実施致します。
その間に発生したデータモデルの変更要求は、可能な限り、サービスを停止すること
なく実施する必要がありました。
DBA としては、成果とリスクの狭間で苛まれる情けない課題を抱えておりました。
2. 導入検討フェーズ
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. 導入検討フェーズ
2-2-2.InnoDB とオンライン DDL について
(1).MySQL5.1 以前のバージョン
「 1 2.− 本日お話すること」の補足 事項で記述した動作仕様となります。
2. 導入検討フェーズ
2-2-2.InnoDB とオンライン DDL について
(2).MySQL5.1 + InnoDB PlugIn と MySQL5.5 バージョン
MySQL5.5 では、 Fast Index Creation という機能が追加されました。
この機能により、インデックスを追加する際のみ、新しい定義のテーブルのコピー処
理が行われなくなりました。但し、インデックスの作成中は、ノンロッキングリード
のみが許可される為、実質的には内部処理の効率だけが改善されました。
2. 導入検討フェーズ
2-2-2.InnoDB とオンライン DDL について
(3).MySQL5.6 バージョン
InnoDB オンライン DDL 機能が追加されました。
一部の ALTER TABLE 構文のみ、ノンロッキングリード以外の処理も許可されました。
但し、 ALTER TABLE 構文の開始と終了時点では、排他処理が行われ、
行ロックが必要なトランザクションと同時に実行することができない問題を抱えてい
ます。
2. 導入検討フェーズ
2-2-2.InnoDB とオンライン DDL について
(4).MySQL5.7 バージョン
MySQL5.6 で追加されたオンライン DDL 機能の制限が一部緩和されました。
例として、カラム定義の変更等にて以前は行えなかった VARCHAR 型のサイズの増加
変更が行えるようになりました。
RENAME INDEX という構文が追加されました。
2. 導入検討フェーズ
2-2-3. 最初に考えたこと
手順
1. メンテナンス対象の元テーブルをコピーして、作業用の仮テーブルを作成
2. 仮テーブルに対して、カラム追加などの変更を実施
3. その間、元テーブルに対して行われる更新処理について差分を記録しておく
4. 仮テーブルの変更が終わったら、記録しておいた差分データを仮テーブルに反映
5. 差分データの反映が終わったら、元テーブルと仮テーブルを入れ替える
2. 導入検討フェーズ
2-2.4. オンラインスキーマチェンジする為の方法
(1).MySQL の InnoDB 用オンライン DDL を使用する。
→ カラム追加や Optimize Table 等、実施したいことに対して実現できないケースが
ある
(2). スキーママイグレーション・ツールを使用する。
→ 「 Percona Toolkit 」 pt-online-schema-change の動作内容を調べたところ、自身が最初
に考えた内容と近かった為、深掘り調査を実施。
(3). スキーマをマイグレーション用レプリカに移行、リファクタリングしたレプリカ
を新しいマスターとして登用する。
→ レプリカ遅延状況をオンライン状態で追いかけることは、現実的ではない。
また、レプリカのマスター昇格時にオンラインではなくなるタイミングが発生
する。
2. 導入検討フェーズ
2-3. ツール選定
2-3-1. 選定したツール
「 Percona Toolkit 」 pt-online-schema-change
PERCONA 社が開発した、 MySQL のテーブルをロックをせずに、指定のテーブルの
スキーマを変更する事ができるツール。
すべて Perl で作成されており、ライセンスは GPL V2 。
MySQL と同様、オープンソースで提供され、ユーザは無償で利用することが可能。
2017 年 02 月に最終更新。更新頻度は数ヶ月単位で実施され、情報源が多い。
2. 導入検討フェーズ
2-3-2. 実際のツールの挙動手順
1. 対象テーブルと同じ構造をした作業用テーブルを作成
2. 作業用テーブルに変更する ALTER 文を適用
3. 3 つトリガーを作成して、対象テーブルへの挿入・削除・更新が作業用テーブルに
反映されるよう設定
4. 対象テーブルから作業用テーブルへトリガー経由でデータをコピー
• 5. RENAME して対象テーブルと作業用テーブルを入れ替える
• 6. 入れ替え後の古いテーブルとトリガーを削除する
2. 導入検討フェーズ
• 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. 導入検討フェーズ
• 2-4-3.AWS RDS(MySQL) パラメータグループの変更内容
• 運用中の AWS RDS(MySQL) に対して、 pt-online-schema-change を適用するにあたり、以下
のパラメータグループの変更とインスタンスの再起動を実施いたしました。
2. 導入検討フェーズ
• 2-4-4.pt-online-schema-change コマンド発行時に発生した課題と回避オプション
• pt-online-schema-change コマンドの検証を実施する過程でいくつかの課題が発生。
• その中でオプション値を設定することで回避できたことについて触れます。
2. 導入検討フェーズ
• 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. 導入検討フェーズ
• 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. 運用フェーズ
• 3-1-2. アプリケーションリリース時にスキーマ変更が必要な場合の実績
• 本番運用中の RDS(MySQL) のアクセス頻度の高い主要テーブルを対象としたカラムと
インデックス追加処理を pt-online-schema-change を使用して実行しました。 10 回以上の
運用実績がございますが、代表的な成功例を提示いたします。
3. 運用フェーズ
• 3-1-3. バッチ処理で OPTIMIZE TABLE を実行する場合の実績
• 本番運用中の RDS(MySQL) に対して日次バッチとして pt-online-schema-change を定期実行
しました。
• 日次で全行の洗い替えが発生する集計テーブルを対象とし、データーファイルのデフ
ラグ処理を目的に 5 ヶ月以上の連続運用実績がございます。
3. 運用フェーズ
• 3-2. 運用実績 ( 障害例 )
• 3-2-1. トリガー使用時のロックダウンについて
• 本番運用中の RDS(MySQL) に対して pt-online-schema-change を定期実行した際に、完全な
ロックダウンを経験したことが一度だけございます。
• トリガー作成時のロック競合に起因して、テーブルまたはデータベース全体がアクセ
ス不能になりました。
• トリガーの生成または削除時に要求されるロックはメタデータロックである為、マイ
グレーション対象のテーブルもしくは、関連テーブルへのアクセス頻度が高すぎる場
合は、トリガーの作成、削除の僅かなタイミングでロックダウンするリスクがござい
ます。
3. 運用フェーズ
• 4-1. メリット
• 1. 共有ロック不要でスキーマ変更可能
• 2. 実行中に進行割合を確認可能
• 3. ツールの処理中にデットロックエラーが発生し、処理が落ちても、エラーメッセー
ジを返し、ロールバックされる
• 4. ツールの処理中に強制停止した場合、ツール実行時に作成されたトリガーと一時
テーブルを洗い出して削除することでリラン可能
4. 終わりに
• 4.2. デメリット
• 1. テーブルコピーを伴う為、若干の IO と CPU (最大で使用率 30 %上積み)を消費
する
• 2. 直接 ALTER TABLE を実行するよりは、 150% 以上の所要時間が必要
• 3. 一時的なテーブルコピーに際して、余分なディスク容量が必要
• 4. ツールのバージョンによっては、困った不具合を抱えている為、運用回避を前提に
事前検証が必要
• 5. トリガー作成・削除時にメタデータロックダウンする可能性を抱えている
4. 終わりに
• 4.3. 所感
• 冒頭で述べました、「可能な限り、サービスを停止することなく、システムの開発サ
イクルに合わせて、データモデルを変更する」という目的に対して、 pt-online-schema-
change の導入は確実に成果がありました。
• RDS(MySQL) 自体のパラメータ変更や本当に大規模なデータ移行を除いて、システム
停止を伴うメンテナンスの頻度が大きく減少しました。
• 但し、運用するシステムの RDS(MySQL) への参照・更新頻度が本当に高い場合は、こ
のツールを使用しても解決できないケースが発生するのも確かです。
• このツールの使用に際しては、十分な検証作業と利用方針を定めた上で活用すること
をお勧めします。
4. 終わりに
• 4.4. 免責事項
• 最後になりますが、本日の発表に含まれる情報もしくは内容を利用することで直接・
間接的に生じた損失に関し、弊社 ( 株式会社ビズリーチ ) と発表者は一切の責任を負
わないものとします。オンラインスキーマチェンジを実行する際には、細心の注意を
心掛けて下さい。
• 本日は、ご清聴ありがとうございました。
4. 終わりに

More Related Content

PDF
MySQL カジュアル 福岡 03
PDF
MySQLバックアップの基本
PDF
[db tech showcase Tokyo 2015] C27:楽天MySQL Backup Structure by 楽天株式会社 粟田啓介
PDF
S08 Microsoft Azure SQL Server の活用 (IaaS 環境における設定や運用)
PPT
Hatena's Infrastructure from the beginning
PPTX
MySQLの運用でありがちなこと
PDF
MHA for MySQLとDeNAのオープンソースの話
PDF
AzureでOracle
MySQL カジュアル 福岡 03
MySQLバックアップの基本
[db tech showcase Tokyo 2015] C27:楽天MySQL Backup Structure by 楽天株式会社 粟田啓介
S08 Microsoft Azure SQL Server の活用 (IaaS 環境における設定や運用)
Hatena's Infrastructure from the beginning
MySQLの運用でありがちなこと
MHA for MySQLとDeNAのオープンソースの話
AzureでOracle

What's hot (20)

PPTX
Azure sql database 入門 2014年10月版
PDF
S01 企業で活用が進む Microsoft Azureの仮想マシン (Windows)
PPTX
Azure SQLデータベース最新動向&TIPS
PDF
MySQL のオンラインバックアップ & リカバリ
PDF
Data consistency 入門 data partitioning ガイダンス
PPTX
LINEのMySQL運用について 修正版
PDF
160625 cloud samurai_adds_migration_160625
PDF
Sql database 基本構成と直近で追加されていた機能の紹介
PDF
今日から使えるCouchbaseシステムアーキテクチャデザインパターン集
PPTX
MySQL Clusterを運用して10ヶ月間
PPTX
Sql database でも使えるほにゃらら
PDF
ゆるふわMySQLフェイルオーバー
PDF
ISUCONの勝ち方 YAPC::Asia Tokyo 2015
PDF
LINEのMySQL運用について
PDF
SQL Server/SQL Database の新機能のお話し
PPTX
SQLまで使える高機能NoSQLであるCouchbase Serverの勉強会資料
PPTX
MySQL 冗長化モデル
PDF
MySQLやSSDとかの話 前編
PPT
Linux/DB Tuning (DevSumi2010, Japanese)
PPTX
Active Directoryドメインを作ってみよう ~フォレストに新しいツリーのドメインを追加~
Azure sql database 入門 2014年10月版
S01 企業で活用が進む Microsoft Azureの仮想マシン (Windows)
Azure SQLデータベース最新動向&TIPS
MySQL のオンラインバックアップ & リカバリ
Data consistency 入門 data partitioning ガイダンス
LINEのMySQL運用について 修正版
160625 cloud samurai_adds_migration_160625
Sql database 基本構成と直近で追加されていた機能の紹介
今日から使えるCouchbaseシステムアーキテクチャデザインパターン集
MySQL Clusterを運用して10ヶ月間
Sql database でも使えるほにゃらら
ゆるふわMySQLフェイルオーバー
ISUCONの勝ち方 YAPC::Asia Tokyo 2015
LINEのMySQL運用について
SQL Server/SQL Database の新機能のお話し
SQLまで使える高機能NoSQLであるCouchbase Serverの勉強会資料
MySQL 冗長化モデル
MySQLやSSDとかの話 前編
Linux/DB Tuning (DevSumi2010, Japanese)
Active Directoryドメインを作ってみよう ~フォレストに新しいツリーのドメインを追加~
Ad

Viewers also liked (20)

PDF
【freee】プロダクトマネージャーの仕事と魅力
PDF
【ビズリーチ】プロダクトマネージャーの仕事と魅力
PDF
Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜
PPTX
Esri Developer Summit 参加報告
PDF
Information sharing and Experience consistency at Cookpad mobile application
PDF
困らない程度のJDK入門
PDF
最速で価値を提供する
PDF
DockerとDocker Hubの操作と概念
PDF
Ansibleで始めるインフラ構築自動化
PDF
JAWS-UG ECS Best Practices #jawsug_ct
PDF
After tests marzo 2017: Pruebas de Integración Automatizadas con Docker
PDF
Dontdrinkanddriventsipic
PDF
Caps & robbers louis sihler
PPTX
Netwatcher Credit Union Tech Talk
DOCX
Las Vegas es llamada “La Capital Mundial del Entretenimiento” por una buena r...
ODP
Ecossistema de Uso dos dados abertos
PDF
Message to White House to take Cyber Security seriously - from MIT
PDF
Informe del perfil profesional rima 2016
PDF
Campamento de Verano 2017 Los Alcázares
PDF
Campamentos de Verano San Martín de Valdeiglesias 2017
【freee】プロダクトマネージャーの仕事と魅力
【ビズリーチ】プロダクトマネージャーの仕事と魅力
Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜
Esri Developer Summit 参加報告
Information sharing and Experience consistency at Cookpad mobile application
困らない程度のJDK入門
最速で価値を提供する
DockerとDocker Hubの操作と概念
Ansibleで始めるインフラ構築自動化
JAWS-UG ECS Best Practices #jawsug_ct
After tests marzo 2017: Pruebas de Integración Automatizadas con Docker
Dontdrinkanddriventsipic
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
Ad

Similar to 20170329 D3 DBAが夜間メンテをしなくなった日 発表資料 (20)

PDF
20170329 D3 DBAが夜間メンテをしなくなった日 発表資料
PDF
DevOps with Database on AWS
PDF
DBワークロードのAWS化とデータベースサービス関連最新情報
PPT
Online schema change in mysql casual #1(2010/12/11)
PPT
Online schema change in mysql casual #1(2010/12/11)
PDF
いよいよマルチクラウドの時代!マルチクラウド検討比較する前に知っておくべきポイント(Oracle Cloudウェビナーシリーズ: 2020年9月9日) 株...
PPT
Online schema change_for_mysql_casual
PDF
[db tech showcase Sapporo 2015] B15:ビッグデータ/クラウドにデータ連携自由自在 (オンプレミス ↔ クラウド ↔ クラ...
PDF
[CTC Forum 2019/10/25] 事例から学ぶ!AWS 移行でデータベースの管理・コストを削減する方法
PDF
Webアプリを並行開発する際のマイグレーション戦略
PDF
20151120_ビッグデータ/クラウドにデータ連携自由自在 “オンプレミス ↔ クラウド ↔ クラウド” by 株式会社インサイトテクノロジー 森田俊哉
PDF
楽天プロジェクトX:基幹DB移設 編
PDF
[Aurora事例祭り]AWS Database Migration Service と Schema Conversion Tool の使いドコロ
PDF
[Aws]database migration seminar_20191008
KEY
オリジナルからデータ・ポンプに移植するツボ
PDF
RDS(MySQL)の利用と注意点
PDF
オンプレミスRDBMSをAWSへ移行する手法
PDF
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
PDF
MySQL at Yahoo! JAPAN #dbts2018
PDF
20210216 AWS Black Belt Online Seminar AWS Database Migration Service
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 株式会社インサイトテクノロジー 森田俊哉
楽天プロジェクトX:基幹DB移設 編
[Aurora事例祭り]AWS Database Migration Service と Schema Conversion Tool の使いドコロ
[Aws]database migration seminar_20191008
オリジナルからデータ・ポンプに移植するツボ
RDS(MySQL)の利用と注意点
オンプレミスRDBMSをAWSへ移行する手法
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
MySQL at Yahoo! JAPAN #dbts2018
20210216 AWS Black Belt Online Seminar AWS Database Migration Service

More from dcubeio (20)

PDF
AWS Summit Tokyo 2019登壇資料「DevOpsの劇的改善!古いアーキテクチャから王道のマネージドサービスを活用しフルリプレイス! 」
PDF
ビットコインとブロックチェーンを初めからていねいに(超基礎編)
PDF
20171206 d3 health_tech発表資料
PDF
Go初心者がGoでコマンドラインツールの作成に挑戦した話
PDF
初めての Raspberry pi 〜プラレールをunityの世界の中で走らせよう〜 (1)
PDF
BizReach x Marketo連携
PPTX
Kinesis Firehoseを使ってみた
PDF
Apiドキュメンテーションツールを使いこなす【api blueprint編】
PPTX
春の脆弱性祭り 2017/06/13
PDF
DynamoDBを導入した話
PPTX
Play2 scalaを2年やって学んだこと
PDF
すごーい!APIドキュメントを更新するだけでAPIが自動テストできちゃう!たのしー!
PDF
Python × Herokuで作る 雑談slack bot
PPTX
HR Tech x 機械学習 導入事例紹介
PPTX
Scalaマクロ入門 bizr20170217
PDF
機械学習を支えるX86 64の拡張命令セットを読む会 20170212
PPTX
簡単、クレカ決済! PAY.JPを使ったクレカ決済の仕組み・開発運用時の考慮点について
PPTX
はじめてのAws lambda
PPT
覚えて帰ろうJavaデザインパターン
PPTX
React NativeでTwitterクライアントを作ってみよう
AWS Summit Tokyo 2019登壇資料「DevOpsの劇的改善!古いアーキテクチャから王道のマネージドサービスを活用しフルリプレイス! 」
ビットコインとブロックチェーンを初めからていねいに(超基礎編)
20171206 d3 health_tech発表資料
Go初心者がGoでコマンドラインツールの作成に挑戦した話
初めての Raspberry pi 〜プラレールをunityの世界の中で走らせよう〜 (1)
BizReach x Marketo連携
Kinesis Firehoseを使ってみた
Apiドキュメンテーションツールを使いこなす【api blueprint編】
春の脆弱性祭り 2017/06/13
DynamoDBを導入した話
Play2 scalaを2年やって学んだこと
すごーい!APIドキュメントを更新するだけでAPIが自動テストできちゃう!たのしー!
Python × Herokuで作る 雑談slack bot
HR Tech x 機械学習 導入事例紹介
Scalaマクロ入門 bizr20170217
機械学習を支えるX86 64の拡張命令セットを読む会 20170212
簡単、クレカ決済! PAY.JPを使ったクレカ決済の仕組み・開発運用時の考慮点について
はじめてのAws lambda
覚えて帰ろうJavaデザインパターン
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. トリガー使用時のロックダウンについて アジェンダ
  • 5. 4. 終わりに 4-1. メリット 4.2. デメリット 4.3. 所感 4.4. 免責事項 アジェンダ
  • 6. 1-1. 自己紹介 氏名:益子 徹 経歴: ・ 2002 年 新卒で中堅 SIer に入社、テキストマイニングツールの パッケージソフト開発から大手製造業、サービス業向けの受託開発 に従事。 ・ 2013 年 株式会社ビズリーチに入社、弊社サービスの DBA, イン フラからスマートフォンアプリケーションの製造・運用、開発部隊 のマネジメントまで幅広く担当。 1. はじめに
  • 7. 1 2.− 本日お話すること アクセス頻度の高い Web サービスにて、 MySQL(InnoDB) を利用した 場合に於いても、サービスを運用したまま、スキーマ変更を実施す る運用経験についてお話します。 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. 導入検討フェーズ
  • 12. 2-2-2.InnoDB とオンライン DDL について (1).MySQL5.1 以前のバージョン 「 1 2.− 本日お話すること」の補足 事項で記述した動作仕様となります。 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. 導入検討フェーズ
  • 16. 2-2-3. 最初に考えたこと 手順 1. メンテナンス対象の元テーブルをコピーして、作業用の仮テーブルを作成 2. 仮テーブルに対して、カラム追加などの変更を実施 3. その間、元テーブルに対して行われる更新処理について差分を記録しておく 4. 仮テーブルの変更が終わったら、記録しておいた差分データを仮テーブルに反映 5. 差分データの反映が終わったら、元テーブルと仮テーブルを入れ替える 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. 導入検討フェーズ
  • 19. 2-3-2. 実際のツールの挙動手順 1. 対象テーブルと同じ構造をした作業用テーブルを作成 2. 作業用テーブルに変更する ALTER 文を適用 3. 3 つトリガーを作成して、対象テーブルへの挿入・削除・更新が作業用テーブルに 反映されるよう設定 4. 対象テーブルから作業用テーブルへトリガー経由でデータをコピー • 5. RENAME して対象テーブルと作業用テーブルを入れ替える • 6. 入れ替え後の古いテーブルとトリガーを削除する 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. 導入検討フェーズ
  • 22. • 2-4-4.pt-online-schema-change コマンド発行時に発生した課題と回避オプション • 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. 運用フェーズ
  • 25. • 3-1-2. アプリケーションリリース時にスキーマ変更が必要な場合の実績 • 本番運用中の RDS(MySQL) のアクセス頻度の高い主要テーブルを対象としたカラムと インデックス追加処理を pt-online-schema-change を使用して実行しました。 10 回以上の 運用実績がございますが、代表的な成功例を提示いたします。 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. 終わりに