[B15] HiRDBのSQL実行プランはどのように決定しているのか?by Masaaki Narita

2,921 views

Published on

Published in: Technology

[B15] HiRDBのSQL実行プランはどのように決定しているのか?by Masaaki Narita

  1. 1. HiRDBのSQL実行プランはどのようにHiRDBのSQL実行プランはどのように 決定しているのか? 株式会社 日立製作所 情報・通信システム社 2014/06/18 株式会社 製作所 情報 通信 テ 社 ITプラットフォーム事業本部 開発統括本部 ソフトウェア開発本部 DB設計部 成田 正亮 © Hitachi, Ltd. 2014. All rights reserved. 成田 正亮
  2. 2. 本日のテーマ HiRDB初期バージョンから進化し続け ている SQL実行プラン/SQL実行時ている、SQL実行プラン/SQL実行時 動作の根幹部分を紹介致します。 © Hitachi, Ltd. 2014. All rights reserved. 1
  3. 3. 目次目次 1. HiRDBとは? 2 SQL実行プラン2. SQL実行プラン 3. フロータブルサーバ 4. プロセス間のDBデータ転送 5. LIMIT処理 © Hitachi, Ltd. 2014. All rights reserved. 2
  4. 4. 目次目次 1. HiRDBとは? 2 SQL実行プラン2. SQL実行プラン 3. フロータブルサーバ 4. プロセス間のDBデータ転送 5. LIMIT処理 © Hitachi, Ltd. 2014. All rights reserved. 3
  5. 5. 1.1 HiRDBについて 「止めない」設計思想を貫く「止めない」設計思想を貫く 高信頼ノンストップデータベース高信頼ノンストップデータベース高信頼ノンストップデ タベ ス高信頼ノンストップデ タベ ス 社会基盤を支えるために 日立が自社開発にこだわり続ける純国産RDBMS日立が自社開発にこだわり続ける純国産RDBMS ハイアールディービー Highly Scalable Relational DataBase 今まで培った信頼性をベースに クラウド時代を支える「ワンランク上の」 データベースを目指します © Hitachi, Ltd. 2014. All rights reserved. 4 デ タベ スを目指します。
  6. 6. 1.2 HiRDBの歴史 オープンシステムで進化 ’14 超高速データ ベースエンジン 進化 ■クラウド時代を支える 高性能 高信頼デ タベ スへ メインフレーム(MF)での発展 XDM/RD V12 ’10/1 ’10/4 Hitachi Advanced Data Binder技術の継承 ’03 HiRDB V8 ’03/8 ■ ビジネスの急速な変化に対応する 柔軟性を兼ね備えた、情報統合基盤と 高信頼ノンストップデータベースへ XDM/RD V11 ’05/1 ’06/6 高性能・高信頼データベースへ HiRDB V6 ■ネットビジネス(24×7運用) に応える長時間連続運転の更なる強化 ■ ノンストップビジネスに応える 耐障害性と可用性を追及 ’01 XDM/RD V9 ’02/9 HiRDB V7XDM/RD V10 XDM/RD 技術の継承 HiRDB V2~5 ■ミッションクリティカル向け機能・性能強化 ■デジタルコンテンツの拡張 ・Universal Server リリース に応える長時間連続運転の更なる強化 ’94 ’95~’99 PDM ADM XDM/SD RDB1 HiRDB V1 ■オープンシステム向けミッションクリティカル向けデータベース ・Shared Nothingでのパラレルサーバ リリース 94 © Hitachi, Ltd. 2014. All rights reserved. 5 1970 1990 2000 2010 PDM 時代
  7. 7. 目次目次 1. HiRDBとは? 2 SQL実行プラン2. SQL実行プラン 3. フロータブルサーバ 4. プロセス間のDBデータ転送 5. LIMIT処理 © Hitachi, Ltd. 2014. All rights reserved. 6
  8. 8. 2.1 SQL最適化とは? インデクスを使用すれば必ずコストが良いのか? コスト インデクススキャンの コスト遷移 インデクスを使用しない方 がコストが小さい場合も! コスト テーブルスキャンの コスト遷移 インデクスを使用した 方がコストが小さい場 合はこの範囲! ヒット率 100%0 条件にもよるが 10数%が境目 合はこの範囲! 100%0 テーブルスキャンを 選択するケース インデクススキャンを 選択するケース選択するケ ス © Hitachi, Ltd. 2014. All rights reserved. 7
  9. 9. 2.2 SQL実行プラン決定方法 ~ ルールベース ~ ルールベース インデクスの定義情報,SQLの指定内容に基づいて,プロ ダクションルール従って, SQLの各部分ごとにSQL実行プダクションル ル従って, SQLの各部分ごとにSQL実行プ ランを選択していくことによってSQL全体を最適化。 インデクス定義 CREATE UNIQUE INDEX インデクス1 ON 表1(列1,列2) SQLSQL SELECT 列1,列2,列3 FROM 表1 WHERE 列1=値 and … ORDER BY 列1,列2 規則Aに従って プランA-1を選択 規則Bに従って プランB-3を選択 規則Cに従って プランC-5を選択 © Hitachi, Ltd. 2014. All rights reserved. 8
  10. 10. 2.3 SQL実行プラン決定方法 ~ コストベース ~ コストベース 幾つかのアクセス手順の候補を生成し,SQL実行プラン の各候補ごとにコスト(処理負荷)を計算・比較することに よ て 採用するSQL実行プランを決定よって,採用するSQL実行プランを決定 アクセス手順1 インデクスAを使用して・・・ リソースA負荷:1234 リソースB負荷:2345 アクセス手順2 インデクスB,Cを使用して リソースA負荷:4321 リソースB負荷:1111 比較 アクセス手順3 インデクスを使用せずに・・・ リソースA負荷:5555 リソースB負荷:9999 © Hitachi, Ltd. 2014. All rights reserved. 9
  11. 11. 2.4 HiRDBのSQL実行プラン決定方法 HiRDBが採用している方式は? V1(1994年)からコストベース方式を採用! ルールベース(既定値)+リアルコストベースル ル ス(既定値)+リアルコスト ス ハイブリッド方式! © Hitachi, Ltd. 2014. All rights reserved. 10
  12. 12. 2.5 コスト計算に使用する値 コスト計算に使用している主項目は? ・表の情報 ・CPU単価 ・ロック処理単価 ・インデクスの情報 ・I/O単価 ・サーバ数 ・列の情報 ・通信単価 ・ヒット率 など・列の情報 ・通信単価 ・ヒット率 など インデクス 表/列 インデクスA~D 表A 列A 列B イ デク E H 表B 列C 列D インデクスE~H 表B © Hitachi, Ltd. 2014. All rights reserved. 11
  13. 13. 2.6 コスト計算に使用する値 ~ 表の情報 ~ 表の情報で使用している値は? ・行数 ・格納ページ数 など ペ ジ 物理構造 データベー スの入出力 表 表A ページ ページA ペ ジB スの入出力 最小単位 行数 ページC ページB ページ数 ページD © Hitachi, Ltd. 2014. All rights reserved. 12
  14. 14. 2.7 コスト計算に使用する値 ~ インデクスの情報 ~ インデクスの情報で使用している値は? ・異なるキー値の個数 ・インデクスページ数 ・インデクスの段数・インデクスの段数 ・行データのシーケンシャル度 など 重複が インデクス インデクスA b b d d インデクスキー値 異なるキー値の個数 重複が 少ないと インデクスの効 果が高い! インデクスの段数 a b b c c c d d e 行データの ページ ページA 行デ タの シーケンシャル度 行データ d d e a b b c c c ジA ページB ページ数 © Hitachi, Ltd. 2014. All rights reserved. 13
  15. 15. 2.8 コスト計算に使用する値 ~ 列の情報① ~ 列の情報で使用している値は? ・異なる値の個数 ・重複値の個数の最小数 ・重複値の個数の最大数・重複値の個数の最大数 ・ナル値の個数 次ページに続く 列A 列B 列C 列D ・・・ ・・・ ・・・ 1 ・・・ ・・・ ・・・ 2 重複値の 個数の最小数 異なる値の ・・・ ・・・ ・・・ 1 ・・・ ・・・ ・・・ 3 ・・・ ・・・ ・・・ 2 ・・・ ・・・ ・・・ 4 重複値の 個数の最大数 異なる値の 個数 ・・・ ・・・ ・・・ 4 ・・・ ・・・ ・・・ 2 ・・・ ・・・ ・・・ 2 ・・・ ・・・ ・・・ NULL ナル値の個数 © Hitachi, Ltd. 2014. All rights reserved. 14 ・・・ ・・・ ・・・ NULL
  16. 16. 2.9 コスト計算に使用する値 ~ 列の情報② ~ 列の情報で使用している値は? ・値の分布情報 など 区間内の 値の個数 区間内の 異なる データ件数を基に、最大分割数nで区間分割 を行い、区間内の値の個数/異なる値の個数 を分布情報化 異なる 値の個数 区件数 列値の 最小値 列値の 最大値 区 間 件数 値 最大値 区 間 区 間 区 間 区 間 区 間 区 間 区 間 区 間 区 間 区 間 区 間 区 間 ・・・ © Hitachi, Ltd. 2014. All rights reserved. 15 間 1 間 2 間 3 間 4 間 5 間 6 間 n-5 間 n-4 間 n-3 間 n-2 間 n-1 間 n
  17. 17. 2.10 コスト計算に使用する値 ~ 区間分布情報 ~ 重複データが多い場合は? 隣合う区間の全キー値が一つの場合、一区間に纏める ・分布情報容量圧縮 探索範囲削減 全て同一の値 一区間に纏める ・探索範囲削減 件数 件数件数 件数 異なる 値の個数は全て1 異なる 値の個数は1のまま 値 区 間 区 間 区 間 区 間 区 間 区 間 値 区 間 区 間 区 間 区 間 © Hitachi, Ltd. 2014. All rights reserved. 間 1 間 2 間 3 間 4 間 5 間 6 16 間 1 間 2 間 3 間 4
  18. 18. 2.11 コスト計算に使用する値 ~ ヒット率 単一条件時 ~ 分布情報をどのように使用するのか? 各区間内のインデクスキー値数、及び重複数を基に、 SQLに指定した条件のヒット率を計算(仮定)。 SQL例) SELECT 列1,列2,列3 FROM 表1 WHERE 列1=‘HiRDB’ デ タ‘HiRDB’が存在する区間 ‘HiRDB’のデ タ件数は ‘HiRDB’のヒ ト率は 件数 データ‘HiRDB’が存在する区間 ・値の個数:100 ・異なる値の個数:20 全データ件数 ‘HiRDB’のデータ件数は 100/20=5件と仮定 ‘HiRDB’のヒット率は 5/10000=0.05% 件数 全データ件数 10000 100 ヒット率が低いと インデクスを使用 値 区 間 区 間 区 間 区 間 区 間 区 間 区 間 区 間 区 間 区 間 区 間 区 間 ・・・ インデクスを使用、 ヒット率が高いと インデクス未使用 © Hitachi, Ltd. 2014. All rights reserved. 値間 1 間 2 間 3 間 4 間 5 間 6 間 95 間 96 間 97 間 98 間 99 間 100 17
  19. 19. 2.12 コスト計算に使用する値 ~ ヒット率 複数条件時 ~ 条件を複数指定している場合は? 条件式が互いに独立と仮定して、個別にヒット率を計算 SQL例) SELECT 列1 列2 列3 FROM 表1 WHERE 列1 ‘HiRDB’ AND 列2 ‘HITACHI’ ‘HiRDB’& ‘HITACHI’では SELECT 列1,列2,列3 FROM 表1 WHERE 列1=‘HiRDB’ AND 列2=‘HITACHI’ 件数 100 列1の区間分布情報 ‘HiRDB’のヒット率が0.05% HITACHI では 0.0005% 値 区 区 区 区 区 区 区 区 区 区 区 区 ・・・ 100 値 区 間 1 区 間 2 区 間 3 区 間 4 区 間 5 区 間 6 区 間 95 区 間 96 区 間 97 区 間 98 区 間 99 区 間 100 件数 列2の区間分布情報 ‘HITACHI’のヒット率が1% 値 ・・・ 100 定義しているインデクス の中で、一番ヒット率が 低いインデクスを採用 定義しているインデクス の中で、一番ヒット率が 低いインデクスを採用 列1、列2を含んで定義し ているインデクスの中か ら、ヒット率が一番 デ © Hitachi, Ltd. 2014. All rights reserved. 18 値 区 間 1 区 間 2 区 間 3 区 間 4 区 間 5 区 間 6 区 間 95 区 間 96 区 間 97 区 間 98 区 間 99 区 間 100 低いインデクスを採用低いインデクスを採用 低いインデクスを採用
  20. 20. 2.13 コスト計算に使用する値 ~ 区間分布情報 ~ HiRDBが最も精度を高められるケースは? 区間分割数が「100」の場合! ⇒ヒット率精度誤差0.5%以内を保証 精度誤差が発生するケース: 全データが1000件 (‘a’が1件 ’b’が999件) 分布上は1データ あたりの件数は データ数は 990件 種類数は( a が1件、 b が999件) ⇒’a’のヒット率は1/1000=0.1% あたりの件数は データ/重複数=10/2=5件 種類数は ’b’1件 区間分布情報を使うと・・・ ⇒’a’のヒット率は5件/1000=0.5% データ数は10件 値 区 区 データ数は10件 種類数は’a’’b’2件 © Hitachi, Ltd. 2014. All rights reserved. 19 間 1 間 2 19
  21. 21. 2.14 算出しているコスト ~ 種類 ~ 算出しているコストの種類は? ・CPUコスト ・I/OにかかるCPUコスト I/O スト など・I/Oコスト など サーバマシンCPUコスト I/Oコスト DB I/OにかかるCPUコスト © Hitachi, Ltd. 2014. All rights reserved. 20
  22. 22. 2.15 算出しているコスト ~ 計算式 ~ 計算式は? インデクススキャンコストの計算式概要は下記 CPUコストCPUコスト (インデクスヒット率,行数,プロセス数,インデクス段数 などから算出) +I/OにかかるCPUコスト (インデクスヒット率,行数,プロセス数,クラスタ率 などから算出) I/O ト+I/Oコスト (ランダムI/O時間(インデクス段数 などから算出) +ブロックI/O時間(インデクスページ数 などから算出)) © Hitachi, Ltd. 2014. All rights reserved. 21
  23. 23. 2.16 SQLの世界の最適化項目 SQLの世界の最適化対象項目 ・表、インデクス、列・・・ ・データ格納ページ数、インデクスキー格納ページ数・・・ ・異なる値のデータ個数、分布情報・・・ SQLの世界以外SQLの世界以外 (マシン構成)の 最適化対象項目は?最適化対象項目は? © Hitachi, Ltd. 2014. All rights reserved. 22
  24. 24. 2.17 HiRDBシステムの構成① HiRDBの構成は? サーバマシン ■ HiRDB/シングルサーバ ■ HiRDB/パラレルサーバ(Shared-Nothing) 特定のデータは 特定のサーバで参照 DB サーバマシン クライアント 定 参 DB DB クライアント クライアント DB DBクライアント クライアント • 1台のサーバマシン上で動作 • 構築が容易、運用もシンプル • 1台のサーバマシン上で動作 • 構築が容易、運用もシンプル • 複数台のサーバマシン上で動作 • 並列処理が可能 • 複数台のサーバマシン上で動作 • 並列処理が可能 © Hitachi, Ltd. 2014. All rights reserved. 23 • スケールアップも可能• スケールアップも可能 • スケールアップとスケールアウトが可能• スケールアップとスケールアウトが可能
  25. 25. 2.18 HiRDBシステムの構成② DBデータの処理方法は? サーバマシン ■ HiRDB/パラレルサーバ(Shared-Nothing) ケース1: 1つのサ バのデ タのみ 使用していない このマシンを有効活 用すると DB 1つのサーバのデータのみ 参照するケース 用すると・・・ DB クライアント ケース1: 複数のサーバのデータを ケース2: 複数のサーバのデータを 必要なデータのみ 転送すると・・・ DB クライアント 複数のサ バのデ タを 参照するケース 複数のサ バのデ タを 参照するケース(結合検索/ソート処理等) マシン構成の世界の 検索したデータをいずれかの サ バに転送し結合処理を行う マシン構成の世界の 最適化対象項目 ・結合/ソート処理サーバ (フロータブルサーバ)の決定 結合処理 © Hitachi, Ltd. 2014. All rights reserved. 24 サーバに転送し結合処理を行う (フ タブルサ )の決定 ・サーバ間のデータ転送方法の決定
  26. 26. 目次目次 1. HiRDBとは? 2 SQL実行プラン2. SQL実行プラン 3. フロータブルサーバ 4. プロセス間のDBデータ転送 5. LIMIT処理 © Hitachi, Ltd. 2014. All rights reserved. 25
  27. 27. 3.1 HiRDBシステムの構成(再掲) HiRDBの構成は? サーバマシン ■ HiRDB/シングルサーバ ■ HiRDB/パラレルサーバ(Shared-Nothing) 特定のデータは 特定のサーバで参照 DB サーバマシン クライアント 定 参 DB DB クライアント クライアント DBクライアント クライアント • 1台のサーバマシン上で動作 • 構築が容易、運用もシンプル • 1台のサーバマシン上で動作 • 構築が容易、運用もシンプル • 複数台のサーバマシン上で動作 • 並列処理が可能 • 複数台のサーバマシン上で動作 • 並列処理が可能 © Hitachi, Ltd. 2014. All rights reserved. 26 • スケールアップも可能• スケールアップも可能 • スケールアップとスケールアウトが可能• スケールアップとスケールアウトが可能
  28. 28. 3.2 データ取出サーバでのSQL処理 データ取出サーバでSQL処理を行う場合 サーバマシン データ取出 ソート処理 DB データ取出サーバでI/Oお よびソート処理を行ってい る最中 処理なしサーバ クライアント る最中に、 処理を行わないサーバが 存在するケースあり処理なしサーバクライアント ソート処理 処理なしサ バ クライアント DB データ取出 © Hitachi, Ltd. 2014. All rights reserved. 27
  29. 29. 3.3 フロータブルサーバ フロータブルサーバとは? 負荷が高い結合処理、 サーバマシン データ取出 負荷が高い結合処理、 ソート処理用に 割り当てるサーバ DB 結合処理 クライアント ソート処理 データ配置によらず クライアント 結合処理 負荷が低いサーバに 処理を任せる! 負荷が低いサーバに 処理を任せる! デ タ配置によらず サーバ間の負荷を 均等にできる クライアント DB データ取出 © Hitachi, Ltd. 2014. All rights reserved. 28
  30. 30. 3.4 割り当て方式の種類 ~ 専用サーバ ~ 専用サーバ割り当て方式 サーバマシン データ取出 データ取出用以外のDB デ タ取出用以外の サーバを候補に 割り当て クライアント フロータブルサーバ クライアント フロータブルサーバ データ取り出し量が 多い場合にサーバ間の クライアント DB データ取出 多い場合にサ バ間の 負荷分散効果大 © Hitachi, Ltd. 2014. All rights reserved. 29
  31. 31. 3.5 割り当て方式の種類 ~ 全サーバ ~ 全サーバ割り当て方式 サーバマシン データ取出 フロータブルサーバ兼務 DB 全サーバを 候補に割り当て クライアント フロータブルサーバ クライアント フロータブルサーバ ソート/結合処理の並列 処理効果大 クライアント DB 処理効果大 データ取出 © Hitachi, Ltd. 2014. All rights reserved. 30 フロータブルサーバ兼務
  32. 32. 3.6 フロータブルサーバの決定方法 フロータブルサーバの決定方法は? ・台数決定方法 ⇒データ取出サーバ/フロータブルサーバ間での負荷分 散・並列実行度を考慮し、フロータブルサーバでの処理時 間が、データ取出サーバでのスキャン時間の4倍未満と なるように決定なるように決定 ・対象のサーバ決定方法 ⇒候補サーバリストの中から、負荷を考慮して最適な候補サ バリストの中から、負荷を考慮して最適な サーバを決定 © Hitachi, Ltd. 2014. All rights reserved. 31
  33. 33. 目次目次 1. HiRDBとは? 2 SQL実行プラン2. SQL実行プラン 3. フロータブルサーバ 4. プロセス間のDBデータ転送 5. LIMIT処理 © Hitachi, Ltd. 2014. All rights reserved. 32
  34. 34. 4.1 HiRDBシステムの構成(再掲) HiRDBの構成は? サーバマシン ■ HiRDB/シングルサーバ ■ HiRDB/パラレルサーバ(Shared-Nothing) 特定のデータは 特定のサーバで参照 DB サーバマシン クライアント 定 参 DB DB クライアント クライアント DBクライアント クライアント • 1台のサーバマシン上で動作 • 構築が容易、運用もシンプル • 1台のサーバマシン上で動作 • 構築が容易、運用もシンプル • 複数台のサーバマシン上で動作 • 並列処理が可能 • 複数台のサーバマシン上で動作 • 並列処理が可能 © Hitachi, Ltd. 2014. All rights reserved. 33 • スケールアップも可能• スケールアップも可能 • スケールアップとスケールアウトが可能• スケールアップとスケールアウトが可能
  35. 35. 4.2 クライアント~サーバマシン間のデータ転送① 結合検索の場合のデータの流れは? サーバマシン データ取出 データ転送SQL例) SELECT 表A.顧客名,表B.顧客名 FROM 表A,表B WHERE 表A.製品コード=表B.製品コード DB 表A 顧客名 製品コード 製品動画(BLOB型データ) A 100 データA 表A 顧客名,製品コード 顧客名,製品コード クライアント 結果返却 表A 顧客名 A 100 デ タA A 1000 データB A 500 データC 表B データ取出 結果返却 顧客名,製品コード 結合処理顧客名 製品コード 製品動画(BLOB型データ) B 300 データD B 10 データE B 500 データC 表 クライアント DB 表B 各表のデータを 処理対象のサーバマシンへ 顧客名,製品コード © Hitachi, Ltd. 2014. All rights reserved. 34 データ転送 処 対象 サ 漏れなく転送
  36. 36. 4.3 クライアント~サーバマシン間のデータ転送② もし、転送データの制御を行わなかったら? サーバマシン データ取出 データ転送SQL例) SELECT 表A.顧客名,表B.顧客名 FROM 表A,表B WHERE 表A.製品コード=表B.製品コード DB 表A 顧客名 製品コード 製品動画(BLOB型データ) A 100 データA 表A 顧客名,製品コード 顧客名,製品コード クライアント 結果返却 表AA 100 デ タA A 1000 データB A 500 データC 表B 顧客名返却しない 返却する データ取出 結果返却 結合処理顧客名 製品コード 製品動画(BLOB型データ) B 300 データD B 10 データE B 500 データC 表 顧客名,製品コード 返却しない 返却する クライアント DB 表B黄色部分では結合検索で 致しないため クライアントには 顧客名,製品コード 返却する © Hitachi, Ltd. 2014. All rights reserved. 35 データ転送一致しないため、クライアントには 返却不要である顧客名データも転送
  37. 37. 4.4 クライアント~サーバマシン間のデータ転送③ もし、転送データの制御を行わなかったら? サーバマシン データ取出 データ転送SQL例) SELECT 表A.製品動画,表B.製品動画 FROM 表A,表B WHERE 表A.製品コード=表B.製品コード DB 表A 製品動画,製品コード 顧客名 製品コード 製品動画(BLOB型データ) A 100 データA 表A 製品動画,製品コード クライアント 結果返却 表A 製品動画 A 100 デ タA A 1000 データB A 500 データC 表B 返却しない 返却する データ取出 結果返却 結合処理顧客名 製品コード 製品動画(BLOB型データ) B 300 データD B 10 データE B 500 データC 表 返却しない 返却する 製品動画,製品コード クライアント DB 表BBLOB型等の サイズが大きいデ タでは 返却する 製品動画,製品コード © Hitachi, Ltd. 2014. All rights reserved. 36 データ転送 サイズが大きいデータでは、 通信量が膨大になる
  38. 38. 4.5 クライアント~サーバマシン間のデータ転送④ HiRDBではどのように制御しているか? サーバマシン データ取出 データ転送SQL例) SELECT 表A.製品動画,表B.製品動画 FROM 表A,表B WHERE 表A.製品コード=表B.製品コード DB 表A ROWID 顧客名 製品コード 製品動画(BLOB型データ) XXXXX1 A 100 データA 表A ROWID,製品コード ROWID,製品コード データを一意に決定できる情報 クライアント 表AXXXXX1 A 100 データA XXXXX2 A 1000 データB XXXXX3 A 500 データC 表B データ取出 結合処理 表 ROWID,製品コード ROWID 顧客名 製品コード 製品動画(BLOB型データ) XXXXX1 B 300 データD XXXXX2 B 10 データE XXXXX3 B 500 データC クライアント DB 表B ROWID,製品コード XXXXX3 B 500 デ タC 結合に必要なデータと ROWIDのみを転送 © Hitachi, Ltd. 2014. All rights reserved. 37 データ転送 ROWIDのみを転送
  39. 39. 4.6 クライアント~サーバマシン間のデータ転送⑤ HiRDBではどのように制御しているか? サーバマシン データ取得 データ転送SQL例) SELECT 表A.製品動画,表B.製品動画 FROM 表A,表B WHERE 表A.製品コード=表B.製品コード DB 表A ROWID ROWIDROWID 顧客名 製品コード 製品動画(BLOB型データ) XXXXX1 A 100 データA 表A クライアント 表AXXXXX1 A 100 データA XXXXX2 A 1000 データB XXXXX3 A 500 データC 表B データ取得 ROWID 結合処理 表 ROWID 顧客名 製品コード 製品動画(BLOB型データ) XXXXX1 B 300 データD XXXXX2 B 10 データE XXXXX3 B 500 データC クライアント DB 表B ROWID 結合処理後でヒットした ROWIDを転送し、必要な XXXXX3 B 500 デ タC © Hitachi, Ltd. 2014. All rights reserved. 38 データ転送 を転送し、必要な データを取得
  40. 40. 4.7 クライアント~サーバマシン間のデータ転送⑥ HiRDBではどのように制御しているか? サーバマシン データ取出 データ転送SQL例) SELECT 表A.製品動画,表B.製品動画 FROM 表A,表B WHERE 表A.製品コード=表B.製品コード DB 表A 製品動画 製品動画ROWID 顧客名 製品コード 製品動画(BLOB型データ) XXXXX1 A 100 データA 表A クライアント 表A 製品動画 結果返却 XXXXX1 A 100 データA XXXXX2 A 1000 データB XXXXX3 A 500 データC 表B データ取出 製品動画 結果返却表 ROWID 顧客名 製品コード 製品動画(BLOB型データ) XXXXX1 B 300 データD XXXXX2 B 10 データE XXXXX3 B 500 データC クライアント DB 表B 製品動画 XXXXX3 B 500 デ タC ROWIDから返却対象列を 取得し クライアントへ返却 © Hitachi, Ltd. 2014. All rights reserved. 39 データ転送 取得し、クライアントへ返却
  41. 41. 4.8 クライアント~サーバマシン間のデータ転送⑦ HiRDBではどのように制御しているか? サーバマシン データ取出 データ転送SQL例) SELECT 表A.製品動画,表B.製品動画 FROM 表A,表B WHERE 表A.製品コード=表B.製品コード DB 表A 製品動画 製品動画 HiRDBでは、列データのサイ ズとSQL処理内容を基に 下 クライアント 表A 製品動画 結果返却 ズとSQL処理内容を基に、下 記から最適な方式を決定し て制御している ・最初から列デ タを取得して転送 データ取出 製品動画 結果返却・最初から列データを取得して転送 ・最後にROWIDから取得して転送 クライアント DB 表B 製品動画 © Hitachi, Ltd. 2014. All rights reserved. 40 データ転送
  42. 42. 目次目次 1. HiRDBとは? 2 SQL実行プラン2. SQL実行プラン 3. フロータブルサーバ 4. プロセス間のDBデータ転送 5. LIMIT処理 © Hitachi, Ltd. 2014. All rights reserved. 41
  43. 43. 5.1 LIMIT処理とは? LIMIT処理とは? SQLの検索結果のうち,先頭からn行だけを受け取る 顧客名 … … … … … … 検索対象表 LIMIT指定なしの 検索結果の場合 LIMIT指定ありの A A A A 顧客名 売上 … A 100 A 10 検索結果の場合検索結果の場合 先頭n行だけの 検索結果 顧客名 売上 … A 100 A 10 ・・・ ・・・ ・・・ A B A 1000 A 300 ・・・ ・・・ ・・・ A 0 検索結果 A 1000 B B 顧客名’A’のデータを © Hitachi, Ltd. 2014. All rights reserved. 42 顧客名 デ タを 抽出する場合
  44. 44. 5.2 ソート処理指定あり時のLIMIT処理① ソート処理と組み合わせた場合には? もし、ヒットした全データソート後に,先頭からn行だけを受 け取ると制御だと・・・ 顧客名 … … … … … … 不要なデータまでソート 検索対象表 LIMIT指定なしの 検索結果の場合 LIMIT指定ありの 顧客名 売上 … A 0 A 10 A A A A 検索結果の場合検索結果の場合 顧客名 売上 … A 0 A 10 先頭n行だけの 検索結果 A 100 A 300 ・・・ ・・・ ・・・ A 1000 ・・・ ・・・ ・・・ A B A 100検索結果 B B 売上でソート © Hitachi, Ltd. 2014. All rights reserved. 43
  45. 45. 5.3 ソート処理指定あり時のLIMIT処理② HiRDBではどのように制御しているか? 数件だけ枠を持っていて、範囲外であれば読み捨てる。 範囲内であれば既存の最大値を捨ててソート 顧客名 … … … … … … 検索対象表上限~下限のデータのみソート LIMIT指定なしの 検索結果の場合 LIMIT指定ありの 顧客名 売上 … A 0 A 10 A A A A 検索結果の場合検索結果の場合 顧客名 売上 … A 0 A 10 先頭n行だけの 検索結果 A 100 ・・・ ・・・ ・・・ A B A 100検索結果 対象の範囲に収まらない B B 対象の範囲に収まらない データは読み捨て (ex.売上データが300) © Hitachi, Ltd. 2014. All rights reserved. 44
  46. 46. 5.4 ソート処理指定あり時のLIMIT処理③ HiRDBではどのように制御しているか? メモリ上でソートするケースと、 作業表(※)上でソートするケースを制御 ※ソート対象のデータサイズが 作業表バッファサイズ未満で あればメモリ上で処理 顧客名 … … … … … … 検索対象表 顧客名 売上 … メモリ上でソート 内部閾値に基づき A A A A A 0 A 100 A 300 ・・・ ・・・ ・・・ A 10000 内部閾値に基づき、 メモリ使用量を考慮して、 ソート処理領域を変更 サイズ<xxx ・・・ ・・・ ・・・ A B A 10000 顧客名 売上 … 作業表上でソート 取得する先頭 行が多く も B B 顧客名 売上 A 0 A 100 A 300 ・・・ ・・・ ・・・ サイズ≧xxx 取得する先頭n行が多くても 少なくても、同時に実行して いる全SQLで見ると効率が よい方法を選択 © Hitachi, Ltd. 2014. All rights reserved. 45 A 100000
  47. 47. 最後に エンドユーザから見ると 意識することが少ないSQLエンドユ ザから見ると、意識することが少ないSQL 実行プラン生成。 SQL実行時間遅いとエンドユーザは気になってしま うので、意識されないようにますます早く、技術者の 方からは、早いけどどうなっているんだ?と気にして もらえるようにします!もらえるようにします! ご清聴ありがとうございました。 © Hitachi, Ltd. 2014. All rights reserved. 46
  48. 48. END HiRDBのSQL実行プランはどのようにHiRDBのSQL実行プランはどのように 決定しているのか? / / 株式会社 日立製作所 情報・通信システム社 ITプラットフォーム事業本部 開発統括本部 ソフトウ ア開発本部 DB設計部 2014/06/18 ソフトウェア開発本部 DB設計部 成田 正亮 © Hitachi, Ltd. 2014. All rights reserved. 47

×