More Related Content Similar to 楽天プロジェクトX:基幹DB移設 編 (20) More from Rakuten Group, Inc. (20) 楽天プロジェクトX:基幹DB移設 編2. 2
自己紹介
氏名: 上加世田 暁 (かみかせだ さとる)
性別: 男
年齢: 29
経歴: 2009年3月 東京電機大学 大学院情報メディア学科 修了
2009年4月 新卒として楽天株式会社へ入社
2009年7月 DBAとして配属
Oracle/MySQL/Teradata/Informix/Clustrixなど
多くのRDBMSの管理
Linkdin: http://www.linkedin.com/pub/satoru-kamikaseda/72/97b/381
8. 8
性能課題
性 能 課 題
DBがセッションを捌き切れない
会員がログインできない
→ 楽天スーパーポイントが利用できない
→ イベント参加情報が連携できない
※ イメージです
9. 9
この時点でのスケジュール
6月
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
7月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
8月
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
9月
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
10月
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
11月
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30
12月
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Super Sale
原因調査開始!
Next
Super Sale
メンテナンス
残り6ヶ月!
・ 原因調査
・ 課題解決
・ 増強
・ パフォーマンス検証
・ などなど・・・
10. 10
原因調査
O r a c l e
Oracleの設定?
Weblogicの設定?
セッション数・コネクションプール不足?
H / W
S/Wの高負荷?
Disk I/O?
CPU不足?
メモリ不足?
⇒ 対応!
⇒ 対応!
⇒ 対応!
⇒ 対応!
11. 11
Evnents Waits Total
Wait
Time(s)
Waits
/txn
Executions
cursor: pin S 2,515,782 1,136 32.5 235,2701
Weblogicの設定
問 題 点
Weblogic 死活監視
都度 “SELECT 1 FROM DUAL;” を発行
Select
1
Select
1
Select
1
Select
1
Select
1
Select
1
Select
1
Select
1
Select
1
Select
1
Select
1
Select
1
Select
1
Select
1
Select
1
Select
1
Select
1
Select
1
Select
1
Select
1
Select
1
Select
1
Select
1
Select
1
Select
1
Select
1
Select
1
Select
1
Select
1
Select
1
Select
1
Select
1
Select
1
Select
1
Select
1
Select
1
Select
1
Select
1
Select
1
Select
1
Select
1
Select
1
Select
1
Select
1
Select
1
Select
1
Select
1
Select
1
Select
1
Select
1
Select
1 Node 2 Node 3
Node 1
15. 15
この時点でのスケジュール
6月
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
7月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
8月
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
9月
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
10月
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
11月
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30
12月
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Super Sale
メモリ追加
S/W交換
Weblogic設定変更
増強検討開始!
Next
Super Sale
メンテナンス
残り3ヶ月!
・ 増強・移行検討
・ パフォーマンス検証
・ 実施方法の確立
・ などなど・・・
16. 16
増強
増 強 案
Node 1
Node 2
Node 3
Node 4
Node 5
Node 6
Node 1
Node 2
Node 3
スケールアウト? スケールアップ?
New 1
New 2
New 3
Oracle11g
Node 1
Node 2
Node 3
Oracle10g
17. 17
スケールアウト(ノード追加)検討
デ メ リ ッ ト
機種が古い
購入コスト・RACKコストなど必要
Node追加作業の検証が必要
Node数増に伴うアプリケーション改修
調達に時間が必要
Node 1
Node 2
Node 3
Node 4
Node 5
Node 6
Node 1
Node 2
Node 3
メ リ ッ ト
実績あるサーバ
DB自体の移行が不要
18. 18
スケールアップ(最新IA機へ移行)検討
デ メ リ ッ ト
実績の無いサーバ
Oracle11g にVersion UPが必要
パフォーマンス以外に障害試験等が必要
監視やバックアップ等の運用整備が必要
DBのデータ移行が必要
メ リ ッ ト
既存環境と同様の3Node RAC
機種自体が既に購入済みのため購入フローが不要
事前のパフォーマンス試験など可能
Node 1
Node 2
Node 3
New 1
New 2
New 3
Oracle11gOracle10g
19. 19
方針決定
増 強 方 針
メインプラン :スケールアップ(最新IA機へ移行)
バックアッププラン :スケールアウト(ノード追加)
Node 1
Node 2
Node 3
Node 4
Node 5
Node 6
Oracle10g
Node 1
Node 2
Node 3
Oracle11g
New 1
New 2
New 3
Node 1
Node 2
Node 3
スケールアウト スケールアップ
21. 21
移行方法
一 括 デ ー タ 移 行 差 分 同 期 移 行
準備が楽
データ整合性信頼度高
停止時間が4時間以上必要
停止時間短縮可能
差分同期の仕組みが必要
データ担保が必要
Node 2Node 3
Node 1
Node 2Node 3
Node 1
NOW NEW
Node 2Node 3
Node 1
Node 2Node 3
Node 1
NOW NEW
Oracle10g Oracle11g Oracle10g Oracle11g
22. 22
レプリケーション・ソリューション
Logical DataGuard自 前 ス ク リ プ ト
ライセンス等の追加費用 不要
G o l d e n G a t eA t t u n i t y
期間ライセンス 有 ライセンス 必要
下位Version同期 非サポート
開発工数 高
考慮可能
異Version同期 サポート
導入難易度 低
異Version同期 サポート
<選定条件> 仕様要件 ・ 追加費用 ・ 導入難易度
23. 23
この時点でのスケジュール
6月
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
7月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
8月
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
9月
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
10月
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
11月
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30
12月
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Super Sale
メモリ追加
S/W交換
Weblogic設定変更
検証開始!
Next
Super Sale
移行方針検討
増強方針検討増強方針検討
メンテナンス
残り2ヶ月!
・ スケールアップ検証・方法確立
・ パフォーマンス検証
・ 障害試験
・ 環境整備
・ データ移行試験
・ などなど・・・
・ (スケールアウト検証)
25. 25
差分同期検証
検 証 点
移行元への設定
Full Load&レプリケーションの負荷
トリガー・シーケンスの同期
移行元と移行先のデータ整合性
27. 27
必須準備と注意点
有 効 化 方 法
DB全体
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
各テーブル
ALTER TABLE “SCHEMA".“TABLE" ADD SUPPLEMENTAL
LOG DATA (PRIMARY KEY) COLUMNS;
注 意 点
有効化時にLOCKが取られる
REDOログが増える
28. 28
Full Load&レプリケーション負荷
Node 2Node 3
Node 1
NOW
Oracle10g
Node 2Node 3
Node 1
NEW
Oracle11g
Full Loadレプリケーション
問 題 無 し
移行元DBのLoadAvg +1~2程度
Full Load 40パラレル 300GB 約3時間半
問 題 有 り
移行元DBへのSELECTによりShared Poolが侵食される
リテラルなSQLをBind変数化するパッチでBug Fix
29. 29
トリガー・シーケンス
ト リ ガ ー
移行先DBのトリガー 要注意
同期開始前にトリガーの無効化
移行完了後にトリガーの有効化
シ ー ケ ン ス
移行先DBのシーケンスはカウントアップされない
更新停止後の移行元DBのシーケンス確認
移行先DBで手動でシーケンスを再設定
31. 31
データ整合性
比 較 フ ロ ー
比較対象DB同士をDBLinkで開通
Node 2 Node 3
Node 1
NOW
Oracle10g
Node 2 Node 3
Node 1
NEW
Oracle11g
DBLink
移行先に比較処理用オブジェクト作成
結果管理
テーブル
比較対象テーブル登録&確認
対象テーブル ProcedureでデータのHASH化実行
32. 32
データ整合性
H A S H 化
対象テーブルのカラム単位でORA_HASH関数を使ってHASH化
ORA_HASH
Column 1
Column 2
Column 3
Column 4
Column 5
TABLE A
結果管理
テーブル
全レコード分のHASH値をSUMで合計
SUM
カラム数分繰り返し
Colum 1 SUM
Colum 2 SUM
Colum 3 SUM
Colum 4 SUM
Colum 5 SUM
1レコードとして結果を格納
全テーブルで繰り返す
33. 33
データ整合性
比 較 フ ロ ー
比較対象DB同士をDBLinkで開通
Node 2 Node 3
Node 1
NOW
Oracle10g
Node 2 Node 3
Node 1
NEW
Oracle11g
DBLink
移行先に比較処理用オブジェクト作成
結果管理
テーブル
比較対象テーブル登録&確認
対象テーブル テーブル毎にデータをHASH化して格納
同テーブルのHASH値を比較
結果管理
テーブル
300GBのデータ比較が10分で完了!
35. 35
この時点でのスケジュール
6月
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
7月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
8月
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
9月
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
10月
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
11月
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30
12月
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Super Sale
メモリ追加
S/W交換
Weblogic設定変更
Next
Super Sale
移行方針検討
増強方針検討増強方針検討
増強方針検討検証
本番検証本番検証
メンテナンス
メンテ準備開始!
メンテまで
残り3日!
・ 環境掃除
・ Full Load&事前同期
・ メンテナンス
36. 36
3日前!
11月
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30
環境掃除!
環 境 掃 除
[11/15 - 10:00] 検証用Attunity停止
[11/15 - 11:00] 移行先DB掃除
[11/15 - 13:00] 環境確認
[11/15 - 18:00] 深夜作業に向けて帰宅!
メンテナンス
メンテまで
残り2日!
37. 37
2日前!
11月
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30
事前同期開始!
事 前 同 期
[11/16 - 02:00] Full Load開始
[11/16 - 03:00] 1時間監視
[11/16 - 05:30] Full Load完了、差分同期中(ラグ大)
[11/16 - 09:30] 差分同期中(ラグ無し)
メンテナンス
[11/16 - 21:30] (作業関係無く)1NodeのCPU故障
メンテまで
残り1日!
38. 38
1日前!
11月
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30
決戦前夜!
決 戦 前 夜
[11/17 - 22:00] 深夜メンテに向けて仮眠
[11/17 - 23:00] 出社
メンテナンス
メンテ!
40. 40
メンテ!
11月
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30
メンテナンス
メ ン テ ナ ン ス
[11/18 - 02:30] サービス停止
[11/18 - 02:45] 差分同期停止
[11/18 - 03:00] データ比較完了
データ差分発覚!!
残り
2時間!
41. 41
データ差分
デ ー タ 差 分
22テーブルで差分発覚
SELECT MINUS で差分自体の確認
差異例(対象カラムのみ記載)
TIMESTAMP
-------------------------------------------------------------
16-NOV-12 09.56.31.022934 PM (移行元)
16-NOV-12 09.56.31.229340 PM (移行先)
対 応
22テーブルを22パラレルでFull Load
42. 42
メンテ!
11月
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30
メンテナンス
メ ン テ ナ ン ス
[11/18 - 02:30] サービス停止
[11/18 - 02:45] 差分同期停止
[11/18 - 03:00] データ比較&差分発覚
[11/18 - 04:10] 差分調査・リカバリ&データ比較
残り50分!
43. 43
メンテ!
11月
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30
メンテナンス
メ ン テ ナ ン ス
[11/18 - 02:30] サービス停止
[11/18 - 02:45] 差分同期停止
[11/18 - 03:00] データ比較&差分発覚
[11/18 - 04:10] 差分調査・リカバリ&データ比較
[11/18 - 04;20] トリガー・シーケンス設定
[11/18 - 04:50] バックアップ取得
[11/18 - 05:00] サービス再開
ギリギリ
間に合った!
44. 44
この時点でのスケジュール
6月
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
7月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
8月
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
9月
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
10月
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
11月
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30
12月
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Super Sale
メモリ追加
S/W交換
Weblogic設定変更
Next
Super Sale移行方針検討
増強方針検討増強方針検討
増強方針検討検証
本番検証本番検証
メンテナンス
メンテ準備開始
メンテナンス
残り2週間!
・ 新環境⇒旧環境レプリ
・ CPU交換
・ Oracleパッチ適用
・ ノード追加
・ 環境整備
・ などなど・・・
45. 45
この時点でのスケジュール
6月
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
7月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
8月
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
9月
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
10月
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
11月
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30
12月
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Super Sale
メモリ追加
S/W交換
Weblogic設定変更
Next
Super Sale
移行方針検討
増強方針検討増強方針検討
増強方針検討検証
本番検証本番検証
メンテナンス
メンテ準備開始
セールへ!
逆同期
CPU交換
パッチ適用
ノード追加
コピー構築
環境整備
楽天
スーパーセール
開催!
47. 47
ちなみに・・・
パ フ ォ ー マ ン ス
最低でも3倍は耐えられる状態にする
Before After Next
検証できる限りの負荷に耐えられることを確認!
48. 48
まとめ
性 能 課 題
楽天スーパーセールが乗り切れない
増 強
最新IA機への移行
移 行 方 法
差分同期データ移行
ス ー パ ー セ ー ル
余裕を持って乗り切れた
データ整合性確認
HASH化比較スクリプト
49. 49
まとめ
反 省 点
メンテナンス当日に発生したデータ差分バグを事前に見つけられなかった
原 因
本番稼働中のDBで、静止点をとった差分比較を行えなかった
と は い え
レプリケーション製品を導入したことで、準備時間はかなり短縮できた
操作性も高く、検証を何度も気軽に行えた