PowerPoint Presentation

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

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

Oracle Database 12c

PowerPoint Presentation

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

津島博士のパフォーマンス講座

ORACLE PARTITIONING

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

Slide 1

PowerPoint Presentation

Slide 1

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

How to Use the PowerPoint Template

Null

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

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

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

#odddtky Oracle DBA & Developer Days 2014 for your Skill 使える実践的なノウハウがここにある 津島博士のパフォーマンス講座 SQL チューニングの基礎 日本オラクル株式会社データベース事業統括製品戦略統括本部データベースエンジニアリング本部 担

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

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

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

Oracle Data Pumpのパラレル機能

Make the Future Java FY13 PPT Template

MySQL研修コース & 資格のご案内

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

PA4

Slide 1

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

Oracle Database 12c Release 1 ( ) CoreTech Seminar

untitled

ORACLE TUNING PACK 11G

Title Slide with Picture

How to Use the PowerPoint Template

DBA & Developer Day 2016 ダウンロード資料

Amazon Redshift テーブル設計詳細ガイド –分散スタイルとソートキーの決定方法–

Oracle9i

Enterprise Cloud + 紹介資料

How to Use the PowerPoint Template

Oracle Code Tokyo 2017 ダウンロード資料

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

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

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

Title Slide with Picture

プレポスト【問題】

Oracle Database Technology Night ~ 集え! オラクルの力 ( チカラ ) ~ Oracle Database 18c テクノロジーシリーズ 4 Development と Performance 関連の機能強化 ~ Performance ~ 日本オラクル株式会社ソ

Slide 1

Null

Microsoft PowerPoint - 講義補助資料2017.pptx

Caché SQL に関するよくある質問

Calpont InfiniDBマルチUM同期ガイド

Presentation Title

リレーショナルデータベース入門 SRA OSS, Inc. 日本支社 Copyright 2008 SRA OSS, Inc. Japan All rights reserved. 1

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

untitled

Oracle Web CacheによるOracle WebCenter Spacesパフォーマンスの向上

How to Use the PowerPoint Template

リアルタイムSQL監視

Oracle Database Connect 2017 JPOUG

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

Oracle Business Rules

PowerPoint Presentation

このドキュメントに記載されている情報 (URL 等のインターネット Web サイトに関する情報を含む ) は 将来予告なしに変更することがあります このドキュメントに記載された内容は情報提供のみを目的としており 明示または黙示に関わらず これらの情報についてマイクロソフトはいかなる責任も負わないもの

Oracle DatabaseとIPv6 Statement of Direction

Oracle Text 概要

PowerPoint プレゼンテーション

Oracle Direct Seminar <Insert Picture Here> 試験対策ポイント解説 Bronze DBA11g 日本オラクル株式会社

<Insert Picture Here> 30 分で理解する ORACLE MASTER 日本オラクル株式会社 Oracle University

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

Microsoft PowerPoint pptx

標準化 補足資料

スライド 1

Oracle DatabaseとIPv6 Statement of Direction

目次 1 集計関数 / 分析関数とは 2 集計関数 / 分析関数のパフォーマンス効果 3 ケーススタディグループ小計やクロス集計を計算するランキングを表示する前月比較を表示する累計を計算する移動平均を計算する構成比を計算する Oracle8i SQL Oracle8i Oracle Oracle C

Chapter Two

Oracle Documents Cloud Service 企業利用に最も安全・安心なクラウドファイル同期・共有サービス

第 1 章 条件分岐 この章では 条件に応じて処理を分岐する方法について説明します 1. CASE 式で複雑な条件分岐を実現 2. 関数を使用した条件分岐 3. MERGE 文による条件に応じた DML の実行

PowerPoint プレゼンテーション

eラーニング資料 e ラーニングの制作目標 データベース編 41 ページデータベースの基本となる概要を以下に示す この内容のコースで eラーニングコンテンツを作成予定 データベース管理 コンピュータで行われる基本的なデータに対する処理は 次の 4 種類です 新しいデータを追加する 既存のデータを探索

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

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

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

PowerPoint Presentation

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

PowerPoint Presentation

Transforming Data Management

ORACLEデータベース10G データ・ポンプ: 超高速データ移動ユーティリティの基盤

ORION 終了に伴う Oracle Partner Store(OPS) 及び Oracle Store(OSR) での注文情報の参照方法について 2018 年 9 月 21 日 2018 年 10 月 3 日 Updated 日本オラクル株式会社カスタマーサポートサービス事業統括

Chapter Two

第 2 章 問合せの基本操作 この章では データベースから情報を検索する際に使用する SELECT コマンド および SELECT コマンドと 同時に使用する句について説明します 1. 問合せとは 2. 基本的な問合せ 3. 列の別名 4. 重複行を一意にする 5. 検索行の絞込み 6. 文字パター

MaxGauge_診断分析プロセス

Oracle BI Administration Tool を利用したリポジトリの作成

PowerPoint Presentation

Microsoft PowerPoint - db03-5.ppt

Basic descriptive statistics

Oracle Database 11g Direct NFS Client

Oracle Data Pumpのパラレル機能

PowerPoint Presentation

MogiExam 専門的な MogiExam は権威的な資料を提供します

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

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

Transcription:

シバタツ流! パラレル クエリーの徹底活用とチューニングの極意 日本オラクル株式会社テクノロジー製品事業統括本部基盤技術本部応用技術グループプリンシパルエンジニア柴田竜典

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

Program Agenda なぜ今パラレル実行なのか パラレル実行の実行計画を読もう チューニング ケーススタディ 3

シバタツって誰? 日本オラクル株式会社テクノロジー製品事業統括本部基盤技術本部応用技術グループプリンシパルエンジニア柴田竜典 Oracle Technology Network にて全 5 回で シバタツ流! DWHチューニングの極意 を連載 これを読めばDWHデザインを間違わない! すべての回に似顔絵がついている! シバタツ 検索 4

もう少しプロフィール Oracle Exadata リリース当初から お客様の SQL やデータを使用した PoC (Proof of Concept) を実施 本番稼働しているたくさんのシステムのパフォーマンス チューニングを経験 2010 年には米オラクルの開発部門の一員としてサンフランシスコのヘッド クォーターで勤務 米国のお客様の PoC を実施しつつ そこから見えてきた Oracle Database のパフォーマンス課題の解決に取り組む 5

なぜ今パラレル実行なのか 6

パラレル実行とは 1 個の SQL を複数プロセス ( 複数 CPU) で実行すること パラレル問合せ : SELECT 文をパラレルで実行する パラレルDML: INSERT... SELECT 文などのDMLをパラレルで実行する パラレルDDL: CREATE INDEX 文などのDDLをパラレルで実行する 多重実行 : 複数の SQL を複数プロセスで動かすこと パラレル実行 多重実行 7

どういうときにパラレル実行すべきか パラレル実行すべきとき 大量の行にアクセスする (= 大量データを処理する = CPUリソースが必要 ) 多重度が低い シリアル実行すべきとき 少数の行にしかアクセスしない 多重度が高い 8

なぜ今パラレル実行なのか Oracle7 でパラレル実行が可能に 10 年前くらいからデータウェアハウスでの Oracle 利用が増えてきたが IO ネックだったので CPU 使用率は性能に影響しなかった ここ数年で IO ネックを解消する方法ができ CPU を 1 個しか使わないと CPU ネックになってしまう状況が増えてきた Exadata フラッシュ ストレージ パラレル実行しないと性能が出ない 9

パラレル実行の実行計画を読もう 10

実行計画に書いてあるこれはなに? --------------------------------------------- ------------------------------ Id Operation Name TQ IN-OUT PQ Distrib --------------------------------------------- ------------------------------ 0 SELECT STATEMENT 1 PX COORDINATOR 2 PX SEND QC (RANDOM) :TQ10002 Q1,02 P->S QC (RAND) * 3 HASH JOIN BUFFERED Q1,02 PCWP 4 PX RECEIVE Q1,02 PCWP 5 PX SEND HASH :TQ10000... Q1,00 P->P HASH 6 PX BLOCK ITERATOR Q1,00 PCWC 7 TABLE ACCESS FULL CUSTOMERS Q1,00 PCWP 8 PX RECEIVE Q1,02 PCWP 9 PX SEND HASH :TQ10001 Q1,01 P->P HASH 10 PX BLOCK ITERATOR Q1,01 PCWC * 11 TABLE ACCESS FULL SALES Q1,01 PCWP --------------------------------------------- ------------------------------ 11

リアルタイム SQL 監視に書いてあるこれはなに? 12

Producer-Consumer パターン パラレル実行で使われているデザイン パターン Producer( 生産者 ) が作ったケーキをテーブルに置き Consumer( 消費者 ) がテーブルのケーキを食べる Producer Consumer 13

Producer-Consumer パターンのメリット Producer は生産することに Consumer は消費することに専念できる Producer が自分でケーキを食べると 食べている間に調理場が暇になる Producer の生産は Consumer の消費の遅れに影響しない テーブルがない状況で Consumer の消費が遅れると Producer はケーキを持って待っていないといけない 参考 : 結城浩 増補改訂版 Java 言語で学ぶデザインパターン入門マルチスレッド編 ( ソフトバンククリエイティブ ) 14

パラレル実行の Producer-Consumer パターン Producer Consumer & Producer Consumer 表 p000 p001 スレーブセット テーブル キュー (TQ) クエリー スレーブ () p002 p003 スレーブセット テーブル キュー (TQ) oracle クエリーコーディネーター (QC) 15

もう一度実行計画を見てみよう --------------------------------------------- ------------------------------ Id Operation Name TQ IN-OUT PQ Distrib --------------------------------------------- ------------------------------ 0 SELECT STATEMENT 1 PX COORDINATOR 2 PX SEND QC (RANDOM) :TQ10002 Q1,02 P->S QC (RAND) * 3 HASH JOIN BUFFERED Q1,02 PCWP 4 PX RECEIVE Q1,02 PCWP 5 PX SEND HASH :TQ10000... Q1,00 P->P HASH 6 PX BLOCK ITERATOR Q1,00 PCWC 7 TABLE ACCESS FULL CUSTOMERS Q1,00 PCWP 8 PX RECEIVE Q1,02 PCWP 9 PX SEND HASH :TQ10001 Q1,01 P->P HASH 10 PX BLOCK ITERATOR Q1,01 PCWC * 11 TABLE ACCESS FULL SALES Q1,01 PCWP --------------------------------------------- ------------------------------ 16

もう一度リアルタイム SQL 監視を見てみよう 17

TQ 列 フォーマット : Q${IDofQC},${IDofTQ} 例 )Q01,02 各ステップで処理された行が渡されるテーブル キューの ID テーブル キューは抽象概念 共有プールのメモリー上に読み取ったデータがコピーされ というような SGA を経由して 2 回コピーするような実装ではない 実際には各プロセスがそれぞれキューを持っており そこに置かれたデータをキュー リファレンスという番号を使ってリンクしている 読み取ったデータは各プロセスのPGAからPGAに直接コピーされる 18

IN-OUT 列 プロセス間通信しない方式 PCWP: Parallel Combined with Parent 次のステップも同一の が行なう PCWC: Parallel Combined with Child 前のステップと同一の が行なう プロセス間通信する方式 P->P: Parallel to Parallel が次のスレーブ セットにデータを送る P->S: Parallel to Serial が QC にデータを送る S->P: Serial to Parallel QCがにデータを送る このステップはシリアル実行 19

PQ Distrib 列 P->P での分散方式のみ抜粋 HASH 結合キーをハッシュ分散させて各 へ送る PART (KEY) パーティション キーで分散させて各 へ送る RANGE ソート キーで分散させて各 へ送る BROADCAST 表全体をすべての に送る 20

結合時の分散方式 PQ Distrib 詳細 21

HASH / RANGE / PART (KEY) 分散方式 大きい表と大きい表を結合するとき 100 人分の顧客名簿に載っている顧客からの売上げ明細 ( 全体で1 万件 ) を 10 人がかりで抽出するときどうするか? 顧客名簿を ア行で始まる人 カ行で始まる人 と 10グループに分ける 売上げ明細を 顧客名がア行で始まる人 顧客名がカ行で始まる人 と10グループに分ける メンバー Aはア行を担当する メンバー Bはカ行を担当する 作業を分割できる ( 重複データがない ) 22

BROADCAST 分散方式 大きい表と小さい表を結合するとき 3 人分の顧客名簿に載っている顧客からの売上げ明細 ( 全体で 1 万件 ) を 10 人がかりで抽出するときどうするか? 売上げ明細を無作為に 10 グループに分ける 全員が同じ顧客名簿を使って メンバー A は自分の担当分を担当する メンバー B は自分の担当分を担当する ハッシュ計算コストを省略できる 23

HASH 分散方式大きい表と大きい表を結合する場合 TQ, IN-OUT, PQ Distrib からこの図が書けるようになることがパラレル実行の理解のカギ! TQ0 TAB_A TQ2 TQ1 QC TAB_B HASH ハッシュ関数で分割して TQ に置く QC (RAND) 処理が終わった順に TQ に置く ハッシュの例奇数偶数 24

HASH 分散方式の実行計画例 SQL Text SELECT c.cust_email FROM sales s, customers c WHERE s.cust_id = c.cust_id AND s.amount_sold >= 1000 Execution Plan --------------------------------------------- ------------------------------ Id Operation Name TQ IN-OUT PQ Distrib --------------------------------------------- ------------------------------ 0 SELECT STATEMENT 1 PX COORDINATOR 2 PX SEND QC (RANDOM) :TQ10002 Q1,02 P->S QC (RAND) * 3 HASH JOIN Q1,02 PCWP 4 PX RECEIVE Q1,02 PCWP 5 PX SEND HASH :TQ10000... Q1,00 P->P HASH 6 PX BLOCK ITERATOR Q1,00 PCWC 7 TABLE ACCESS FULL CUSTOMERS Q1,00 PCWP 8 PX RECEIVE Q1,02 PCWP 9 PX SEND HASH :TQ10001 Q1,01 P->P HASH 10 PX BLOCK ITERATOR Q1,01 PCWC * 11 TABLE ACCESS FULL SALES Q1,01 PCWP --------------------------------------------- ------------------------------ 25

フル パーティション ワイズ結合 2 個の表が両方とも結合キーでパーティションされている場合 TAB_A TQ0 QC TAB_B QC (RAND) 処理が終わった順に TQ に置く パーティションされている = 分割済みなので 再分散しない 26

フル パーティション ワイズ結合時の実行計画例 SQL Text SELECT s.prod_id, c.unit_price FROM sales s, costs c WHERE s.prod_id = c.prod_id AND s.time_id = c.time_id AND s.promo_id = c.promo_id AND s.channel_id = c.channel_id AND s.amount_sold >= 1000 AND c.unit_price >= 1000 Execution Plan --------------------------------------------- ------------------------------ Id Operation Name TQ IN-OUT PQ Distrib --------------------------------------------- ------------------------------ 0 SELECT STATEMENT 1 PX COORDINATOR 2 PX SEND QC (RANDOM) :TQ10000 Q1,00 P->S QC (RAND) 3 PX PARTITION RANGE ALL... Q1,00 PCWC * 4 HASH JOIN Q1,00 PCWP * 5 TABLE ACCESS FULL COSTS Q1,00 PCWP * 6 TABLE ACCESS FULL SALES Q1,00 PCWP --------------------------------------------- ------------------------------ 27

PART (KEY) 分散方式パーシャル パーティション ワイズ結合 1 個の表だけが結合キーでパーティションされている場合 TQ1 TAB_A QC TAB_B TQ0 QC (RAND) 処理が終わった順に TQ に置く PART (KEY) パーティション キーごとに TQ に置く 28

PART (KEY) 分散方式の実行計画例 SQL Text SELECT s.prod_id, t.day_name FROM sales s, times t WHERE s.time_id = t.time_id AND s.amount_sold >= 1000 Execution Plan ------------------------------------------------ ------------------------------ Id Operation Name TQ IN-OUT PQ Distrib ------------------------------------------------ ------------------------------ 0 SELECT STATEMENT 1 PX COORDINATOR 2 PX SEND QC (RANDOM) :TQ10001 Q1,01 P->S QC (RAND) * 3 HASH JOIN Q1,01 PCWP 4 PX RECEIVE Q1,01 PCWP 5 PX SEND PARTITION (KEY) :TQ10000... Q1,00 P->P PART (KEY) 6 PX BLOCK ITERATOR Q1,00 PCWC 7 TABLE ACCESS FULL TIMES Q1,00 PCWP 8 PX PARTITION RANGE ALL Q1,01 PCWC * 9 TABLE ACCESS FULL SALES Q1,01 PCWP ------------------------------------------------ ------------------------------ 29

BROADCAST 分散方式大きな表と小さな表を結合する場合 TQ1 TAB_A QC TQ0 QC (RAND) 処理が終わった順に TQ に置く TAB_C BROADCAST コンシューマー数だけコピーして TQ に置く 30

BROADCAST 分散方式の実行計画例 SQL Text SELECT cu.cust_email FROM customers cu, countries co WHERE cu.country_id = co.country_id AND co.country_region = 'Asia' Execution Plan --------------------------------------------- ------------------------------ Id Operation Name TQ IN-OUT PQ Distrib --------------------------------------------- ------------------------------ 0 SELECT STATEMENT 1 PX COORDINATOR 2 PX SEND QC (RANDOM) :TQ10001 Q1,01 P->S QC (RAND) * 3 HASH JOIN Q1,01 PCWP 4 PX RECEIVE Q1,01 PCWP 5 PX SEND BROADCAST :TQ10000... Q1,00 P->P BROADCAST 6 PX BLOCK ITERATOR Q1,00 PCWC * 7 TABLE ACCESS FULL COUNTRIES Q1,00 PCWP 8 PX BLOCK ITERATOR Q1,01 PCWC 9 TABLE ACCESS FULL CUSTOMERS Q1,01 PCWP --------------------------------------------- ------------------------------ 31

HASH すべきなのに BROADCAST になっている よくあるパフォーマンス問題 3 人の顧客名簿だと思っていたのに 実は 1 万人の顧客名簿だった! 何が起きるか 重い作業が分割できない 大きな顧客名簿が重複コピーされるので 一次領域を大量に消費する なぜ起きるのか 統計情報の精度が悪い 32

適応計画 (Adaptive Plans) Oracle Database 12c の新機能 統計情報だけしか使えない実行計画作成時点では分散方法 ( や結合方法 ) を決定せず 実行時の行数を考慮して 分散方法 ( や結合方法 ) を実行時に決定する 行数が多ければ HASH 行数が少なければ BROADCAST 詳しくは <http://www.oracle.com/technetwork/jp/ondemand/db12c-perf-1985161-ja.pdf> 33

結合時の分散方式を手動で制御する PQ_DISTRIBUTE ヒント PQ_DISTRIBUTE(${ 内部表 } ${ 外部表の分散処理 } ${ 内部表の分散処理 }) HASH HASH HASH 分散 NONE NONE フル パーティション ワイズ結合 NONE PARTITION PARTITION NONE PART (KEY) 分散 NONE BROADCAST BROADCAST NONE BROADCAST 分散 34

パラレル実行時の GROUP-BY 35

シンプルな GROUP-BY スキャン担当 TQ0 GROUP-BY 担当 TQ1 TAB_A QC ここに注目! 6 個のデータが IPC されている 36

シンプルな GROUP-BY の実行計画例 SQL Text SELECT SUM(amount_sold) FROM sales GROUP BY prod_id Execution Plan ------------------------------------------------------------ ------------------------------ Id Operation Name Rows Bytes TQ IN-OUT PQ Distrib ------------------------------------------------------------ ------------------------------ 0 SELECT STATEMENT 72 648 1 PX COORDINATOR 2 PX SEND QC (RANDOM) :TQ10001 72 648 Q1,01 P->S QC (RAND) 3 HASH GROUP BY 72 648... Q1,01 PCWP 4 PX RECEIVE 918K 8075K Q1,01 PCWP 5 PX SEND HASH :TQ10000 918K 8075K Q1,00 P->P HASH 6 PX BLOCK ITERATOR 918K 8075K Q1,00 PCWC 7 TABLE ACCESS FULL SALES 918K 8075K Q1,00 PCWP ------------------------------------------------------------ ------------------------------ 37

GROUP-BY Pushdown GROUP-BY を 2 回行なう代わりに IPC 転送量が減る スキャン & GROUP-BY TQ0 再度 GROUP-BY TQ1 TAB_A QC 4 個のデータに IPC 量が減った 38

GROUP-BY Pushdown している実行計画例 SQL Text SELECT SUM(amount_sold) FROM sales GROUP BY prod_id Execution Plan ------------------------------------------------------------- ------------------------------ Id Operation Name Rows Bytes TQ IN-OUT PQ Distrib ------------------------------------------------------------- ------------------------------ 0 SELECT STATEMENT 72 648 1 PX COORDINATOR 2 PX SEND QC (RANDOM) :TQ10001 72 648 Q1,01 P->S QC (RAND) 3 HASH GROUP BY 72 648 Q1,01 PCWP 4 PX RECEIVE 72 648... Q1,01 PCWP 5 PX SEND HASH :TQ10000 72 648 Q1,00 P->P HASH 6 HASH GROUP BY 72 648 Q1,00 PCWP 7 PX BLOCK ITERATOR 918K 8075K Q1,00 PCWC 8 TABLE ACCESS FULL SALES 918K 8075K Q1,00 PCWP ------------------------------------------------------------- ------------------------------ 39

GROUP-BY Pushdown IPC 量が多いコストと 2 回 GROUP-BY するコストをオプティマイザが比較して自動で決定される マニュアルに載っていないヒント : GBY_PUSHDOWN / NO_GBY_PUSHDOWN RAC でインターノード パラレル実行するときに インターコネクト転送量を削減できる 大量の PGA 要求で一時領域読み書きが多いときにも有効 バッドノウハウ : DISTINCT は GROUP-BY Pushdown されないので GROUP-BY に書き換えると速くなることがある 40

チューニングケーススタディ パラレル問合せが終わらない! 41

リアルタイム SQL 監視のアクティビティ タブ 何の待機イベントもないのに CPU が並列度に達していない 何もしていない がある 並列度 42

リアルタイム SQL 監視のパラレル タブ 全体が 1.3 時間の状況で 56 秒しか掛かっていない から 1.2 時間も掛かっている まである データの分散が偏っている どのキーで偏っているのか? 43

リアルタイム SQL 監視の計画統計 44

問題の実行計画 ------------------------------------------------------------ ------------------------------ Id Operation Name TQ IN-OUT PQ Distrib ------------------------------------------------------------ ------------------------------ 0 SELECT STATEMENT 1 PX COORDINATOR 2 PX SEND QC (RANDOM) :TQ10005 Q1,05 P->S QC (RAND) 3 HASH GROUP BY Q1,05 PCWP 4 PX RECEIVE Q1,05 PCWP 5 PX SEND HASH :TQ10004 Q1,04 P->P HASH 6 HASH GROUP BY Q1,04 PCWP 7 VIEW Q1,04 PCWC 8 UNION ALL Q1,04 PCWP 9 HASH JOIN Q1,04 PCWP 10 JOIN FILTER CREATE :BF0001... Q1,04 PCWP 11 PART JOIN FILTER CREATE :BF0000 Q1,04 PCWP 12 PX RECIVE Q1,04 PCWP 13 PX SEND HASH :TQ10000 Q1,00 P->P HASH 14 PX BLOCK ITERATOR Q1,00 PCWC 15 TABLE ACCESS STORAGE FULL FOO Q1,00 PCWP 16 PX RECEIVE Q1,00 PCWP 17 PX SEND HASH :TQ10001 Q1,01 P->P HASH 18 JOIN FILTER USE :BF0001 Q1,01 PCWP 19 PX BLOCK ITERATOR Q1,01 PCWC 20 TABLE ACCESS STORAGE FULL BAR Q1,01 PCWP.. ------------------------------------------------------------ ------------------------------ 45

問題の実行計画を図解 ココの結合キーと GROUP-BY キーは同じ スキャン TQ0 赤グループが偏っていたので 問題点はココ FOO p000 p001 BF 作成 & 結合 & GROUP-BY p024 TQ4 GROUP-BY p000 TQ5 スキャン & BF 使用 p000 TQ1 p025 p001 BAR p001 GROUP-BY Pushdown QC HASH 46

SELECT 文を確認 結合キーは YMD,P_CD つまり 赤グループは YMD,P_CD でハッシュ分割されている 次の青グループは YMD,S_KBN でハッシュ分割されている SELECT... FROM ( SELECT... FROM foo f INNER JOIN bar b ON f.ymd = b.ymd AND f.p_cd = b.p_cd WHERE f.k_cd = 27 AND f.flag = 0 AND f.s_kbn IN (1, 2, 3) UNION ALL... ) iv GROUP BY iv.ymd, iv.s_kbn 47

YMD,P_CD の偏り各 YMD,P_CD の組合せが全体の何パーセントを占めるか % 20 1248 通りの組合せの内 6 通りだけが極端に多い 15 10 5 0 YMD,P_CD の組合せハッシュ値 48

数量が多い上位 6 個の P_CD だけ別に実施する チューニング策 SELECT... FROM foo f INNER JOIN bar b ON f.ymd = b.ymd AND f.p_cd = b.p_cd WHERE f.k_cd = 27 AND f.flag = 0 AND f.s_kbn IN (1, 2, 3) AND (f.ymd, f.p_cd) IN ( (20131101, 3), (20131104, 71), (20131104, 612), (20131108, 18), (20131108, 2), (20131114, 287) ) UNION ALL... UNION ALL SELECT... FROM foo f INNER JOIN bar b ON f.ymd = b.ymd AND f.p_cd = b.p_cd WHERE f.k_cd = 27 AND f.flag = 0 AND f.s_kbn IN (1, 2, 3) AND (f.ymd, f.p_cd) NOT IN ( (20131101, 3), (20131104, 71), (20131104, 612), (20131108, 18), (20131108, 2), (20131114, 287) ) UNION ALL... 49

まとめ データの流れを意識する : PQ Distrib の気持ちになる IPC( プロセス間通信 ) を意識する : GROUP-BY Pushdown の気持ちになる 上記をていねいに意識することで パラレル実行のチューニングの糸口が見えてくる 50

付録 A: SH スキーマ図 COSTS PRODUCTS PROMOTIONS TIMES CHANNELS SALES CUSTOMERS COUNTIRES 51

付録 B: SH スキーマの各表の行数 表名 行数 備考 CHANNELS 5 COUNTRIES 23 PROMOTIONS 503 TIMES 1,826 CUSTOMERS 55,500 COSTS 82,112 TIME_ID 列でレンジ パーティション SALES 918,843 TIME_ID 列でレンジ パーティション 52

53

54