ここまでできる!! Oracle Databaseのパラレル処理

Similar documents
Oracle Data Pumpのパラレル機能

ORACLE PARTITIONING

Agenda パラレル実行の概要と効果 11g R1までのパラレル実行にまつわる懸念点 簡単設定で解決!! Oracle Database 11g R2のパラレル化 まとめ 2

Oracle Data Pumpのパラレル機能

今さら聞けない!? Oracle入門 ~前編~

はじめに コースの概要と目的 Oracle をより効率的に使用するための SQL のチューニング方法について説明します また 索引の有無 SQL の 記述方法がパフォーマンスにどのように影響するのかを実習を通して理解します 受講対象者 アプリケーション開発者 / データベース管理者の方 前提条件 S

今さら聞けない!? Oracle入門 ~後編~

第 5 章 結合 結合のパフォーマンスに影響を与える結合の種類と 表の結合順序について内部動作を交えて 説明します 1. 結合処理のチューニング概要 2. 結合の種類 3. 結合順序 4. 結合処理のチューニングポイント 5. 結合関連のヒント

第 7 章 ユーザー データ用表領域の管理 この章では 表や索引を格納するユーザー データ用表領域の作成や 作成後のメンテナンスに ついて解説します 1. ユーザー データ用表領域の管理概要 2. ユーザー データ用表領域作成時の考慮事項 3. ユーザー データ用表領域の作成 4. ユーザー データ

ORACLE TUNING PACK 11G

Oracle Database 10g Release 2を使用したデータベース・パフォーマンス

Oracle 入門 ~ 研修受講後のスキルアップサポート ~ 対応バージョン :Oracle 10gR1 ~ 12cR1 本資料は アシスト Oracle 研修をご受講いただいたお客様からのご質問や 研修ではご案内できなかった情報などを FAQ にまとめたものです 研修受講後のスキルアップの一助とし

自己管理型データベース: 自動SGAメモリー管理

Microsoft PowerPoint - J-S301167_idx_comp.ppt [互換モード]

Oracle Advanced Compression:ディスクの節約とデータベースの高速化を可能にする包括的な圧縮機能

今さら聞けない!?大規模テーブルのパフォーマンスチューニング ~パーティショニング~

A. 前ページからの続きです DBMS_SPACE.UNUSED_SPACE の各パラメータの意味 segment_owner = オブジェクトの所有者 segment_name = オブジェクト名 segment_type = オブジェクトタイプ total_blocks = セグメント合計ブロッ

Oracle Real Application Clusters 10g: 第4世代

データセンターの効率的な資源活用のためのデータ収集・照会システムの設計

PowerPoint プレゼンテーション

Oracle Database 12cでのパラレル実行の基本

Oracle SQL Developerの移行機能を使用したOracle Databaseへの移行

< 写真欄 > 11g R2 Real Application Clusters スキルチェック ポイント解説

第 3 章代表的なチューニングポイント 3 Q. ストアド プロシージャを使用した SQL 共有率の向上 A. ストアド プロシージャを使用した場合 同じストアド プロシージャを実行する複数のユーザーが 同じ共有 PL/SQL 領域を使用します また ストアド プロシージャは解析済みで格納されている

PostgreSQL SQL チューニング入門 ~ Explaining Explain より ~ 2012 年 11 月 30 日 株式会社アシスト 田中健一朗

以下の事項は 弊社の一般的な製品の方向性に関する概要を説明するものです また 情報提供を唯一の目的とするものであり いかなる契約にも組み込むことはできません 以下の事項は マテリアルやコード 機能を提供することをコミットメント ( 確約 ) するものではないため 購買決定を行う際の判断材料になさらな

Slide 1

Microsoft Word - nvsi_050110jp_netvault_vtl_on_dothill_sannetII.doc

Oracle Un お問合せ : Oracle Data Integrator 11g: データ統合設定と管理 期間 ( 標準日数 ):5 コースの概要 Oracle Data Integratorは すべてのデータ統合要件 ( 大量の高パフォーマンス バッチ ローブンの統合プロセスおよ

Enterprise Cloud + 紹介資料

内容 Visual Studio サーバーエクスプローラで学ぶ SQL とデータベース操作... 1 サーバーエクスプローラ... 4 データ接続... 4 データベース操作のサブメニューコンテキスト... 5 データベースのプロパティ... 6 SQL Server... 6 Microsoft

ERDAS IMAGINE における処理速度の向上 株式会社ベストシステムズ PASCO CORPORATION 2015

はじめに NEC と日本オラクル社は NEC のブレードサーバーシステム SIGMABLADE-H を利用し Linux プラットフォーム上で OracleRAC11g Release2 との組み合わせで線形な性能向上が可能であることを実証しました 本資料ではその検証結果について述べます 今回は 検

Title Slide with Picture

PowerPoint プレゼンテーション

Oracle Database In-Memory 高可用性ベスト・プラクティス

PowerPoint Presentation

Microsoft Word - nvsi_090200jp_r1_nvbsvr_mscs.doc

ExadataのHybrid Columnar Compression (HCC)

Oracle Database 11gにおけるパーティション化

PowerPoint Presentation

Oracle Warehouse Builder: 製品ロードマップ

Oracle Solaris 仮想環境とプロビジョン環境の構築

Postgres Plus Advanced Server 9.3パーティションテーブルの特徴と性能検証レポート

Oracle Database 12c Release 1 ( ) CoreTech Seminar

アジェンダ ORACLE MASTER Oracle Database 11g 概要 11g SQL 基礎 Ⅰ 試験紹介 ポイント解説 Copyright 2011 Oracle. All rights reserved. 2

MaxGauge_診断分析プロセス

WebSAM Storage ReplicationNavigator WebSAM Storage ReplicationNavigator Oracle RAC Option 本製品を販売する場合 事前に下記問い合わせ先へご連絡をお願いします < 問い合わせ先 > 8. 問い合わせ窓口 を参照し

【Cosminexus V9】クラウドサービスプラットフォーム Cosminexus

Title Slide with Picture

アジェンダ Oracle サーバの見える化はなぜ必要? WebSAMApplicationNavigator で簡単 安心に監視を実現 Oracle 監視の導入コスト 2 NEC Corporation 2009

How to Use the PowerPoint Template

目次 はじめに... 2 無料トライアルのサインアップ方法... 3 トライアル環境へのアクセス 参考情報

スライド 1

Null

10年オンプレで運用したmixiをAWSに移行した10の理由

Agenda Oracle Database の概要 Oracle Databaseの内部構造 Oracle Databaseの処理の仕組み Oracle Database の管理 メモリの管理 領域の管理 Oracle Database の運用ポイント ( 概要 ) データベースの起動と停止 デー

OWI(Oracle Wait Interface)の概要

PowerPoint Presentation

第 3 章 メディア障害とバックアップ リカバリ この章では メディア障害の発生に備えたバックアップ方法と 障害時の基本的なリカバリ方法につい て説明します 1. メディア リカバリ概要 2. ファイルの多重化 3. アーカイブ モードの設定 4. バックアップ概要 5. 一貫性バックアップ ( オ

Oracle Database 11g Direct NFS Client

意外と簡単!?Oracle Database 10g Release2 - データベース構築から運用まで - データベースの運用 - チューニング編 (Windows 版 ) Creation Date: Nov 2, 2005 Last Update: Nov 2, 2005 Version: 1

CLUSTERPRO MC ProcessSaver 1.2 for Windows 導入ガイド 第 4 版 2014 年 3 月 日本電気株式会社

( 目次 ) 1. はじめに 開発環境の準備 仮想ディレクトリーの作成 ASP.NET のWeb アプリケーション開発環境準備 データベースの作成 データベースの追加 テーブルの作成

Transcription:

<Insert Picture Here> ここまでできる!! Oracle Database のパラレル処理 日本オラクル株式会社テクノロジー製品事業統括本部アライアンス技術本部データベース製品技術部

以下の事項は 弊社の一般的な製品の方向性に関する概要を説明するものです また 情報提供を唯一の目的とするものであり いかなる契約にも組み込むことはできません 以下の事項は マテリアルやコード 機能を提供することをコミットメント ( 確約 ) するものではないため 購買決定を行う際の判断材料になさらないで下さい オラクル製品に関して記載されている機能の開発 リリースおよび時期については 弊社の裁量により決定されます Oracle は 米国オラクル コーポレーション及びその子会社 関連会社の米国及びその他の国における登録商標または商標です その他の名称はそれぞれの会社の商標の可能性があります 2

Agenda 最新 CPUとデータベースシステム クエリーのパラレル化 パラレルクエリー RACでのパラレルクエリー パラレルとパーティション メンテナンス / データロードのパラレル化 Datapumpのパラレル化 統計取得のパラレル化 まとめ 3

近年の CPU はマルチコア化 最近の CPU 関連に関する話題 2010/3/29 AMD は世界初の 12 コア /8 コア搭載 x86 プロセッサー AMD Opteron 6000 Series を発表 http://www.amd.com/jp/press-releases/pages/amd-sets-the-new-standard-29mar2010.aspx 2010/3/31 Intel は Intel Xeon 7500 番台 を発表 1 チップ当たり最大 8 コア内臓 Hyper-Threading 機能搭載 http://www.intel.com/jp/intel/pr/press2010/100331a.htm 果たしてデータベースシステムでは CPU の性能を使いこなせているのだろうか? 4

マルチコア化とデータベースの性能 Oracle Direct のパフォーマンスクリニックの現状 CPU を追加すれば 性能問題は解決? CPU がボトルネックだったケースは わずか 9%( 弊社統計 *) マルチコアを使いきることができていない 性能ボトルネックの原因の傾向 CPU:9% ストレージ I/O: 43% 非効率な SQL 文 索引の設計等 :48% * データ :Oracle Direct が直近で実施したパフォーマンスクリニック http://www.oracle.com/lang/jp/direct/service/pc.html 5

データベースアクセスとサーバープロセス クライアントの接続に対して 一つのサーバープロセスが生成される 専用サーバー構成の場合 SQL はサーバープロセスが処理を行う PGA SP データへのアクセス方法 基本は以下の2パターン 全表スキャン 索引アクセス SGA SP Server Process 6

CPU 使用率 シリアル実行では 待ち時間に比例して CPU 使用率は低下 大量データの検索によりディスク I/O 待ちなど より短時間にデータを検索できれば CPU 使用率は高くなる キャッシュヒット率の向上 OLTP 系システムでのチューニング キャッシュヒット率が向上しない DWH 系システムのクエリー 処理 A ディスク読み込み待ち 処理中 処理 A ディス待クち読み込み 処理中 処理 B ディス待クち読み込み 処理中 時間 7

Oracle Database での検索行を特定する 該当する行を表の最初から最後まで検索する 表フルスキャン 表フルスキャンでは 表の行数の増加に比例して 実行時間も増加してしまう SELECT 列 2, 列 3, 列 4 FROM 表 1 WHERE 列 1 = 値 8

行を短時間で特定する索引の使用 索引を使用することで 表フルスキャンよりもはるかに尐ないブロック数へのアクセスで済む SELECT 列 2, 列 3, 列 4 FROM 表 1 WHERE 列 1 = 値 キー値を昇順でソート済 キー値 ROWID キー値 ROWID キー値 ROWID B*Tree 索引 表 9

複数の行にアクセスする B*Tree 索引は範囲検索は得意 SELECT 列 2, 列 3, 列 4 FROM 表 1 WHERE 列 1 = 値 BETWEEN 値 1 AND 値 2 キー値を昇順でソート済 キー値 ROWID キー値 ROWID キー値 ROWID B*Tree 索引 表 10

さらに多くの行にアクセスする 索引ブロック 表ブロックのアクセス 一般的に 1 つの SQL が 10%~20% 以上の行数にアクセスするならば表フルスキャンのほうが高速 とされている 11

索引アクセス 10%~20% の行にアクセスすると 1 つのブロックには複数の行が格納されている 仮に アクセスする行が均等に分散しているとすると ほとんどのブロックにアクセスすることになる ディスク I/O の最小単位は データブロック 1 行読むのにも 1 ブロックを取得する 索引データブロック 表データブロック 12

アクセスコストが逆転する 1 つの SQL が多くの行にアクセスする場合 > 索引ブロック 索引アクセス ( ランダムアクセス ) 表ブロック 表ブロック 表フルスキャン ( シーケンシャルアクセス ) 13

表フルスキャンを早くする サーバ プロセス サーバ プロセス 単一プロセスでの処理を分割して実行 サーバ プロセス パラレル処理 サーバ プロセス 表ブロック 表フルスキャン ( シリアル処理 ) 表ブロック 表フルスキャン ( パラレル処理 ) 14

Oracle Database でできるパラレル処理 検索処理のパラレル化 パラレルクエリー メンテナンス / データロードのパラレル化 パラレル DDL/ パラレル DML バックアップの取得のパラレル化 Datapump のパラレル化 統計情報の取得のパラレル化 DBMS_STATS パッケージの Parallel 実行 15

Agenda 最新 CPUとデータベースシステム 検索処理のパラレル化 パラレルクエリー RACでのパラレルクエリー パラレルとパーティション メンテナンス / データロードのパラレル化 Datapumpのパラレル化 統計取得のパラレル化 まとめ 16

パラレルクエリーパラレルクエリーとは 単一のクエリーを複数プロセスを使用して実行する機能 Oracle Database Enterprise Edition の標準機能 アプリケーションからは透過的 クエリーコーディネータ (QC) とクエリースレーブプロセス (QS) QC: クエリーの解析 並列度の決定 QS へ命令を出す QS:QC からの命令に基づき 実際に処理を実行する SP QS QS QS 17

パラレルクエリーパラレル度の向上による高速化 パラレル度を X 倍すれば実行時間も約 1/X 倍になる ( リソースが許す限り ) ディスク I/O が激しい DWH 系のクエリに対して非常に有効 SP QS QC QC QS QS QS QS QS シリアル実行 2 パラレル実行 4 パラレル実行 18

スレーブプロセスのデータ読み込みの方法 スキャン範囲の担当を動的に決定する 各スレーブ プロセスは 異なるブロックを担当 スレーブ プロセスの実行時間を均等にする QS QC QS スキャン対象のセグメント 並列度で分割さらに分割大きなブロックから処理 19

パラレルクエリーでのデータアクセスダイレクト パス リード メモリサイズとアクセスするデータ量の関係 メモリサイズ < パラレルクエリーがアクセスするデータ量 キャッシュされたデータがすぐにキャッシュアウトされてしまう可能性 キャッシュ管理のオーバーヘッドが無駄に生じてしまう パラレルクエリー実行時には Direct Path Read によるアクセス メモリ上のデータへのアクセスをバイパス アクセスしたデータをメモリ上にキャッシュをしない キャッシュ管理のオーバーヘッドの削減 QC QS QS 20

パラレル化のアーキテクチャー クエリ コーディネータ (QC) パラレル問合せを発行したセッションのサーバ プロセス 問合せを解析し 並列度を決定し クエリ スレーブにパラレル処理の命令を出す クエリ スレーブ (QS) バックグラウンド プロセスのパラレル実行サーバ (Pxxx) パラレル化された処理を実施 メッセージ バッファ プロセス間の通信 データのやりとりで使用 デフォルトでは 共有プールからパラレル実行バッファが割り当てられる SGA_TARGET が設定されている場合 ラージプールから割り当てられる QC テーブル キュー QS P0002 QS P0000 QS P0003 テーブル キュー QS P0001 ソート スキャン スレーブ セット 21

パラレル化のアーキテクチャー テーブル キュー (TQ) QC と QS または QS 同士がプロセス間でデータの受渡しを実装している構造の総称 プロデューサー : 実行計画中のある処理を実行して TQ に結果を送るプロセス コンシューマー : TQ からデータを取得して処理を行うプロセス ある QS がタイミングによってはプロデューサーの役割を担い 別のタイミングではコンシューマの役割を担う スレーブセット : 同一のオペレーションをパラレルに実行する QS のグループ QC テーブル キュー QS P0002 QS P0000 QS P0003 テーブル キュー QS P0001 ソート スキャン スレーブ セット 22

パラレルクエリーでの結合処理プロデューサー & コンシューマモデル SELECT c.cust_name, s.date, s.amount FROM sales s, customers c WHERE s.cust_id = c.cust_id; QC 4. Consumer は QC に結果を返す QS4 QS5 QS6 QS7 3. Consumer はハッシュジョインを実行 QS0 QS1 QS2 QS0 QS1 QS2 2. Producer のセットから Consumer のセットに行が渡される 1. パラレルサーバープロセスが (Producer) が Customer 表と sales 表を検索 Full table scan (customer 表 ) QS3 QS3 Full table scan(sales 表 ) 23

並列度 ( パラレル度 ) の決定 並列度 その処理で使用するスレーブ プロセスの個数 並列度の指定 表 索引のパラレル属性で定義 パラレルクエリー有効化時に指定 ヒント句にて指定 Oracle Databaseによる自動設定 11g R2 新機能 24

パラレル化の方法 表や索引に対してパラレル属性を定義する create table tablename parallel 4; alter session force parallel でセッションに対して設定する alter session force parallel query parallel 4; -- 実行するクエリー -- ヒント句を SQL に埋め込む select /* parallel (emp) */ * from emp; 初期化パラメータを変更する alter system set parallel_degree_policy=limited; または alter system set parallel_degree_policy=auto; 25

11g R2 新機能自動並列度設定 従来のパラレル度設定 最適なパラレル実行のためには コストがかかる 全てのクエリーに対して 単一のパラレル度が最適とは限らない それぞれのクエリーに対して 最善のパラレル度を設定 データ量の増減に合わせたパラレルどの設定 DBA の大きな負担 コストが高いクエリーの調査 調整? Oracle Database 11g R2 以降 最適なパラレル実行の容易な実行 クエリーの特性に合わせた最適なパラレル度の設定 Oracle 自身がパラレル度を設定する DBA の負担の大幅な削減 初期化パラメータの設定のみ 26

自動パラレル度設定設定方法 PARALLEL_DEGREE_POLICY で設定 PARALLEL_DEGREE_POLICY=LIMITED もしくは AUTO に設定 alter session 文もしくは alter system 文で変更可能 alter system 文での変更 alter system set parallel_degree_policy=auto scope=both; alter session 文での変更 alter session set parallel_degree_policy=auto; 27

自動パラレル度設定動作概要 自動パラレル度設定の動作概要は以下の通り SQL 実行 SQL 文が解析され シリアルでの実行計画を作成 推定した実行時間を閾値と比較 オプティマイザが最適な DOP を決定 長い場合 短い場合 シリアルで実行 適用される DOP = MIN( デフォルト DOP, 最適な DOP) パラレルで実行 28

Agenda 最新 CPUとデータベースシステム クエリーのパラレル化 パラレルクエリー RACでのパラレルクエリー パラレルとパーティション メンテナンス / データロードのパラレル化 Datapumpのパラレル化 統計取得のパラレル化 まとめ 29

RAC 環境でのパラレルクエリー SQL を並列化することで ノード追加による性能向上が可能 1つのSQLを内部的に並列化 Parallel Query/DML/DDL 1つのSQLを複数ノードで並列化 Internode Parallel Query/DML/DDL 並列度は CPU 数や負荷状況等に依存 通常のパラレルクエリー インターノードパラレルクエリー QC QC QS1 QS2 QS1 QS2 QS3 QS4 30

RAC 環境でのパラレルクエリー 基本的には 単一インスタンス上で実行される インターコネクト上のトラフィックを最小限にするため QS 数が単一インスタンス上では足りない場合 複数ノードのインスタンスを利用し 実行される 例 : 単一インスタンス上で起動できる QS が 2 の場合 パラレル度 4 のクエリー QC QC QS1 QS2 QS1 QS2 QS3 QS4 31

Internode Parallel Query による性能向上 http://www.nec.co.jp/middle/oracle/gc1.html Internode Parallel Query 機能により ノード追加に伴い性能が向上することを実証 32

RAC サービスとパラレルクエリー RAC サービスと組み合わせることで QS が起動するインスタンスを調整可能 srvctl add service d dwhvm -s ETL_SERVICE -n dwhvm1,dwhvm2 srvctl add service d dwhvm -s AHOC_SERVICE -n dwhvm3,dwhvm4 ETL_SERVICE ADHOC_SERVICE 33

パラレルクエリーに関する昨今の課題 課題 パラレルクエリーを利用した際の性能の伸び悩み 背景 ユーザーが所持するデータ量の大容量化 CPUの大幅な性能向上と低価格化 サーバーに搭載可能なメモリの大容量化と低価格化 旧世代のハードウェアに最適化されたままのアーキテクチャ 34

パラレル実行による SQL の高速化検証結果 (CPU 使用率 ) Parallel 実行の場合でも ストレージの I/O 性能がボトルネックとなり CPU リソースを使い切れていない Time 35

11g R2 新機能 In-Memory Parallel Query 概要 パラレルクエリー実行時の メモリ使用効率の最適化 パラレルクエリーでもバッファ キャッシュを利用可能に パラレルクエリー実行時 メモリ上にキャッシュされたセグメントにアクセス キャッシュされたデータはユーザー間で共有され クエリレスポンスを高速化 メモリや CPU リソースを有効活用 QS1 QC QS2 設定方法 PARALLEL_DEGREE_POLICY を AUTO に設定する 36

In-Memory Parallel Query 複数インスタンスの SGA 利用 複数インスタンスの SGA を利用してデータをキャッシュ RAC 環境では 複数インスタンスのSGAを利用可能 インスタンス全体でメモリ空間を有効活用できる 複数インスタンスにセグメントを分散してキャッシュ可能 SGA + SGA + SGA インスタンス 1 インスタンス 2 インスタンス 3 37

In-Memory Parallel Query 動作概要 In-Memory Parallel クエリーの動作概要は以下の通り SQL 実行 参照される表のサイズを特定する 表が適した大きさの場合 表を各インスタンスに分散し バッファキャッシュに読み込む 表が非常に小さい場合 表が非常に大きい場合 QC QS1 QS2 いづれかのインスタンスのバッファキャッシュから読み込み 常に Direct Path Read で読み込みを行う スレーブプロセスはメモリ上のデータにアクセスする 38

In-Memory Parallel Query メリットとオーバーヘッド 高速化のためには メモリへの読み込みが必要 最初のアクセス時にバッファ キャッシュ上へデータを読み込む 多尐のオーバーヘッドが生じる その後のクエリーの高速化により オーバーヘッドは相殺される 大量のデータに複数回アクセスする処理に非常に効果的 データをメモリへキャッシュするためのオーバーヘッド 実行時間 In-Memory Parallel Query により高速化される部分 従来のパラレルクエリ 1 回目の In-Memory Parallel Query 2 回目以降の In-Memory Parallel Query 39

In-Memory Parallel Query クエリー実行時間のイメージ 処理時間の変化のイメージ In-Memory Parallel Query を利用した場合の処理時間のイメージ キャッシュするデータ量が多くなるほど In-Memory Parallel Query によるメリットは大きくなる In-Memory Parallel Query が有効な範囲 バッファ キャッシュの 80% 実行時間 一定サイズ以上のデータ量になると Direct Path Read によるアクセスを行う バッファキャッシュ上からデータを読み込むことで クエリの実行時間を短縮 : 従来のパラレルクエリー データ量 :1 回目の In-Memory Parallel クエリー :2 回目の In-Memory Parallel クエリー 40

In-Memory Parallel Query と他の機能の組み合わせ RAC との組み合わせ バッファ キャッシュのサイズを増やすことにより キャッシュ可能なデータ量を増やす データ圧縮との組み合わせ データサイズを圧縮することで 圧縮率に応じてキャッシュできるデータ量を増やす バッファ キャッシュの 80% バッファ キャッシュの 80% SGA + SGA SGA データ圧縮 41

In-Memory Parallel Query の効果検証結果 ( レスポンスタイム ) 10X 40X 42

In-Memory Parallel Query の効果検証結果 (CPU 使用率 ) ストレージのボトルネックが解消することで 搭載されている CPU コアのフル活用が可能となり SQL の高速化を実現 Time 43

検証結果 Oracle Grid Center での検証結果 パートナー様との共同検証センターである Oracle Grid Center では In-Memory Parallel Query に関して様々な検証を実施 新日鉄ソリューションズ株式会社様 Oracle Database 11g R2 Real Application Cluster 上での In- Memory Parallel Query による効率的なリソース活用 http://www.oracle.co.jp/solutions/grid_center/nssol/pdf/wp-impq-gridcenternssol_v1.0.pdf 日本電気株式会社様 Oracle Database 11g R2 In-Memory Parallel Query による NEC Express5800/ スケーラブル HA サーバー上での Data Warehouse システム全体の性能向上 http://www.nec.co.jp/middle/oracle/wp-impq-gridcenter-nec.pdf * 50 音順 44

Agenda 最新 CPUとデータベースシステム クエリーのパラレル化 パラレルクエリー RACでのパラレルクエリー パラレルとパーティション メンテナンス / データロードのパラレル化 Datapumpのパラレル化 統計取得のパラレル化 まとめ 45

アクセスコストが逆転する 1 つの SQL が多くの行にアクセスする場合 > 索引ブロック 索引アクセス ( ランダムアクセス ) 表ブロック 表ブロック 表フルスキャン ( シーケンシャルアクセス ) 46

高速化のアイデア 一定のルールに従って表のデータを寄せる パーティション表 索引アクセス 表フルスキャン 47

パラレルクエリーとパーティション パーティションとは 表や索引を内部的に分割する機能 分割しても 一つの表 として扱われる SQLなどの処理単位が扱うデータ量の削減 Oracle Database Enterprise Editionの有償オプション 48

パーティションのメリット SQL 実行の高速化 パーティション単位のデータアクセス メンテナンス時間の短縮 パーティション単位でのメンテナンス パーティション単位でのバックアップ取得 可用性の向上 障害の局所化 分割してもアプリケーション SQL は変更不要 49

パーティション単位のデータアクセス パーティション パラレル処理 複数パーティションを並列処理 パーティション ワイズ ジョイン パーティション単位でジョイン パーティション プルーニング 必要なデータを持つパーティションにのみアクセス 50

インデックスとパーティション プルーニング フルテーブルスキャンと比較して どちらもアクセスブロック数を減らす効果がある SQL チューニングの基本は アクセスするブロック数を減らす こと インデックス パーティション プルーニング 表 インデックス 取り出す行数が尐ない場合に大きな効果 パーティション表 取り出す行数が多い場合に大きな効果 51

パーティション プルーニング 1 日単位でレンジ パーティションした表 保持日数によらず 今日 1 日分の処理は 1 日分のパーティションへのアクセス 100 日分 200 日分 フルスキャンの 1/100 フルスキャンの 1/200 52

パーティション プルーニングとパラレルクエリー 処理時間 オリジナル パーティション プルーニング パーティション プルーニング + パラレルクエリー Oracle はパーティション プルーニングしてから並列化する 53

スレーブプロセスのデータ読み込みの方法パーティション表の場合 パーティション表に対してのアクセス方法 スレーブプロセスは各パーティションもしくはサブパーティション全体を処理 スキャン範囲の担当は動的には決定されない QC QS0 2010 年 4 月 QS1 2010 年 5 月 54

大量の行を処理する パーティション プルーニングによる絞込み 大量の行を持つ表をジョインする 55

パーティション表同士のジョイン同じパーティション方式 かつパーティション キー同士 パーティション キー同士のジョインなら 結合対象の行がある対象パーティションを特定できる 小さな表のジョインに分解 表パーティション SELECT FROM 表 1, 表 2 WHERE 表 1. 列 1 = 表 2. 列 1 パーティションを特定 同じパーティション方式表 1 表 2 56

フル パーティション ワイズ ジョイン同じパーティション方式 かつパーティション キー同士 フル パーティション ワイズ ジョインとパラレルクエリー 各スレーブプロセスごとにジョインを並列実行実行可能 小さな表のジョインに分解 QS QS QS QC QS 表 1 表 2 同じパーティション方式 57

RAC でフル パーティション ワイズ ジョイン同じパーティション方式 かつパーティション キー同士 ノード毎にパーティションのジョインを割り当てる 小さな表のジョインに分解 QS QS QS QS QS QC QS QS 表 1 表 2 同じパーティション方式 QS RAC ノード 58

フル パーティション ワイズ ジョインできない場合同じパーティション キー同士でジョイン可能とは限らない 同じパーティション キー同士のジョイン フル パーティション ワイズ ジョイン 列 1 列 2 列 3 列 4 列 1 列 2 列 3 列 4 表 1 表 2 パーティション キー パーティション キー パーティション キーが異なるジョイン パーシャル パーティション ワイズ ジョイン 列 1 列 2 列 3 列 4 表 3 パーティション キー 59

パーシャル パーティション ワイズ ジョイン パーシャル パーティション ワイズ ジョイン 一方の表を再パーティション化する フル パーティション ワイズ ジョインと同じメモリ上で行を再配分 QS QS QC QS QS 表 1 表 3 パーティション キーが異なる 60

Agenda 最新 CPUとデータベースシステム クエリーのパラレル化 パラレルクエリー RACでのパラレルクエリー パラレルとパーティション メンテナンス / データロードのパラレル化 Datapumpのパラレル化 統計取得のパラレル化 まとめ 61

パラレル DDL 非パーティション表に対して可能なパラレル処理は以下の 3 つ create index create table as select alter index rebuild パーティション表に対して可能なパラレル処理は以下の 4 つ create index create table as select alter table move/split/coalesce partition alter index rebuild/split partition メンテナンス作業の高速化を実現可能 62

DDL のパラレル化の方法 1. パラレル DDL を有効化させる alter session enable parallel ddl; 2. DDL 文をパラレル化させる 各 DDL 文のパラレル化は次頁以降で紹介 create index / alter index rebuild / alter index rebuild partition の場合 パラレル属性として定義される 並列度の決定 alter session force parallel ddl parallel integer によって指定可能 alter session force parallel ddl parallel 6; オブジェクトで定義する 63

パラレル DDL のポイント - その 1 パラレル create index / alter index rebuild のルール パラレル化の方法 パラレル句 create index ind_test on test(col1) parallel 4; ALTER SESSION FORCE PARALLEL DDL 文によってパラレル化 alter session force parallel ddl parallel 6; create index ind_test on test(col1) ; 表スキャン操作は対応する create / rebuild 処理と同じ並列度 並列度が指定されていない場合 CPU 数に基づきパラレル度が自動で調整 64

パラレル DDL のポイント - その 2 パラレル MOVE/SPLIT PARTITION のルール パラレル MOVE PARTITION / SPLIT PARTITION のルール パラレル句 create index ind_test on test(col1) parallel 4; ALTER SESSION FORCE PARALLEL DDL 文によってパラレル化 alter session force parallel ddl parallel 6; alter table move partition partition_name スキャン操作は対応する MOVE / SPLIT 操作と同じ並列度 並列度が指定されていない場合 CPU 数に基づきパラレル度が自動で調整 QS QS QS QS 65

パラレル DDL のポイント - その 3 create table as select のルール create 部分 パラレル句 create table tmp_test parallel 4 as select * from test; ALTER SESSION FORCE PARALLEL DDL 文によってパラレル化 alter session force parallel ddl parallel 6; create table tmp_test as select * from test; 全表スキャン / 複数パーティション及び index range scan で実行される場合 select 部分もパラレル化される 66

パラレル DDL のポイント - その 3 create table as select のルール select 部分 create 部分に parallel 句が指定されている create table tmp_test parallel 4 as select * from test; select 部分にパラレルヒントが含まれる create table tmp_test as select /*+ parallel (test,4) */ * from test; 参照する表にパラレル属性が定義されている alter table test parallel 4; create table tmp_test as select * from test; create 操作がパラレル化される場合 select 操作もパラレル化される ただし 以下の場合はパラレル化されない select 文に NO_PARALLEL ヒント create table tmp_test parallel 4 as select /*+ no_parallel */ * from test; 非パーティション表の索引がスキャンされる 67

検証結果パラレル DDL によるインデックス作成の高速化 パラレル DDL を利用することで 煩わしいメンテナンス作業も高速化可能 2x 2x 10x 68

パラレル DML パラレル DML(PARALLEL INSERT/UPDATE/DELETE および MERGE) 大規模オブジェクトにアクセスする DWH/DSS 環境に有効 パラレル設定のオーバーヘッドが生じるため OLTP 系システムには向かない ただし OLTP システムで実施されるバッチ処理には効果的 69

パラレル DML の設定方法 DML 実行前に パラレル DML を有効化する alter session enable parallel dml; 上記 SQL を実行しない場合 DML 文に PARALLEL ヒントを設定しても パラレル化されない ただし DML 文に問い合わせ処理が入っている場合 その部分のみはパラレル化される 並列度の決定 以下の優先順位で決定する DML 文のパラレル ヒントに指定されている値 alter session enable parallel dml parallel 文で指定した値 表作成時に指定したパラレル度 70

update/merge/delete のルール パラレル化されるのは以下のいずれかの場合 alter session enable parallel dml 文が発行されている 更新 / 削除される表の定義でパラレル句を指定されている alter table test parallel 4; update test set col2=100 where col1 between 100 and 500; Update/merge/delete 文でパラレル ヒントを有効化する update /*+ parallel */ test set col2=100 where col1 between 100 and 500; 71

Insert select のルール 検索表と挿入表それぞれのアクセスに対してパラレル度を指定可能 ( パラレル DML の有効化が前提 ) 検索表 文での SELECT パラレル ヒントの指定 選択対象表の定義でのパラレル句の指定 挿入表 文での INSERT パラレル ヒントの指定 挿入対象表の定義でのパラレル句の指定 72

パラレル DML の高速化 以下の方法を用いることで パラレル DML の高速化が可能 /*+ append */ ヒント句を用いる キャッシュをバイパスして 直接データファイルに書き込み ダイレクトパスインサート /*+ nologging */ ヒント句を用いる REDO 生成量を抑制する 73

ダイレクトパスインサートの領域確保 ダイレクトパスインサートでは High Water Mark(HWM) 以降からデータの書き込みが行われる ダイレクト ロード INSERT(INSERT /*+ APPEND */ INTO SELECT ;) パラレル INSERT CREATE TABLE <table_name> AS SELECT; HWM を引き下げるためには 以下の処理を行う Alter table move( セグメントの再作成 ) Shrink space( セグメントの縮小 ) HWM QS1 QS2 QS3 QS4 未使用領域 (DELETE で発生 ) 使用領域 新規使用領域 ダイレクトパスインサートでは HWM 以降を利用 74

Agenda 最新 CPUとデータベースシステム クエリーのパラレル化 パラレルクエリー RACでのパラレルクエリー パラレルとパーティション メンテナンス / データロードのパラレル化 Datapumpのパラレル化 統計取得のパラレル化 まとめ 75

Datapump とは Datapump とは Oracle Database 10g 以降で利用可能なユーティリティーツール Oracle Database 9i までの exp/imp にさらなる付加機能を持つ新たな機能 特徴 データおよびメタデータの高速なロード アンロード Exp/imp に比べて 数倍高速 Exp/imp と同等の機能と さらなる付加機能 パラレル処理 外部表など 76

Datapump のパラレル化 Datapump の PARALLEL オプションで使用する WORKER プロセスの数を指定する マスター制御プロセスは加算されない 実行例 expdp user1/xxxx tables=batch_tbl parallel=3 DUMPFILE=dpbatch%U.dmp DIRECTORY=dp_dir; DP JOB Master Worker Worker Worker 77

Datapump パラレル化のポイント - その 1 PARALLEL 句に指定する値は ダンプ ファイル セット内のファイル数以下にする もしくはダンプファイル指定に置換変数を指定する必要がある Worker プロセスが 1 つのダンプ ファイルに対して排他的アクセスを行うため DP JOB expdp user1/xxxx tables=batch_tbl parallel=3 DUMPFILE=dpbatch1.dmp,dpbatch2.dmp DIRECTORY=dp_dir; Master Worker Worker Worker ファイルの競合により一部の Worker プロセスがアイドル状態になるため パフォーマンスの向上が見込みにくい dpbatch1.dmp dpbatch2.dmp ファイル セットの値を置換変数化するなどして対処 78

Datapump パラレル化のポイント - その 2 11g R1 までの制限事項 : DataPump ジョブを実行できるのは RAC 環境の場合でも 1 インスタンスのみ Worker プロセスが起動されるのはジョブが実行されているインスタンス上のみ Oracle Database 11g R2 より DataPump ジョブを RAC 環境の複数のインスタンスで同時に実行することが可能 並列実行により より短時間で処理が完了 ワーカープロセスを複数ノードで起動 Cluster/Service_name パラメータで制御 Oracle Database Enterprise Edition で使用可能 79

Datapump の RAC 対応 CLUSTER パラメータ ( デフォルト :Y) RAC のリソースを使用できるか Worker プロセスを他の RAC インスタンス上でも開始できるかどうかを指定 Datapump ジョブが大きい ( 大きな表にアクセスする ) 場合に効果的 特定の RAC サービスを指定したい場合 以下の SERVICE_NAME パラメータも合わせて指定する SERVICE_NAME パラメータ Workerプロセスが起動するノード (RACサービス) を指定する CLUSTER=Yとともに使用することが可能 CLUSTER=Nの場合 このパラメータは無視される 80

複数ノードでの DataPump 並列実行 [oracle@node1]$ expdp user1/xxxx tables=batch_tbl parallel=3 service_name='batch' DUMPFILE=dpbatch%U.dmp DIRECTORY=dp_dir [oracle@node4]$ expdp user2/xxxx tables=hr_tbl parallel=2 service_name='hr' DUMPFILE=dphr%U.dmp DIRECTORY=dp_dir Service : batch Service : hr Worker Worker Worker Worker Worker Master DP JOB Master DP JOB 81

その他 Datapump のパラレル化についてのポイント RAC 環境で Datapump を実行する場合 ディレクトリ オブジェクトのパスをクラスタ ファイルシステム上に配置する SERVICE_NAME パラメータで指定できるのは ジョブを開始する Worker プロセスを起動するノードのみ Master プロセスはあくまでも接続されたノードで起動される 82

Agenda 最新 CPUとデータベースシステム クエリーのパラレル化 パラレルクエリー RACでのパラレルクエリー パラレルとパーティション メンテナンス / データロードのパラレル化 Datapumpのパラレル化 統計取得のパラレル化 まとめ 83

オプティマイザ統計情報とは Oracle Database における統計情報 表統計情報 行数 ブロック数 行の平均の長さ 列統計情報 列内の個別値数 列内の NULL 数 データ配分 ( ヒストグラム ) など 索引統計情報 リーフ ブロック数 クラスタ化係数 システム統計情報 I/O パフォーマンス CPU パフォーマンス オプティマイザはこれらの統計情報を元に 実行計画を作成 正確な統計情報を取得することは最適なパフォーマンスを得るために必要 84

オプティマイザ統計情報の取得方法 Oracle Database 9i 以降 DBMS_STATS パッケージの登場 Oracle Database 8i までは analyze コマンドによる取得 課題 : シリアル実行のため 遅い 速度向上のため サンプリング率を減らす 正確な統計情報との差 Oracle Database 10g 以降 DBMS_STATS パッケージの使用を推奨 以下の用途には 引き続き analyze 文を使用可能 VALIDATE / LIST CHAINED ROWS 句を使用する場合 空きリスト ブロックの情報を収集する場合 85

( 参考 )DBMS_STATS パッケージの統計収集プロシージャ プロシージャ名 GATHER_INDES_STATS GATHER_TABLE_STATS GATHER_SCHEMA_STATS GATHER_DICTIONARY_STATS GATHER_DATABASE_STATS 収集対象索引統計表 列及び索引の統計スキーマ内の全てのオブジェクトの統計すべてのディクショナリ オブジェクトの統計データベース内の全てのオブジェクトの統計 86

統計情報の取得のパラレル化 DBMS_STATSプロシージャのDEGREE 句で指定する 統計情報取得のパラレル化ができないオブジェクト クラスタ索引 ドメイン索引 ビットマップ ジョイン索引など 実行例 execute dbms_stats.gather_table_stats( test, TEST_TBL degree => 4) ; 87

統計情報の取得のパラレル化 Tips DEGREE 句は DBMS_STATS.AUTO_DEGREE に設定することをお薦め AUTO_DEGREE に指定することで オブジェクトのサイズ及び初期化パラメータの設定に基づいて Oracle Database 側で適切な並列度を選択する 88

Agenda 最新 CPUとデータベースシステム クエリーのパラレル化 パラレルクエリー RACでのパラレルクエリー パラレルとパーティション メンテナンス / データロードのパラレル化 Datapumpのパラレル化 統計取得のパラレル化 まとめ 89

まとめ CPU はマルチコア化 高速化 しかし CPU を使いきれていないという現実 特にシリアル処理では顕著に表れる Oracle Database でのパラレル処理 Oracle Database Enterprise Edition の標準機能 パラレルクエリー パラレル DDL/DML Datapump のパラレル実行 統計情報取得のパラレル化 Oracle Database Enterprise Edition によりマルチコア CPU の性能向上を享受可能!! 90

関連する初期化パラメータ パラメータ名デフォルト値説明 PARALLEL_MAX_SERVERS CPU_COUNT PARALLEL_THREADS_ PER_CPU および PGA_AGGREGATE_TA RGET の値から導出 1 インスタンスで起動できる QS プロセスの最大数 PARALLEL_MIN_SERVERS 0 インスタンス起動時に作成される QSの数 PARALLEL_DEGREE_POLICY MANUAL Oracle Database 11g R2のパラレ ル実行に関する新機能の制御 PARALLEL_EXECUTION_MESSAGE_SIZE 16384 パラレル実行時に使用される メッセージサイズ PARALLEL_MIN_PERCENT 0 パラレル実行時のQS 要求数の 最小割合 PARALLEL_MIM_TIME_THRESHOLD AUTO (10 秒 ) 自動並列度によるパラレル実行対象判別の閾値 PARALLEL_THREADS_PER_CPU 2 パラレル実行中にCPUが処理でき るQSの数 91

参考資料 Oracle Database パフォーマンス チューニング ガイド http://download.oracle.com/docs/cd/e16338_01/server.112/b56312/toc.htm Oracle Database VLDB およびパーティショニング ガイド http://download.oracle.com/docs/cd/e16338_01/server.112/b56316/toc.htm Oracle Database ユーティリティ http://download.oracle.com/docs/cd/e16338_01/server.112/b56303/toc.htm Oracle Database SQL 言語リファレンス http://download.oracle.com/docs/cd/e16338_01/server.112/b56299/toc.htm Oracle Database PL/SQL パッケージ プロシージャおよびタイプ リファレンス http://download.oracle.com/docs/cd/e16338_01/appdev.112/b56262/toc.htm 92

94