パラレル処理でコア数を活かす!
CPUのコア数を生かすには、1つのSQL文を複数のプロセスで同時に処理することができるパラレル処理を活用したい。パラレル処理も、Oracle Exadataで頻繁に利用さている。「パラレル処理によって100近いコアをバランスよく使っているよい例だ」(柴田氏)。
パラレルと言うと、同時に複数のSQLが実行された際にそれぞれの並列度をどの程度減らすかを手動で調整する必要があるという課題があった。
「しかしOracle Database 11g R2からは、データベース側で最適な並列度に調整してくれるので、同時実行を気にせず、自動設定された並列度でそのまま運用できるようになった」(柴田氏)。
全てのクエリーに対して単一の並列度が最適とは限らない。この点がパラレルを難しくている要因だった。しかし11gR2以降では並列度をOracle自身が設定するため、パラレルを活用しやすくなっている。
ところで、パラレル・クエリーは、RAC環境で使うことでさらに効果を発揮する。1つのSQLを1台のノードで並列化するのが通常のパラレル・クエリーだが、RAC環境において、1つのSQLを複数のノードにまたがって並列化するのが、インターノード・パラレル・クエリーだ。
インターノード・パラレル・クエリーでは、常に複数インスタンで実行されるわけではない。インターコネクト上のトラフィックを最小限にするため、クエリー・スレーブ数が単一のインスタンス上では不足する場合、自動的に複数ノードのインスタンスを利用し、実行される。
ノード追加に伴いリニアに性能を向上させることができるのがインターノード・パラレル・クエリーだ。
「大規模グリッド環境におけるDWHシステムのスケールアウト検証報告」
「クエリーに限らず、InsertやUpdateでもパラレル処理が使えるのがOracle Databaseのメリットだ。実行計画取得、Data Pumpを利用したデータのインポート/エキスポート。外部表を利用したデータのローディング。これらも全部パラレルでできる。データウェアハウスでは、ぜひ積極的に使ってほしい」(柴田氏)。
オラクルエンジニア通信:「【セミナー資料】ここまでできる!! Oracle Databaseのパラレル処理」