現在、Oracleのシングルインスタンス構成やRestart構成で運用しているシステムを、より高可用性なOracle RAC(Real Application Clusters)構成に移行しようか悩んでいる方も多いのではないでしょうか。
Oracle RACは確かに高可用性・スケーラビリティに優れていますが、「導入すればすべてが良くなる」というわけではなく、RACならではの課題や考慮事項が多く存在します。
この記事では、現在シングルやRestart構成を利用している方向けに、RACへ移行する際の注意点や構成面・パフォーマンス面での違いを詳しく解説します。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
🔷 そもそもRACとは?簡単におさらい
Oracle RACは、複数ノード(サーバ)で同一データベースを同時に稼働させる構成で、以下の特徴を持ちます。
- 各ノードにDBインスタンスが存在(インスタンス単位で分散)
- 共有ストレージ(通常ASM)を通じて同じデータベースにアクセス
- ノード障害時には別ノードで処理を継続可能(フェイルオーバー)
- 同時処理の分散(スケーラビリティ)が可能
🔄 シングル/Restart構成との主な違い
| 項目 | シングル/Restart構成 | RAC構成 |
|---|---|---|
| インスタンス数 | 1つ | ノード数分(2つ以上) |
| 可用性 | プロセス再起動レベル | ノード障害にも耐性あり(HA構成) |
| データアクセス | ローカルメモリ | 他ノードのメモリ参照あり(キャッシュ融合) |
| ネットワーク要件 | 最小限 | プライベートインターコネクトが必要 |
| 発生する待機イベント | ローカルI/O中心 | gc系(グローバルキャッシュ)が発生 |
⚠️ RAC移行時の主な注意点
1. RACは構成が大幅に異なる
- Oracle RACでは、ノード間の同期と共有が前提となるため、クラスタウェア(Oracle Clusterware)と共有ストレージ、インターコネクト(専用ネットワーク)が必要です。
- GIの構成も「Clustered Configuration」でのインストールが必要であり、Restart構成の単純な延長線ではありません。
2. アプリケーション側の接続方式に注意
- TAF(Transparent Application Failover)やSCANリスナーの導入が前提となり、既存の接続方式(例:シングルのホスト:ポート接続)は非推奨となります。
- tnsnames.oraやサービス構成の見直しも発生します。
3. RACでは”gc系待機イベント”が発生する(重要)
Oracle RAC特有の待機イベントとして、”gc” で始まる待機イベント(グローバル・キャッシュ関連)が多く発生します。
🔍 gc系待機イベントとは?
Oracle RACでは、複数ノードが同一データベースを共有するため、あるインスタンスでブロックを読み込んだ後に別のインスタンスでも同じブロックにアクセスしたい場合、そのブロックの「貸し借り(キャッシュ融合)」が必要になります。
これによって発生する待機イベントが「gc(global cache)」で始まる待機です。
🔸 gc系待機イベントのイメージ図(テキスト図)
[Node1] [Node2]
DB Instance 1 DB Instance 2
│ │
│ UPDATE emp SET sal=sal+100 WHERE id=1
│-------------------------------------> │
│ ブロックはNode1が保持 │
│ │
│ 【gc current request】 │
│<-------------------------------------│
│ Node2が更新用にブロックを要求 │
│ │
│ 【gc buffer busy】 │
│(Node1がまだブロック使用中で返せない)│
│ │
▼ ▼
ブロック転送 → 遅延発生 → 待機イベントとして記録
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
🔹 代表的なgc待機イベントとその意味
| 待機イベント名 | 説明 |
|---|---|
gc cr request | 他ノードから読み取り用(クリーンな)ブロックを取得中 |
gc current request | 他ノードから更新用のブロックを取得中 |
gc buffer busy acquire | 他ノードでブロック取得競合中(相手が保持していて取得できない) |
gc buffer busy release | 他ノードがブロックをまだ解放していないため、返却待ち |
📉 gc待機が発生しやすい状況
- 複数ノードで同一ブロックにアクセス・更新する処理(例:単一行を全ノードで更新)
- ホットブロック(更新頻度が高いブロック)が集中している
- アプリケーションがノードをまたいで頻繁に同じ表を更新する
- データアクセスパターンがシーケンシャルでブロック争奪が発生している
✅ RAC移行前に確認すべきポイント
| 項目 | 確認内容 |
|---|---|
| アプリケーション構成 | 同時更新が分散されているか(ノード間ブロック競合の原因にならないか) |
| ネットワーク帯域・レイテンシ | インターコネクトの物理環境が十分か(最低でも1Gbps、理想は10Gbps) |
| ストレージ構成 | ASMや共有ストレージが構成済みか、または導入可能か |
| 運用体制 | CRSや複数ノードの管理体制が取れるか(障害時対応含む) |
| ライセンス | Oracle RACオプションがライセンスされているか |
🧠 RACを導入すべきケース
- ノード障害時の業務継続性が必須
- 数百〜数千の同時接続があり、負荷分散によるパフォーマンス向上が望ましい
- アプリケーションがノード単位で分散可能(ホットブロックが少ない)
- TAFやSCANなどのRAC向け接続方式を導入できる体制がある
- 十分なネットワーク設計・監視体制を構築できる
🚫 RACを導入しても効果が出にくいケース
- アプリケーションが頻繁に同一データにアクセスする
- スケールアウトよりもI/O性能がボトルネックである
- 管理体制が1人で構成されており、複雑な障害対応が難しい
- 専用インターコネクトを確保できない(例:VM環境でインターフェースが共有)
📝 まとめ
Oracle RACは、可用性・拡張性の面では非常に優れた構成ですが、シングル構成とは内部挙動も構成要素も大きく異なります。
特に、RACではgc系の待機イベントが性能に大きく影響する場合があり、これはシングル環境では起こり得ない通信オーバーヘッドです。
RACは「入れれば早くなる・止まらなくなる」という魔法の構成ではなく、アプリケーション構成・ネットワーク・運用体制が揃って初めて効果が発揮される構成です。
[参考]
Clusterware管理およびデプロイメント・ガイド
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?




コメント