Enviar búsqueda
Cargar
Oracleの実行計画を読んでみよう! #dbts2017
•
16 recomendaciones
•
16,308 vistas
Ryota Watabe
Seguir
db tech showcase 2017 tokyo 2017年9月7日(木) 14:30~15:20 入門者向けセミナー Oracleの実行計画を読んでみよう! の資料です。
Leer menos
Leer más
Datos y análisis
Denunciar
Compartir
Denunciar
Compartir
1 de 53
Descargar ahora
Descargar para leer sin conexión
Recomendados
DataGuard体験記
DataGuard体験記
Shinnosuke Akita
Zero Data Loss Recovery Appliance 設定手順例
Zero Data Loss Recovery Appliance 設定手順例
オラクルエンジニア通信
Oracle常駐接続プーリング(DRCP)を導入した話
Oracle常駐接続プーリング(DRCP)を導入した話
Kentaro Kitagawa
Oracle GoldenGate入門
Oracle GoldenGate入門
オラクルエンジニア通信
しばちょう先生による特別講義! RMANバックアップの運用と高速化チューニング
しばちょう先生による特別講義! RMANバックアップの運用と高速化チューニング
オラクルエンジニア通信
OCI GoldenGate Overview 2021年4月版
OCI GoldenGate Overview 2021年4月版
オラクルエンジニア通信
Zero Data Loss Recovery Applianceによるデータベース保護のアーキテクチャ
Zero Data Loss Recovery Applianceによるデータベース保護のアーキテクチャ
オラクルエンジニア通信
オンプレミスからクラウドへ:Oracle Databaseの移行ベストプラクティスを解説 (Oracle Cloudウェビナーシリーズ: 2021年2月18日)
オンプレミスからクラウドへ:Oracle Databaseの移行ベストプラクティスを解説 (Oracle Cloudウェビナーシリーズ: 2021年2月18日)
オラクルエンジニア通信
Recomendados
DataGuard体験記
DataGuard体験記
Shinnosuke Akita
Zero Data Loss Recovery Appliance 設定手順例
Zero Data Loss Recovery Appliance 設定手順例
オラクルエンジニア通信
Oracle常駐接続プーリング(DRCP)を導入した話
Oracle常駐接続プーリング(DRCP)を導入した話
Kentaro Kitagawa
Oracle GoldenGate入門
Oracle GoldenGate入門
オラクルエンジニア通信
しばちょう先生による特別講義! RMANバックアップの運用と高速化チューニング
しばちょう先生による特別講義! RMANバックアップの運用と高速化チューニング
オラクルエンジニア通信
OCI GoldenGate Overview 2021年4月版
OCI GoldenGate Overview 2021年4月版
オラクルエンジニア通信
Zero Data Loss Recovery Applianceによるデータベース保護のアーキテクチャ
Zero Data Loss Recovery Applianceによるデータベース保護のアーキテクチャ
オラクルエンジニア通信
オンプレミスからクラウドへ:Oracle Databaseの移行ベストプラクティスを解説 (Oracle Cloudウェビナーシリーズ: 2021年2月18日)
オンプレミスからクラウドへ:Oracle Databaseの移行ベストプラクティスを解説 (Oracle Cloudウェビナーシリーズ: 2021年2月18日)
オラクルエンジニア通信
Oracle GoldenGate導入Tips
Oracle GoldenGate導入Tips
オラクルエンジニア通信
事例から見る規模別クラウド・データベースの選び方 (Oracle Database) (Oracle Cloudウェビナーシリーズ: 2021年6月30日)
事例から見る規模別クラウド・データベースの選び方 (Oracle Database) (Oracle Cloudウェビナーシリーズ: 2021年6月30日)
オラクルエンジニア通信
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
NTT DATA Technology & Innovation
Oracle Database Vaultのご紹介
Oracle Database Vaultのご紹介
オラクルエンジニア通信
Oracle運用Tips大放出! ~ RAC環境のRMANのパラレル化を極める 編 ~ @2016-02-23 JPOUG
Oracle運用Tips大放出! ~ RAC環境のRMANのパラレル化を極める 編 ~ @2016-02-23 JPOUG
Yuya Ohta
YugabyteDBの実行計画を眺める(NewSQL/分散SQLデータベースよろず勉強会 #3 発表資料)
YugabyteDBの実行計画を眺める(NewSQL/分散SQLデータベースよろず勉強会 #3 発表資料)
NTT DATA Technology & Innovation
【旧版】Oracle Gen 2 Exadata Cloud@Customer:サービス概要のご紹介 [2021年12月版]
【旧版】Oracle Gen 2 Exadata Cloud@Customer:サービス概要のご紹介 [2021年12月版]
オラクルエンジニア通信
[Oracle Code Tokyo 2017] Live Challenge!! SQLパフォーマンスの高速化の限界を目指せ!
[Oracle Code Tokyo 2017] Live Challenge!! SQLパフォーマンスの高速化の限界を目指せ!
オラクルエンジニア通信
しばちょう先生が語る!オラクルデータベースの進化の歴史と最新技術動向#3
しばちょう先生が語る!オラクルデータベースの進化の歴史と最新技術動向#3
オラクルエンジニア通信
Oracle GoldenGate 19c を使用した 簡単データベース移行ガイド_v1.0
Oracle GoldenGate 19c を使用した 簡単データベース移行ガイド_v1.0
オラクルエンジニア通信
PostgreSQL 15 開発最新情報
PostgreSQL 15 開発最新情報
Masahiko Sawada
Postgres Playground で pgbench を走らせよう!(第35回PostgreSQLアンカンファレンス@オンライン 発表資料)
Postgres Playground で pgbench を走らせよう!(第35回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
E34 : [JPOUG Presents] Oracle Database の隠されている様々な謎を解くセッション「なーんでだ?」再び @ db tec...
E34 : [JPOUG Presents] Oracle Database の隠されている様々な謎を解くセッション「なーんでだ?」再び @ db tec...
Hiroshi Sekiguchi
Oracle Database Applianceのご紹介(詳細)
Oracle Database Applianceのご紹介(詳細)
オラクルエンジニア通信
Oracle Database / Exadata Cloud 技術情報(Oracle Cloudウェビナーシリーズ: 2020年7月9日)
Oracle Database / Exadata Cloud 技術情報(Oracle Cloudウェビナーシリーズ: 2020年7月9日)
オラクルエンジニア通信
使ってみませんか?pg_hint_plan
使ってみませんか?pg_hint_plan
NTT DATA OSS Professional Services
Oracle Data Guard による高可用性
Oracle Data Guard による高可用性
Yahoo!デベロッパーネットワーク
新機能によるデータベースシステムの改善ポイント
新機能によるデータベースシステムの改善ポイント
オラクルエンジニア通信
Oracle Advanced Security Transparent Data Encryptionのご紹介
Oracle Advanced Security Transparent Data Encryptionのご紹介
オラクルエンジニア通信
私はここでつまづいた! Oracle database 11g から 12cへのアップグレードと Oracle Database 12c の新機能@201...
私はここでつまづいた! Oracle database 11g から 12cへのアップグレードと Oracle Database 12c の新機能@201...
yoshimotot
はじめてのSQLチューニング(oracle)
はじめてのSQLチューニング(oracle)
kounan13
バックアップと障害復旧から考えるOracle Database, MySQL, PostgreSQLの違い - Database Lounge Tokyo #2
バックアップと障害復旧から考えるOracle Database, MySQL, PostgreSQLの違い - Database Lounge Tokyo #2
Ryota Watabe
Más contenido relacionado
La actualidad más candente
Oracle GoldenGate導入Tips
Oracle GoldenGate導入Tips
オラクルエンジニア通信
事例から見る規模別クラウド・データベースの選び方 (Oracle Database) (Oracle Cloudウェビナーシリーズ: 2021年6月30日)
事例から見る規模別クラウド・データベースの選び方 (Oracle Database) (Oracle Cloudウェビナーシリーズ: 2021年6月30日)
オラクルエンジニア通信
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
NTT DATA Technology & Innovation
Oracle Database Vaultのご紹介
Oracle Database Vaultのご紹介
オラクルエンジニア通信
Oracle運用Tips大放出! ~ RAC環境のRMANのパラレル化を極める 編 ~ @2016-02-23 JPOUG
Oracle運用Tips大放出! ~ RAC環境のRMANのパラレル化を極める 編 ~ @2016-02-23 JPOUG
Yuya Ohta
YugabyteDBの実行計画を眺める(NewSQL/分散SQLデータベースよろず勉強会 #3 発表資料)
YugabyteDBの実行計画を眺める(NewSQL/分散SQLデータベースよろず勉強会 #3 発表資料)
NTT DATA Technology & Innovation
【旧版】Oracle Gen 2 Exadata Cloud@Customer:サービス概要のご紹介 [2021年12月版]
【旧版】Oracle Gen 2 Exadata Cloud@Customer:サービス概要のご紹介 [2021年12月版]
オラクルエンジニア通信
[Oracle Code Tokyo 2017] Live Challenge!! SQLパフォーマンスの高速化の限界を目指せ!
[Oracle Code Tokyo 2017] Live Challenge!! SQLパフォーマンスの高速化の限界を目指せ!
オラクルエンジニア通信
しばちょう先生が語る!オラクルデータベースの進化の歴史と最新技術動向#3
しばちょう先生が語る!オラクルデータベースの進化の歴史と最新技術動向#3
オラクルエンジニア通信
Oracle GoldenGate 19c を使用した 簡単データベース移行ガイド_v1.0
Oracle GoldenGate 19c を使用した 簡単データベース移行ガイド_v1.0
オラクルエンジニア通信
PostgreSQL 15 開発最新情報
PostgreSQL 15 開発最新情報
Masahiko Sawada
Postgres Playground で pgbench を走らせよう!(第35回PostgreSQLアンカンファレンス@オンライン 発表資料)
Postgres Playground で pgbench を走らせよう!(第35回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
E34 : [JPOUG Presents] Oracle Database の隠されている様々な謎を解くセッション「なーんでだ?」再び @ db tec...
E34 : [JPOUG Presents] Oracle Database の隠されている様々な謎を解くセッション「なーんでだ?」再び @ db tec...
Hiroshi Sekiguchi
Oracle Database Applianceのご紹介(詳細)
Oracle Database Applianceのご紹介(詳細)
オラクルエンジニア通信
Oracle Database / Exadata Cloud 技術情報(Oracle Cloudウェビナーシリーズ: 2020年7月9日)
Oracle Database / Exadata Cloud 技術情報(Oracle Cloudウェビナーシリーズ: 2020年7月9日)
オラクルエンジニア通信
使ってみませんか?pg_hint_plan
使ってみませんか?pg_hint_plan
NTT DATA OSS Professional Services
Oracle Data Guard による高可用性
Oracle Data Guard による高可用性
Yahoo!デベロッパーネットワーク
新機能によるデータベースシステムの改善ポイント
新機能によるデータベースシステムの改善ポイント
オラクルエンジニア通信
Oracle Advanced Security Transparent Data Encryptionのご紹介
Oracle Advanced Security Transparent Data Encryptionのご紹介
オラクルエンジニア通信
私はここでつまづいた! Oracle database 11g から 12cへのアップグレードと Oracle Database 12c の新機能@201...
私はここでつまづいた! Oracle database 11g から 12cへのアップグレードと Oracle Database 12c の新機能@201...
yoshimotot
La actualidad más candente
(20)
Oracle GoldenGate導入Tips
Oracle GoldenGate導入Tips
事例から見る規模別クラウド・データベースの選び方 (Oracle Database) (Oracle Cloudウェビナーシリーズ: 2021年6月30日)
事例から見る規模別クラウド・データベースの選び方 (Oracle Database) (Oracle Cloudウェビナーシリーズ: 2021年6月30日)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
Oracle Database Vaultのご紹介
Oracle Database Vaultのご紹介
Oracle運用Tips大放出! ~ RAC環境のRMANのパラレル化を極める 編 ~ @2016-02-23 JPOUG
Oracle運用Tips大放出! ~ RAC環境のRMANのパラレル化を極める 編 ~ @2016-02-23 JPOUG
YugabyteDBの実行計画を眺める(NewSQL/分散SQLデータベースよろず勉強会 #3 発表資料)
YugabyteDBの実行計画を眺める(NewSQL/分散SQLデータベースよろず勉強会 #3 発表資料)
【旧版】Oracle Gen 2 Exadata Cloud@Customer:サービス概要のご紹介 [2021年12月版]
【旧版】Oracle Gen 2 Exadata Cloud@Customer:サービス概要のご紹介 [2021年12月版]
[Oracle Code Tokyo 2017] Live Challenge!! SQLパフォーマンスの高速化の限界を目指せ!
[Oracle Code Tokyo 2017] Live Challenge!! SQLパフォーマンスの高速化の限界を目指せ!
しばちょう先生が語る!オラクルデータベースの進化の歴史と最新技術動向#3
しばちょう先生が語る!オラクルデータベースの進化の歴史と最新技術動向#3
Oracle GoldenGate 19c を使用した 簡単データベース移行ガイド_v1.0
Oracle GoldenGate 19c を使用した 簡単データベース移行ガイド_v1.0
PostgreSQL 15 開発最新情報
PostgreSQL 15 開発最新情報
Postgres Playground で pgbench を走らせよう!(第35回PostgreSQLアンカンファレンス@オンライン 発表資料)
Postgres Playground で pgbench を走らせよう!(第35回PostgreSQLアンカンファレンス@オンライン 発表資料)
E34 : [JPOUG Presents] Oracle Database の隠されている様々な謎を解くセッション「なーんでだ?」再び @ db tec...
E34 : [JPOUG Presents] Oracle Database の隠されている様々な謎を解くセッション「なーんでだ?」再び @ db tec...
Oracle Database Applianceのご紹介(詳細)
Oracle Database Applianceのご紹介(詳細)
Oracle Database / Exadata Cloud 技術情報(Oracle Cloudウェビナーシリーズ: 2020年7月9日)
Oracle Database / Exadata Cloud 技術情報(Oracle Cloudウェビナーシリーズ: 2020年7月9日)
使ってみませんか?pg_hint_plan
使ってみませんか?pg_hint_plan
Oracle Data Guard による高可用性
Oracle Data Guard による高可用性
新機能によるデータベースシステムの改善ポイント
新機能によるデータベースシステムの改善ポイント
Oracle Advanced Security Transparent Data Encryptionのご紹介
Oracle Advanced Security Transparent Data Encryptionのご紹介
私はここでつまづいた! Oracle database 11g から 12cへのアップグレードと Oracle Database 12c の新機能@201...
私はここでつまづいた! Oracle database 11g から 12cへのアップグレードと Oracle Database 12c の新機能@201...
Destacado
はじめてのSQLチューニング(oracle)
はじめてのSQLチューニング(oracle)
kounan13
バックアップと障害復旧から考えるOracle Database, MySQL, PostgreSQLの違い - Database Lounge Tokyo #2
バックアップと障害復旧から考えるOracle Database, MySQL, PostgreSQLの違い - Database Lounge Tokyo #2
Ryota Watabe
Oracle Databaseを用いて学ぶRDBMSの基本 (抜粋版) - JPOUG Oracle Database入学式 2016
Oracle Databaseを用いて学ぶRDBMSの基本 (抜粋版) - JPOUG Oracle Database入学式 2016
Ryota Watabe
より深く知るオプティマイザとそのチューニング
より深く知るオプティマイザとそのチューニング
Yuto Hayamizu
Standard Edition 2でも使えるOracle Database 12c Release 2オススメ新機能
Standard Edition 2でも使えるOracle Database 12c Release 2オススメ新機能
Ryota Watabe
バックアップと障害復旧から考えるOracle Database, MySQL, PostgreSQLの違い
バックアップと障害復旧から考えるOracle Database, MySQL, PostgreSQLの違い
Ryota Watabe
Destacado
(6)
はじめてのSQLチューニング(oracle)
はじめてのSQLチューニング(oracle)
バックアップと障害復旧から考えるOracle Database, MySQL, PostgreSQLの違い - Database Lounge Tokyo #2
バックアップと障害復旧から考えるOracle Database, MySQL, PostgreSQLの違い - Database Lounge Tokyo #2
Oracle Databaseを用いて学ぶRDBMSの基本 (抜粋版) - JPOUG Oracle Database入学式 2016
Oracle Databaseを用いて学ぶRDBMSの基本 (抜粋版) - JPOUG Oracle Database入学式 2016
より深く知るオプティマイザとそのチューニング
より深く知るオプティマイザとそのチューニング
Standard Edition 2でも使えるOracle Database 12c Release 2オススメ新機能
Standard Edition 2でも使えるOracle Database 12c Release 2オススメ新機能
バックアップと障害復旧から考えるOracle Database, MySQL, PostgreSQLの違い
バックアップと障害復旧から考えるOracle Database, MySQL, PostgreSQLの違い
Similar a Oracleの実行計画を読んでみよう! #dbts2017
Oracle In-database-archiving ~Oracleでの論理削除~
Oracle In-database-archiving ~Oracleでの論理削除~
Daiki Mogmet Ito
沖縄オープンラボラトリ OpenStackハンズオンセミナー午後1
沖縄オープンラボラトリ OpenStackハンズオンセミナー午後1
Hideki Saito
Locondo 20190215@ec tech_group
Locondo 20190215@ec tech_group
Shinya Sugiyama
MariaDB Columnstore 使いこなそう
MariaDB Columnstore 使いこなそう
KAWANO KAZUYUKI
Control distribution of virtual machines
Control distribution of virtual machines
irix_jp
DB tech showcase_tokyo2018_LOCONDO
DB tech showcase_tokyo2018_LOCONDO
Shinya Sugiyama
MySQLのGIS機能とか超入門 ~MyNA会2018年7月
MySQLのGIS機能とか超入門 ~MyNA会2018年7月
sakaik
MySQL 5.7 InnoDB 日本語全文検索(その2)
MySQL 5.7 InnoDB 日本語全文検索(その2)
yoyamasaki
MySQLとPostgreSQLの基本的なパラメータ比較
MySQLとPostgreSQLの基本的なパラメータ比較
Shinya Sugiyama
Apuri she ji_gaido_teburushe_ji__v1.0
Apuri she ji_gaido_teburushe_ji__v1.0
Kaito Tonooka
InputMethodKit超入門
InputMethodKit超入門
Wataru Kimura
JOSUG 34th Meetup
JOSUG 34th Meetup
irix_jp
[Azure Antenna] クラウドで HPC ~ HPC 環境の構築から、アプリケーションの実行まで ~
[Azure Antenna] クラウドで HPC ~ HPC 環境の構築から、アプリケーションの実行まで ~
Shuichi Gojuki
MySQLに本格GIS機能がやってきた~MySQL8.0最新情報~@OSC2018北海道
MySQLに本格GIS機能がやってきた~MySQL8.0最新情報~@OSC2018北海道
sakaik
http2 最速実装 v2
http2 最速実装 v2
Yoshihiro Iwanaga
MySQLとPostgreSQLの基本的な実行プラン比較
MySQLとPostgreSQLの基本的な実行プラン比較
Shinya Sugiyama
HTTP2 最速実装 〜入門編〜
HTTP2 最速実装 〜入門編〜
Kaoru Maeda
PL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
PL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
Kohei KaiGai
まだ統計固定で消耗してるの? - Bind Peek をもっと使おうぜ! 2015 Edition -
まだ統計固定で消耗してるの? - Bind Peek をもっと使おうぜ! 2015 Edition -
歩 柴田
2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 15
2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 15
歩 柴田
Similar a Oracleの実行計画を読んでみよう! #dbts2017
(20)
Oracle In-database-archiving ~Oracleでの論理削除~
Oracle In-database-archiving ~Oracleでの論理削除~
沖縄オープンラボラトリ OpenStackハンズオンセミナー午後1
沖縄オープンラボラトリ OpenStackハンズオンセミナー午後1
Locondo 20190215@ec tech_group
Locondo 20190215@ec tech_group
MariaDB Columnstore 使いこなそう
MariaDB Columnstore 使いこなそう
Control distribution of virtual machines
Control distribution of virtual machines
DB tech showcase_tokyo2018_LOCONDO
DB tech showcase_tokyo2018_LOCONDO
MySQLのGIS機能とか超入門 ~MyNA会2018年7月
MySQLのGIS機能とか超入門 ~MyNA会2018年7月
MySQL 5.7 InnoDB 日本語全文検索(その2)
MySQL 5.7 InnoDB 日本語全文検索(その2)
MySQLとPostgreSQLの基本的なパラメータ比較
MySQLとPostgreSQLの基本的なパラメータ比較
Apuri she ji_gaido_teburushe_ji__v1.0
Apuri she ji_gaido_teburushe_ji__v1.0
InputMethodKit超入門
InputMethodKit超入門
JOSUG 34th Meetup
JOSUG 34th Meetup
[Azure Antenna] クラウドで HPC ~ HPC 環境の構築から、アプリケーションの実行まで ~
[Azure Antenna] クラウドで HPC ~ HPC 環境の構築から、アプリケーションの実行まで ~
MySQLに本格GIS機能がやってきた~MySQL8.0最新情報~@OSC2018北海道
MySQLに本格GIS機能がやってきた~MySQL8.0最新情報~@OSC2018北海道
http2 最速実装 v2
http2 最速実装 v2
MySQLとPostgreSQLの基本的な実行プラン比較
MySQLとPostgreSQLの基本的な実行プラン比較
HTTP2 最速実装 〜入門編〜
HTTP2 最速実装 〜入門編〜
PL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
PL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
まだ統計固定で消耗してるの? - Bind Peek をもっと使おうぜ! 2015 Edition -
まだ統計固定で消耗してるの? - Bind Peek をもっと使おうぜ! 2015 Edition -
2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 15
2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 15
Más de Ryota Watabe
Introduction of Oracle Database Architecture(抜粋版) - JPOUG Oracle Database入学式 ...
Introduction of Oracle Database Architecture(抜粋版) - JPOUG Oracle Database入学式 ...
Ryota Watabe
全社情報共有サイトへのAlfresco Community 5 導入事例紹介 - 第27回Alfresco勉強会
全社情報共有サイトへのAlfresco Community 5 導入事例紹介 - 第27回Alfresco勉強会
Ryota Watabe
Introduction of Oracle Database Architecture
Introduction of Oracle Database Architecture
Ryota Watabe
Corruption And Revive - db tech showcase 2013 特濃JPOUG
Corruption And Revive - db tech showcase 2013 特濃JPOUG
Ryota Watabe
OSS-DB Silver ポイント解説セミナー ~SQL編~ (PostgreSQL9.0)
OSS-DB Silver ポイント解説セミナー ~SQL編~ (PostgreSQL9.0)
Ryota Watabe
Analyzing Oracle Database hang issues using various diagnostics.
Analyzing Oracle Database hang issues using various diagnostics.
Ryota Watabe
プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009
プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009
Ryota Watabe
バッチ処理にバインド変数はもうやめません? ~|バッチ処理の突発遅延を題材にして考えてみる~
バッチ処理にバインド変数はもうやめません? ~|バッチ処理の突発遅延を題材にして考えてみる~
Ryota Watabe
Oracle Database In Lock
Oracle Database In Lock
Ryota Watabe
Más de Ryota Watabe
(9)
Introduction of Oracle Database Architecture(抜粋版) - JPOUG Oracle Database入学式 ...
Introduction of Oracle Database Architecture(抜粋版) - JPOUG Oracle Database入学式 ...
全社情報共有サイトへのAlfresco Community 5 導入事例紹介 - 第27回Alfresco勉強会
全社情報共有サイトへのAlfresco Community 5 導入事例紹介 - 第27回Alfresco勉強会
Introduction of Oracle Database Architecture
Introduction of Oracle Database Architecture
Corruption And Revive - db tech showcase 2013 特濃JPOUG
Corruption And Revive - db tech showcase 2013 特濃JPOUG
OSS-DB Silver ポイント解説セミナー ~SQL編~ (PostgreSQL9.0)
OSS-DB Silver ポイント解説セミナー ~SQL編~ (PostgreSQL9.0)
Analyzing Oracle Database hang issues using various diagnostics.
Analyzing Oracle Database hang issues using various diagnostics.
プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009
プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009
バッチ処理にバインド変数はもうやめません? ~|バッチ処理の突発遅延を題材にして考えてみる~
バッチ処理にバインド変数はもうやめません? ~|バッチ処理の突発遅延を題材にして考えてみる~
Oracle Database In Lock
Oracle Database In Lock
Oracleの実行計画を読んでみよう! #dbts2017
1.
Copyright © 2017
CO-Sol Inc. All Rights Reserved. 1Copyright © 2017 CO-Sol Inc. All Rights Reserved. 2017年9月7日 株式会社コーソル 渡部 亮太 Oracle入門セミナー 実行計画を読んでみよう!
2.
Copyright © 2017
CO-Sol Inc. All Rights Reserved. 2 自己紹介+所属会社紹介 • 渡部 亮太(わたべ りょうた) – JPOUG 共同創設者、ボードメンバー – 日本に8名しかいないOracle ACEの一人 – 著書「Oracleの基本」9月22日発売! 「プロとしてのOracleアーキテクチャ入門[第2版]」 – ブログ「コーソルDatabaseエンジニアのBlog」 http://cosol.jp/techdb/ • 株式会社コーソル – 「CO-Solutions=共に解決する」の理念のもと、Oracle技術に特 化した事業を展開中。心あるサービスの提供とデータベースエン ジニアの育成に注力している – 社員数: 132名 (2017年9月時点) – ORACLE MASTER Platinum 11g 取得者数 49名 ORACLE MASTER Platinum 12c 取得者数 35名 取得者数 日本 No.1 (おそらくWorld WideでNo.1) http://www.oracle.com/jp/education/omdata-171891-ja.html
3.
Copyright © 2017
CO-Sol Inc. All Rights Reserved. 3 技術者育成の取り組み [コーソル紹介] ORACLE MASTER Platinum取得者数 国内No1! 充実した教育+支援制度で技術者育成に力を入れています!
4.
Copyright © 2017
CO-Sol Inc. All Rights Reserved. 4 製品サービス 弊社ソリューションについて [コーソル紹介] 独自のサービスと製品を掛け合わせ、データベースの運用を 強力に支援致します。 &
5.
Copyright © 2017
CO-Sol Inc. All Rights Reserved. 5 [宣伝・告知] DB移行セミナーやります • 9月13日(水) 19:00-20:30 • https://connpass.com/event/63720/ • 技術領域: Oracle Database / Attunity
6.
Copyright © 2017
CO-Sol Inc. All Rights Reserved. 6 本セミナーについて • 比較的シンプルなSQLの実行計画を題材にして、Oracle Databaseの実行計画の読み方を学びます • Oracle Database初級者~中級者向けのセミナーです。 が、純粋な講義形式にしても眠くなるだけ :-P なので、 すこし対話形式のエッセンスを入れながら進めたいと思います • 途中で、実行計画を読むにあたって、落とし穴になりがちな点 についても説明します • 質問は随時Welcomeです。質疑応答が盛り上がったほうが、 みんなの理解が深まるはず! • 読みやすさ・理解しやすさのため、掲載するSQLや実行計画は 実際のもの から適宜 加工・修正しています • 同様の理由で、記述・説明の網羅性を犠牲にしているため、 キチンと理解したい場合は、マニュアルを参照してください
7.
Copyright © 2017
CO-Sol Inc. All Rights Reserved. 7 Agenda • 実行計画とは • 実行計画の取得方法 (見積ベース or 過去の実行) • ツリー構造のたどり方(実行計画の実行順序) • 基本的なオペレーションを理解する • 処理の流れをイメージできるようにする • 統計値の解釈(見積値 or 実測値、累積、 starts)
8.
Copyright © 2017
CO-Sol Inc. All Rights Reserved. 8Copyright © 2017 CO-Sol Inc. All Rights Reserved. 実行計画とは
9.
Copyright © 2017
CO-Sol Inc. All Rights Reserved. 9 実行計画とは • 実行計画は、SQLがOracleで実行される手順を示す • 実行計画はコストベースオプティマイザ(CBO; Cost- Based Optimizer)が作成する – CBOはOracleの内部コンポーネント – オプティマイザ統計が最新でないと適切な実行計画が作成され ないことに注意 • 不適切な実行計画でSQLが実行されると、本来であれば 実現できる処理パフォーマンスを得られない --------------------------------------------------------------------- | Id | Operation | Name | Rows |...| Time | --------------------------------------------------------------------- | 0 | SELECT STATEMENT | | |...| | | 1 | TABLE ACCESS BY INDEX ROWID| TAB0 | 16 |...| 00:00:01 | |* 2 | INDEX RANGE SCAN | T0_IDX | 16 |...| 00:00:01 | ---------------------------------------------------------------------
10.
Copyright © 2017
CO-Sol Inc. All Rights Reserved. 10 実行計画に含まれる情報 PLAN_TABLE_OUTPUT -------------------------------------------------------------------------------------- SQL_ID 3hrvf65nm048d, child number 0 ------------------------------------- SELECT * from tab0 WHERE col_idx = 'A' Plan hash value: 2195618789 -------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | -------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | | | 7 (100)| | | 1 | TABLE ACCESS BY INDEX ROWID| TAB0 | 16 | 32160 | 7 (0)| 00:00:01 | |* 2 | INDEX RANGE SCAN | T0_IDX | 16 | | 1 (0)| 00:00:01 | -------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 2 - access("COL_IDX"='A') ツリー構造をしたステップ 各ステップの統計値 補足情報 ステップ 実行計画の実行手順における実行要素 親子関係がある ←SQL文 sql_id: SQL文の識別子(Oracleが自動的に付与) ←実行計画のハッシュ値 ※:取得方法によって、情報が表示される/され ないが異なる点に注意
11.
Copyright © 2017
CO-Sol Inc. All Rights Reserved. 11 実行計画の確認方法 確認方法 実行 計画 統計 値 備考 a EXPLAIN PLAN + DBMS_XPLAN.DISPLAY 見積 見積 SQLは実行されない b SQL実行 → DBMS_XPLAN.DISPLAY_CURSOR 実行 見積 c STATISTICS_LEVEL=ALLでSQL実行 → DBMS_XPLAN.DISPLAY_CURSOR (format=>'ALLSTATS LAST') 実行 見積 実行 見積統計と実行統計 の両方を表示 • 実行計画の正確性の観点から、 DBMS_XPLAN.DISPLAY_CURSOR を使う方法(b,c)がオススメ – 共有プール(キャッシュ領域)から実行計画および統計値を取得 • EXPLAN PLAN(a)もお手軽で便利!だけど、参考用途に 見積: Oracleが見積もった(予測した)実行計画または統計値を表示 実行: 過去のSQL実行で実際に使われた実行計画または統計値を表示
12.
Copyright © 2017
CO-Sol Inc. All Rights Reserved. 12 a) EXPLAIN PLAN + DBMS_XPLAN.DISPLAY SQL> EXPLAIN PLAN FOR SELECT * FROM tab0 WHERE col_idx = 'A'; 解析されました。 SQL> SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY); PLAN_TABLE_OUTPUT ---------------------------------------------------------------------------------------------------- Plan hash value: 2195618789 -------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | -------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 16 | 32160 | 7 (0)| 00:00:01 | | 1 | TABLE ACCESS BY INDEX ROWID| TAB0 | 16 | 32160 | 7 (0)| 00:00:01 | |* 2 | INDEX RANGE SCAN | T0_IDX | 16 | | 1 (0)| 00:00:01 | -------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 2 - access("COL_IDX"='A') 14行が選択されました。
13.
Copyright © 2017
CO-Sol Inc. All Rights Reserved. 13 b) SQL実行 → DBMS_XPLAN.DISPLAY_CURSOR SQL> set serveroutput off SQL> SELECT * from tab0 WHERE col_idx = 'A'; (略) SQL> SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR); PLAN_TABLE_OUTPUT --------------------------------------------------------------------------------------------------- SQL_ID 3hrvf65nm048d, child number 0 ------------------------------------- SELECT * from tab0 WHERE col_idx = 'A' Plan hash value: 2195618789 -------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | -------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | | | 7 (100)| | | 1 | TABLE ACCESS BY INDEX ROWID| TAB0 | 16 | 32160 | 7 (0)| 00:00:01 | |* 2 | INDEX RANGE SCAN | T0_IDX | 16 | | 1 (0)| 00:00:01 | -------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 2 - access("COL_IDX"='A') 19行が選択されました。 sql_idの指定を省略すると直近実行した SQLの実行計画を表示 ただし set serveroutput onだとうまく 動かないことに注意
14.
Copyright © 2017
CO-Sol Inc. All Rights Reserved. 14 c) DBMS_XPLAN.DISPLAY_CURSOR (format=>'ALLSTATS LAST') SQL> set serveroutput off SQL> ALTER SESSION SET statistics_level=ALL; SQL> SELECT * from tab0 WHERE col_idx = 'A'; (略) SQL> SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(format=>'ALLSTATS LAST')) PLAN_TABLE_OUTPUT --------------------------------------------------------------------------------------------------- SQL_ID 3hrvf65nm048d, child number 0 ------------------------------------- SELECT * from tab0 WHERE col_idx = 'A' Plan hash value: 2195618789 ------------------------------------------------------------------------------------------------ | Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | ------------------------------------------------------------------------------------------------ | 0 | SELECT STATEMENT | | 1 | | 16 |00:00:00.01 | 10 | | 1 | TABLE ACCESS BY INDEX ROWID| TAB0 | 1 | 16 | 16 |00:00:00.01 | 10 | |* 2 | INDEX RANGE SCAN | T0_IDX | 1 | 16 | 16 |00:00:00.01 | 3 | ------------------------------------------------------------------------------------------------ Predicate Information (identified by operation id): --------------------------------------------------- 2 - access("COL_IDX"='A') 19行が選択されました。 LASTを指定しない と複数実行の平均値 になることに注意 実行統計(A-xxx:Actual)が表示される ※: ここではE-Rowsのみが見積統計
15.
Copyright © 2017
CO-Sol Inc. All Rights Reserved. 15Copyright © 2017 CO-Sol Inc. All Rights Reserved. 単一テーブルアクセスの オペレーション
16.
Copyright © 2017
CO-Sol Inc. All Rights Reserved. 16 オペレーションとは PLAN_TABLE_OUTPUT -------------------------------------------------------------------------------------- SQL_ID 3hrvf65nm048d, child number 0 ------------------------------------- SELECT * from tab0 WHERE col_idx = 'A' Plan hash value: 2195618789 -------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | -------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | | | 7 (100)| | | 1 | TABLE ACCESS BY INDEX ROWID| TAB0 | 16 | 32160 | 7 (0)| 00:00:01 | |* 2 | INDEX RANGE SCAN | T0_IDX | 16 | | 1 (0)| 00:00:01 | -------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 2 - access("COL_IDX"='A') オペレーション 各ステップで実行される操作の種類 TABLE ACCESS FULL、 INDEX RANGE SCAN など ステップ 実行計画の実行手順における実行要素 親子関係がある
17.
Copyright © 2017
CO-Sol Inc. All Rights Reserved. 17 テーブルフルスキャン select * from tab0 where col_noix = 'A' -------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | -------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | | | 9 (100)| | |* 1 | TABLE ACCESS FULL| TAB0 | 16 | 32160 | 9 (0)| 00:00:01 | -------------------------------------------------------------------------- 1 - filter("COL_NOIX"='A') TABLE ACCESS FULL filter
18.
Copyright © 2017
CO-Sol Inc. All Rights Reserved. 18 インデックス経由のテーブルアクセス(一意) select * from tab0 where id = '1'; --------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | --------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | | | 1 (100)| | | 1 | TABLE ACCESS BY INDEX ROWID| TAB0 | 1 | 2010 | 1 (0)| 00:00:01 | |* 2 | INDEX UNIQUE SCAN | PK_TAB0 | 1 | | 0 (0)| | --------------------------------------------------------------------------------------- 2 - access("ID"=1) INDEX UNIQUE SCAN TABLE ACCESS BY INDEX ROWID access
19.
Copyright © 2017
CO-Sol Inc. All Rights Reserved. 19 インデックス経由のテーブルアクセス(範囲) select * from tab0 where col_idx = 'A'; ------------------------------------------------------------------------------------ | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ------------------------------------------------------------------------------------ | 0 | SELECT STATEMENT | | | | 7 (100)| | | 1 | TABLE ACCESS BY INDEX ROWID| TAB0 | 16 | 32160 | 7 (0)| 00:00:01 | |* 2 | INDEX RANGE SCAN | IDX0 | 16 | | 1 (0)| 00:00:01 | ------------------------------------------------------------------------------------ 2 - access("COL_IDX1"='A') INDEX RANGE SCAN TABLE ACCESS BY INDEX ROWID access
20.
Copyright © 2017
CO-Sol Inc. All Rights Reserved. 20Copyright © 2017 CO-Sol Inc. All Rights Reserved. 実行計画のツリー構造
21.
Copyright © 2017
CO-Sol Inc. All Rights Reserved. 21 実行計画のツリー構造 ---------------------------------- | Id | Operation | Name | ---------------------------------- | 0 | SELECT STATEMENT | | |* 1 | TABLE ACCESS FULL| TAB0 | ---------------------------------- オペレーション 各ステップで実行される操作の種類 [オペレーションの例] TABLE ACCESS FULL INDEX RANGE SCAN ステップ 実行計画の実行手順における実行要素 親子関係がある ステップの親子関係 親は子から「行」を受け取る 2つ以上の子ステップを持つことがある(オペレーションの種類による) 0: SEL 1: TAF Rows 親 子
22.
Copyright © 2017
CO-Sol Inc. All Rights Reserved. 22 ツリー構造のたどり方 • インデントが深いところから見てゆく(実行開始する) んだろうなぁ・・・という認識はあるかと思います が・・・ • [問題] 以下の実行計画で、(実質的に)最初に実行され るステップはどれでしょう? ---------------------------------------------------- | Id | Operation | Name | ---------------------------------------------------- | 0 | SELECT STATEMENT | | | 1 | NESTED LOOPS | | |* 2 | TABLE ACCESS FULL | PA | | 3 | TABLE ACCESS BY INDEX ROWID | CH | |* 4 | INDEX RANGE SCAN | IDX_CHPA | ---------------------------------------------------- a b c
23.
Copyright © 2017
CO-Sol Inc. All Rights Reserved. 23 ツリー構造を整理 ------------------------------------------------- | Id | Operation | Name | ------------------------------------------------- | 0 | SELECT STATEMENT | | | 1 | NESTED LOOPS | | |* 2 | TABLE ACCESS FULL | PA | | 3 | TABLE ACCESS BY INDEX ROWID| CH | |* 4 | INDEX RANGE SCAN | IDX_CHPA | ------------------------------------------------- 0: SEL 1: NL 2: TAF 3: TAIR 4: IRS
24.
Copyright © 2017
CO-Sol Inc. All Rights Reserved. 24 ツリー構造のたどり方 • 最上位からインデントが深い方向にたどってゆく • 同じインデントのステップがある場合、表形式表示で上のステップを先 に実行する • それよりインデントが深いステップがなくなったら、表形式表示で下の ステップに移動する。ない場合は浅いインデント ------------------------------------------------- | Id | Operation | Name | ------------------------------------------------- | 0 | SELECT STATEMENT | | | 1 | NESTED LOOPS | | |* 2 | TABLE ACCESS FULL | PA | | 3 | TABLE ACCESS BY INDEX ROWID| CH | |* 4 | INDEX RANGE SCAN | IDX_CHPA | ------------------------------------------------- 0: SEL 1: NL 2: TAF 3: TAIR 4: IRS
25.
Copyright © 2017
CO-Sol Inc. All Rights Reserved. 25 ツリー構造のたどり方 0: SEL 1: NL 2: TAF 3: TAIR 4: IRS 1. 最上位から親→子方向にたどってゆく 2. 複数の「子ステップ」がある場合、表形式表示で上にある「子ステッ プ」に進む 3. そのステップから、さらに親→子方向にたどってゆく 4. 最下位の「子ステップ」に到達したら、実行を開始する。 5. 実行終了したら、「親ステップ」に戻る 6. その「親ステップ」に、他の「子ステップ」がある場合、表形式表示で 上にある「子ステップ」に進み、3. へ ない場合、その「親ステップ」を実行し、その「親ステップ」の「さら に親のステップ」に戻り、6.を繰り返す
26.
Copyright © 2017
CO-Sol Inc. All Rights Reserved. 26 というわけで正解は • かならずしも、最も深いインデントのステップから実行されるわけでは ないことに注意 – きちんとした説明が面倒だからか・・・ 誤った情報が結構流布されている ------------------------------------------------- | Id | Operation | Name | ------------------------------------------------- | 0 | SELECT STATEMENT | | | 1 | NESTED LOOPS | | |* 2 | TABLE ACCESS FULL | PA | | 3 | TABLE ACCESS BY INDEX ROWID| CH | |* 4 | INDEX RANGE SCAN | IDX_CHPA | ------------------------------------------------- 0: SEL 1: NL 2: TAF 3: TAIR 4: IRS 最初に 実行
27.
Copyright © 2017
CO-Sol Inc. All Rights Reserved. 27Copyright © 2017 CO-Sol Inc. All Rights Reserved. テーブルの結合と実行計画
28.
Copyright © 2017
CO-Sol Inc. All Rights Reserved. 28 結合とは EMPNO ENAME … DEPTNO 1001 本山三郎 2 1002 中村次郎 2 1003 山田花子 1 1004 三田海子 3 1005 山本太郎 1 1006 山田一朗 1 DEPTNO DNAME TELNO 1 金融部 0312345678 2 流通部 0312345679 3 公共部 0312345670 4 特別部 0312345677 EMPNO ENAME DNAME 1001 本山三郎 流通部 1002 中村次郎 流通部 1003 山田花子 金融部 1004 三田海子 公共部 1005 山本太郎 金融部 1006 山田一朗 金融部 [結合条件] emp.deptno = dept.deptno empテーブル (従業員) deptテーブル (部署) [SQL] SELECT empno, ename, dname FROM emp JOIN dept ON emp.deptno = dept.deptno;
29.
Copyright © 2017
CO-Sol Inc. All Rights Reserved. 29 結合の種類と実行計画 ネステッドループ結合 ------------------------------------------------- | Id | Operation | Name | ------------------------------------------------- | 0 | SELECT STATEMENT | | | 1 | NESTED LOOPS | | | 2 | TABLE ACCESS BY INDEX ROWID| PA | |* 3 | INDEX UNIQUE SCAN | PK_PA | | 4 | TABLE ACCESS BY INDEX ROWID| CH | |* 5 | INDEX RANGE SCAN | IDX_CHPA | ------------------------------------------------- ソートマージ結合 ------------------------------------ | Id | Operation | Name | ------------------------------------ | 0 | SELECT STATEMENT | | | 1 | MERGE JOIN | | | 2 | SORT JOIN | | |* 3 | TABLE ACCESS FULL| T1 | |* 4 | SORT JOIN | | | 5 | TABLE ACCESS FULL| T2 | ------------------------------------ ハッシュ結合 ------------------------------------------ | Id | Operation | Name | ------------------------------------------ | 0 | SELECT STATEMENT | | |* 1 | HASH JOIN | | | 2 | TABLE ACCESS FULL | DEPARTMENTS | | 3 | TABLE ACCESS FULL | EMPLOYEES | ------------------------------------------ • 結合データ量=小で選択されやすい • 通常インデックスとともに使われる • Oracleのバージョンにより細かい違いが ある • 結合データ量=大で選択されやすい • 通常テーブルフルスキャンとともに使われる • 結合条件が等価結合でのみ選択される • 選択されるケースは少なめ
30.
Copyright © 2017
CO-Sol Inc. All Rights Reserved. 30Copyright © 2017 CO-Sol Inc. All Rights Reserved. ネステッドループ結合の 実行計画を読んでみる
31.
Copyright © 2017
CO-Sol Inc. All Rights Reserved. 31 実行計画を読む手順 1. インデント表形式からツリー構造をイメージ 2. ツリー構造の実行順序を理解 3. オペレーションと実行順序から、各ステップの処理内容 をイメージ ※:1. 2. は先行して説明済み
32.
Copyright © 2017
CO-Sol Inc. All Rights Reserved. 32 今回とりあげる実行計画 SQL_ID byzfsqntmu2h5, child number 0 ------------------------------------- SELECT /*+ USE_NL(CH) LEADING(PA) */ cid, cname, pa.pid, pname FROM ch, pa WHERE ch.pid = pa.pid and pa.pid = 1 Plan hash value: 1035406045 ------------------------------------------------------------------------------------------------------------ | Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | Reads | ------------------------------------------------------------------------------------------------------------ | 0 | SELECT STATEMENT | | 1 | | 10 |00:00:00.09 | 15 | 14 | | 1 | NESTED LOOPS | | 1 | 10 | 10 |00:00:00.09 | 15 | 14 | | 2 | TABLE ACCESS BY INDEX ROWID| PA | 1 | 1 | 1 |00:00:00.04 | 2 | 2 | |* 3 | INDEX UNIQUE SCAN | PK_PA | 1 | 1 | 1 |00:00:00.02 | 1 | 1 | | 4 | TABLE ACCESS BY INDEX ROWID| CH | 1 | 10 | 10 |00:00:00.05 | 13 | 12 | |* 5 | INDEX RANGE SCAN | IDX_CHPA | 1 | 10 | 10 |00:00:00.01 | 3 | 2 | ------------------------------------------------------------------------------------------------------------ Predicate Information (identified by operation id): --------------------------------------------------- 3 - access("PA"."PID"=1) 5 - access("CH"."PID"=1) 詳しい人向けの補足 12cから導入された最適化機能Batch table access by rowidをOFFにした実行計画
33.
Copyright © 2017
CO-Sol Inc. All Rights Reserved. 33 1. インデント表形式からツリー構造をイメージ ---------------------------------------------------------- | Id | Operation | Name | Starts | ---------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | | 1 | NESTED LOOPS | | 1 | | 2 | TABLE ACCESS BY INDEX ROWID| PA | 1 | |* 3 | INDEX UNIQUE SCAN | PK_PA | 1 | | 4 | TABLE ACCESS BY INDEX ROWID| CH | 1 | |* 5 | INDEX RANGE SCAN | IDX_CHPA | 1 | ---------------------------------------------------------- 3 - access("PA"."PID"=1) 5 - access("CH"."PID"=1) 0: SEL 1: NL 2: TAIR 4: TAIR 5: IRS 3: IUS
34.
Copyright © 2017
CO-Sol Inc. All Rights Reserved. 34 2. ツリー構造の実行順序を理解 ---------------------------------------------------------- | Id | Operation | Name | Starts | ---------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | | 1 | NESTED LOOPS | | 1 | | 2 | TABLE ACCESS BY INDEX ROWID| PA | 1 | |* 3 | INDEX UNIQUE SCAN | PK_PA | 1 | | 4 | TABLE ACCESS BY INDEX ROWID| CH | 1 | |* 5 | INDEX RANGE SCAN | IDX_CHPA | 1 | ---------------------------------------------------------- 3 - access("PA"."PID"=1) 5 - access("CH"."PID"=1) 0: SEL 1: NL 2: TAIR 4: TAIR 5: IRS 3: IUS 最初に 実行
35.
Copyright © 2017
CO-Sol Inc. All Rights Reserved. 35 3. 各ステップの処理内容をイメージ INDEX RANGE SCAN TABLE ACCESS BY INDEX ROWID NL TABLE ACCESS BY INDEX ROWID INDEX UNIQUE SCAN ------------------------------------------------- | Id | Operation | Name | ------------------------------------------------- | 0 | SELECT STATEMENT | | | 1 | NESTED LOOPS | | | 2 | TABLE ACCESS BY INDEX ROWID| PA | |* 3 | INDEX UNIQUE SCAN | PK_PA | | 4 | TABLE ACCESS BY INDEX ROWID| CH | |* 5 | INDEX RANGE SCAN | IDX_CHPA | ------------------------------------------------- 3 - access("PA"."PID"=1) 5 - access("CH"."PID"=1) PK_PA PA IDX_CHPA CH 0: SEL 1: NL 2: TAIR 4: TAIR 5: IRS 3: IUS
36.
Copyright © 2017
CO-Sol Inc. All Rights Reserved. 36Copyright © 2017 CO-Sol Inc. All Rights Reserved. 実行計画の統計値を理解する
37.
Copyright © 2017
CO-Sol Inc. All Rights Reserved. 37 実行計画 各ステップの統計値 • 各ステップの統計値が表示される – 統計値ごとに解釈が異なる : 下位ステップを含めた累積 or そのステップ単体 • 見積統計と実行統計の2種類がある SELECT * FROM tab0 WHERE col_idx = 'A' AND col_noix='B' -------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | -------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | | | 2 (100)| | |* 1 | TABLE ACCESS BY INDEX ROWID| TAB0 | 1 | 2010 | 2 (0)| 00:00:01 | |* 2 | INDEX RANGE SCAN | T0_IDX | 3 | | 1 (0)| 00:00:01 | -------------------------------------------------------------------------------------- 1 - filter("COL_NOIX"='B') 2 - access("COL_IDX"='A') 各ステップの統計値
38.
Copyright © 2017
CO-Sol Inc. All Rights Reserved. 38 統計値とその解釈 統計値 解釈・意味 累積? Rows そのステップが上位のステップに返す見積行数 N Bytes そのステップが上位のステップに返すRowsの見積バイト数 N Cost そのステップ以下のステップの累積コスト コスト=平たく言うと「オラクルが予測した処理時間(単位なし)」 Y Time そのステップ以下のステップの予想処理時間 Y SELECT * FROM tab0 WHERE col_idx = 'A' AND col_noix='B' -------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | -------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | | | 2 (100)| | |* 1 | TABLE ACCESS BY INDEX ROWID| TAB0 | 1 | 2010 | 2 (0)| 00:00:01 | |* 2 | INDEX RANGE SCAN | T0_IDX | 3 | | 1 (0)| 00:00:01 | -------------------------------------------------------------------------------------- 1 - filter("COL_NOIX"='B') 2 - access("COL_IDX"='A') 0: SEL 1: TIR 2:IRS Rows=1 Rows=3
39.
Copyright © 2017
CO-Sol Inc. All Rights Reserved. 39 処理フローとRows統計 INDEX RANGE SCAN TABLE ACCESS BY INDEX ROWID t0_IDX TAB0 SELECT * from tab0 WHERE col_idx = 'A' AND col_noix='B' ------------------------------------------------------ | Id | Operation | Name | Rows | ------------------------------------------------------ | 0 | SELECT STATEMENT | | | |* 1 | TABLE ACCESS BY INDEX ROWID| TAB0 | 1 | |* 2 | INDEX RANGE SCAN | T0_IDX | 3 | ------------------------------------------------------ 1 - filter("COL_NOIX"='B') 2 - access("COL_IDX"='A') filter access 0: SEL 1: TIR 2:IRS Rows=1 Rows=3
40.
Copyright © 2017
CO-Sol Inc. All Rights Reserved. 40 SQLチューニングとRows統計 • SQLチューニングの1つの指標 実行計画の早い段階で、データを絞り込む → 大量のデータを引き回す必要がなくなるので、処理の 高速化に寄与する • すなわち、Rows統計は小さい値であることが望ましい。 できれば、実行計画の早い段階で、小さい値にできるこ とが望ましい • ただ・・・「Rows統計」は見積統計であることに注意 実行統計である「A-Rows」を用いる方がより適切 (見積統計と実行統計については後述) • さらにもう一つ・・・(次ページ)
41.
Copyright © 2017
CO-Sol Inc. All Rights Reserved. 41 Rows統計の注意点 • 明らかにアクセスしたデータ量が異なるのに、 両方ともRows=1とは?? • Rowsはそのステップが上位ステップに引き渡す行数を示す SELECT * from t9 WHERE id = 1 ----------------------------------------------------- | Id | Operation | Name | Rows | ----------------------------------------------------- | 0 | SELECT STATEMENT | | | | 1 | TABLE ACCESS BY INDEX ROWID| T9 | 1 | |* 2 | INDEX UNIQUE SCAN | PK_T9 | 1 | ----------------------------------------------------- SELECT * from t9 WHERE id = 1 ------------------------------------------ | Id | Operation | Name | Rows | ------------------------------------------ | 0 | SELECT STATEMENT | | 1 | |* 1 | TABLE ACCESS FULL| T9 | 1 | ------------------------------------------ TABLE ACCESS FULL filterINDEX UNIQUE SCAN TABLE ACCESS BY INDEX ROWID access
42.
Copyright © 2017
CO-Sol Inc. All Rights Reserved. 42Copyright © 2017 CO-Sol Inc. All Rights Reserved. 見積統計と実行統計
43.
Copyright © 2017
CO-Sol Inc. All Rights Reserved. 43 実行計画確認方法と見積統計、実行統計 • 確認方法cでのみ、SQL実行における「本当の」統計値を 得られる • 確認方法a、bで得られる統計値は、あくまでも「Oracle が予測した」統計値であることに注意 確認方法 実行 計画 統計 備考 a EXPLAIN PLAN + DBMS_XPLAN.DISPLAY 見積 見積 SQLは実行されない b SQL実行 → DBMS_XPLAN.DISPLAY_CURSOR 実行 見積 c STATISTICS_LEVEL=ALLでSQL実行 → DBMS_XPLAN.DISPLAY_CURSOR (format=>'ALLSTATS LAST') 実行 見積 実行 見積統計と実行統計 の両方を表示
44.
Copyright © 2017
CO-Sol Inc. All Rights Reserved. 44 c) DBMS_XPLAN.DISPLAY_CURSOR (format=>'ALLSTATS LAST') SQL> ALTER SESSION SET statistics_level=ALL; SQL> SELECT * from tab0 WHERE col_idx = 'A'; (略) SQL> SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(format=>'ALLSTATS LAST')) PLAN_TABLE_OUTPUT --------------------------------------------------------------------------------------------------- SQL_ID 3hrvf65nm048d, child number 0 ------------------------------------- SELECT * from tab0 WHERE col_idx = 'A' Plan hash value: 2195618789 ------------------------------------------------------------------------------------------------ | Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | ------------------------------------------------------------------------------------------------ | 0 | SELECT STATEMENT | | 1 | | 16 |00:00:00.01 | 10 | | 1 | TABLE ACCESS BY INDEX ROWID| TAB0 | 1 | 16 | 16 |00:00:00.01 | 10 | |* 2 | INDEX RANGE SCAN | T0_IDX | 1 | 16 | 16 |00:00:00.01 | 3 | ------------------------------------------------------------------------------------------------ Predicate Information (identified by operation id): --------------------------------------------------- 2 - access("COL_IDX"='A') 19行が選択されました。
45.
Copyright © 2017
CO-Sol Inc. All Rights Reserved. 45 見積統計と実行統計 (E-xxxとA-xxx) ------------------------------------------------------------------------------------------------ | Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | ------------------------------------------------------------------------------------------------ | 0 | SELECT STATEMENT | | 1 | | 16 |00:00:00.01 | 10 | | 1 | TABLE ACCESS BY INDEX ROWID| TAB0 | 1 | 16 | 16 |00:00:00.01 | 10 | |* 2 | INDEX RANGE SCAN | T0_IDX | 1 | 16 | 16 |00:00:00.01 | 3 | ------------------------------------------------------------------------------------------------ 統計の種類 見積統計(E-xxx) Oracleが見積もった(予測した)統計値 実行統計 (A-xxx、Starts、 Buffersなど) 過去のSQL実行における実際の統計値
46.
Copyright © 2017
CO-Sol Inc. All Rights Reserved. 46 見積統計と実行統計が異なる例 SQL> SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(format=>'ALLSTATS LAST')); ----------------------------------------------------------------------------------------------- | Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | ----------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | | 1 |00:00:00.01 | 4 | | 1 | TABLE ACCESS BY INDEX ROWID| T0 | 1 | 250 | 1 |00:00:00.01 | 4 | |* 2 | INDEX RANGE SCAN | T0_IX | 1 | 250 | 1 |00:00:00.01 | 3 | ----------------------------------------------------------------------------------------------- SQL> EXPLAIN PLAN FOR SELECT * FROM t0 WHERE col_idx = 'A'; SQL> SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY); : ------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 250 | 489K| 85 (0)| 00:00:01 | | 1 | TABLE ACCESS BY INDEX ROWID| T0 | 250 | 489K| 85 (0)| 00:00:01 | |* 2 | INDEX RANGE SCAN | T0_IX | 250 | | 1 (0)| 00:00:01 | ------------------------------------------------------------------------------------- SQL> SELECT col_idx, count(*) FROM t0 GROUP BY col_idx; C COUNT(*) - ---------- A 1 B 1 C 1 X 997
47.
Copyright © 2017
CO-Sol Inc. All Rights Reserved. 47 見積統計と実行統計が異なることの意味 • Oracleが見積に失敗していることを示す • 対処策:より正確な見積ができるように、それを支援す る情報を追加する → オプティマイザ統計を改善する SQL> SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(format=>'ALLSTATS LAST')); ----------------------------------------------------------------------------------------------- | Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | ----------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | | 1 |00:00:00.01 | 4 | | 1 | TABLE ACCESS BY INDEX ROWID| T0 | 1 | 250 | 1 |00:00:00.01 | 4 | |* 2 | INDEX RANGE SCAN | T0_IX | 1 | 250 | 1 |00:00:00.01 | 3 | -----------------------------------------------------------------------------------------------
48.
Copyright © 2017
CO-Sol Inc. All Rights Reserved. 48 オプティマイザ統計の改善による解決 SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS(null, 't0', method_opt => 'FOR COLUMNS SIZE AUTO col_idx'); PL/SQLプロシージャが正常に完了しました。 SQL> SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(format=>'ALLSTATS LAST')); ----------------------------------------------------------------------------------------------- | Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | ----------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | | 1 |00:00:00.01 | 4 | | 1 | TABLE ACCESS BY INDEX ROWID| T0 | 1 | 1 | 1 |00:00:00.01 | 4 | |* 2 | INDEX RANGE SCAN | T0_IX | 1 | 1 | 1 |00:00:00.01 | 3 | ----------------------------------------------------------------------------------------------- SQL> EXPLAIN PLAN FOR SELECT * FROM t0 WHERE col_idx = 'A'; SQL> SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY); : ------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 2007 | 2 (0)| 00:00:01 | | 1 | TABLE ACCESS BY INDEX ROWID| T0 | 1 | 2007 | 2 (0)| 00:00:01 | |* 2 | INDEX RANGE SCAN | T0_IX | 1 | | 1 (0)| 00:00:01 | ------------------------------------------------------------------------------------- • ヒストグラムの収集で解決 • ヒストグラム=列値の頻度情報
49.
Copyright © 2017
CO-Sol Inc. All Rights Reserved. 49Copyright © 2017 CO-Sol Inc. All Rights Reserved. Starts実行統計
50.
Copyright © 2017
CO-Sol Inc. All Rights Reserved. 50 Starts実行統計 : オペレーションの実行回数 • 実行計画(見積)では表示されないが、実行計画を理解 する助けになるときがある SELECT cid, cname, pa.pid, pname FROM ch, pa WHERE ch.pid = pa.pid and pa.pid IN (1,2,3) ------------------------------------------------------------------------- | Id | Operation | Name | Starts | E-Rows | A-Rows | ------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | | 3 | | 1 | NESTED LOOPS | | 1 | 3 | 3 | |* 2 | TABLE ACCESS FULL | CH | 1 | 3 | 3 | | 3 | TABLE ACCESS BY INDEX ROWID| PA | 3 | 1 | 3 | |* 4 | INDEX UNIQUE SCAN | PK_PA | 3 | 1 | 3 | ------------------------------------------------------------------------- 0: SEL 1: NL 2: TAF 4: TAIR 5: IUS Starts=3 → 3回実行
51.
Copyright © 2017
CO-Sol Inc. All Rights Reserved. 51 Starts実行統計 : オペレーションの実行回数 SELECT cid, cname, pa.pid, pname FROM ch, pa WHERE ch.pid = pa.pid and pa.pid IN (1,2,3) ------------------------------------------------------------------------- | Id | Operation | Name | Starts | E-Rows | A-Rows | ------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | | 3 | | 1 | NESTED LOOPS | | 1 | 3 | 3 | |* 2 | TABLE ACCESS FULL | CH | 1 | 3 | 3 | | 3 | TABLE ACCESS BY INDEX ROWID| PA | 3 | 1 | 3 | |* 4 | INDEX UNIQUE SCAN | PK_PA | 3 | 1 | 3 | ------------------------------------------------------------------------- INDEX UNIQUE SCAN TABLE ACCESS BY INDEX ROWID NL TABLE ACCESS FULL CH PK_PA PA access ① ② ③ 0: SEL 1: NL 2: TAF 4: TAIR 5: IUS Starts=3 → 3回実行 ① ② ③ ① ② ③
52.
Copyright © 2017
CO-Sol Inc. All Rights Reserved. 52 Questions & Answers
53.
Copyright © 2017
CO-Sol Inc. All Rights Reserved. 53
Descargar ahora