SlideShare a Scribd company logo
1 of 29
Download to read offline
バッチ処理にバインド変数はもうやめません?
~ バッチ処理の突発遅延を題材にして考えてみる ~




    2012/4/6 株式会社コーソル 渡部亮太
今日お伝えしたいこと


 バッチ処理SQLを
 バインド変数化するの
 はやめませんか?

       OLTP処理SQLは
       バインド変数化してOKなんだけどね・・・
自己紹介 + 所属企業の紹介
• 渡部 亮太(わたべ りょうた)
 SE、PM を経験後、Oracle Databaseのエキスパートを目指して転職
 執筆 「プロとしてのOracleアーキテクチャ入門」
      「プロとしてのOracle運用管理入門」
 講演 Developers Summit 2009
      Oracle LOVERS シーズン2 第2回
      Oracle DBA & Developer Days 2010, 2011
• 株式会社コーソル
 「CO-Solutions=共に解決する」の理念のもと、Oracle技術に特化した事
 業を展開中。心あるサービスの提供とデータベースエンジニアの育成に注力して
 いる。社員数: 98名 (エンジニアのほぼ全員がOracle Master 所有者)
こんな現象を題材に考えます
• 稼動実績があるバッチ処理が、突然パフ
  ォーマンスダウンするケース
 – 突然SQLのパフォーマンスがダウン
 – バインド変数を使用したSQL
 – 試行錯誤していろいろ対処策を探っている
   うちに、なぜか通常のパフォーマンスに戻った
 – しかし、その後も不定期にパフォーマンスダウ
   ンが再発
 – 原因がつかめない・・・
正常稼働時
• 範囲検索条件をバインド変数化したSQL
• 検索対象行数は比較的少ない
• INDEX RANGE SCANが適切と想定される

SELECT * FROM tbl0         検索対象行
WHERE :sval < val AND val < :eval
             1                    10



                                       :
パフォーマンスダウン時
• TABLE FULL SCANが実行されている
   • しかし、現場的には実行計画の変化に気づいていない・・・
• 不要なブロックアクセスが大量に発生

SELECT * FROM tbl0         検索対象行
WHERE :sval < val AND val < :eval
             1                    10



                                       :
問題発生のメカニズム
• なぜこのような現象が発生するのか?
• 以下の2つの動作が影響している
 – 1) バインドピーク機能
  • ハードパース時に指定されたバインド変数値を元に実
    行計画を作成する機能
 – 2) 共有カーソル(子カーソル)の再利用
  • 作成済みの共有カーソルが共有プールに存在する場
    合、 2回目以降のSQL実行で再利用する仕組み
  • 共有カーソルには実行計画が含まれるため、実行計
    画も再利用される
初回実行
SELECT * FROM tbl0         検索対象行
WHERE :sval < val AND val < :eval
             1                    10


        ハードパース                    実行&フェッチ
          バインド変数値
          sval = 1
          eval = 10
          を元に実行計画を作成


                                       :
           共有プール
2回目以降の実行
SELECT * FROM tbl0         検索対象行
WHERE :sval < val AND val < :eval
            11                    20


         ソフトパース                   実行&フェッチ
                    作成済み
                    実行計画
                    を流用



                                       :
           共有プール
共有カーソルのage-out




   共有プールの領域不足、統計情報の更新など
   様々な理由で共有カーソルはage-outされる場合がある




   共有プール
(age-out後の)初回実行
SELECT * FROM tbl0         検索対象行
WHERE :sval < val AND val < :eval        注目
           100                    5000


        ハードパース                     実行&フェッチ
           バインド変数値
           sval = 100
           eval = 5000
           を元に実行計画を作成


                                         :
           共有プール
(age-out後の) 2回目以降の実行
SELECT * FROM tbl0         検索対象行
WHERE :sval < val AND val < :eval
             1                    10


         ソフトパース                   実行&フェッチ
                    作成済み
                    実行計画
                    を流用


                                            非効率な
                                       :    SQL実行!
           共有プール
混乱した現場が・・・
• 共有プールの強制flush、統計情報の再収集
  、インスタンスの再起動などを実行すると・・・
• 共有カーソルのage-out相当の処理が実行さ
  れる形になる
• ハードパースが再実行され、想定通りの実行
  計画となる

• (問題のメカニズムが分かっていれば、上記の
  動作は当たり前の話なのだが・・・) 現場的に
  は、なぜかよくわからないが問題が解消したよ
  うに見える
• が、以後も偶発的に同様の現象が発生・・・
対処策は?
対処策            説明
SQLをリテラル(バイン   リテラル値(≒WHERE条件)毎に実行計
ド変数を使用しない)     画を作成
に修正            → 異なるWHERE条件が指定された
               SQLに対して、1つの実行計画を使いまわ
               さないようになる
バインドピークを無効化 デフォルト値を基準に実行計画を作成す
(_optim_peek_user る
_binds=false)     → 実行計画がバインド変数値に依存し
                  ないようになる
実行計画を誘導        指定した実行計画が作成される
(ヒント、アウトライン、   →実行計画がバインド変数値に依存しな
SQL実行計画管理)     いようになる
対処策1) SQLをリテラルに修正

 • WHERE条件ごとに実行計画が作成される
    – 子カーソル(≒実行計画)が共有されない
    – 個々のWHERE条件に最適な実行計画が作成
      される
SELECT * FROM tbl0       検索対象行
WHERE 1 < val AND val < 10


SELECT * FROM tbl0      検索対象行
WHERE 100 < val AND val < 5000   :
対処策2) バインドピークを無効化

 • _optim_peek_user_binds=false
 • デフォルト値(*1)を基準に実行計画が作成される
    – 子カーソル(≒実行計画)が共有される
    – ある意味・・・平均的な実行計画が作成される
SELECT * FROM tbl0         検索対象行
WHERE :sval < val AND val < :eval
             1                    10

SELECT * FROM tbl0         検索対象行
WHERE :sval < val AND val < :eval          :
            100                   5000

      (*1) デフォルト値の例
       '=', 'LIKE' の選択率 : 1/NUM_DISTINCT
       そのほかの選択率 : 0.05
対処策3) 実行計画を誘導

 • 指定した実行計画が作成される
    – 子カーソル(≒実行計画)が共有される
    – どの実行計画に誘導するか?という問題が残る

SELECT /*+INDEX(tbl0) */ 検索対象行
* FROM tbl0
WHERE :sval < val AND val < :eval
             1                    10

SELECT /*+INDEX(tbl0) */ 検索対象行           :
* FROM tbl0
WHERE :sval < val AND val < :eval
            100                   5000
「そもそも論」で考える
• 「そもそも」SQLをバインド変数化する目的と
  は?
 – バインド変数化するメリット、デメリット
 – バインド変数化が「ある意味」盲目的に推奨され
   ている背景
• 「そもそも」実行計画の共有/非共有が、
  「するか しないかの2択」なのはいかがなものか
 – もう少し賢い仕組みがあってしかるべきでは
 – というわけでAdaptive Cursor Sharing (11.1-)
「そもそも論」で考える
• 「そもそも」SQLをバインド変数化する目的と
  は?
 – バインド変数化するメリット、デメリット
 – バインド変数化が「ある意味」盲目的に推奨され
   ている背景
• 「そもそも」実行計画の共有/非共有が、
  「するか しないかの2択」なのはいかがなものか
 – もう少し賢い仕組みがあってしかるべきでは
 – というわけでAdaptive Cursor Sharing (11.1-)
バインド変数化のメリット・デメリット
○/× 案             説明
○   ハードパース実行回数の削 異なるWHERE条件を指
    減によるCPU使用率の削減 定した多くのSQLが発行さ
                  れる場合は効果大
○   共有プール使用量の削減   異なるWHERE条件を指
                  定した多くのSQLが発行さ
                  れる場合は効果大
×   WHERE条件により最適な どのようなWHERE条件で
    実行計画が異なる場合でも も最適な実行計画が同じ
    同一の実行計画を使用    場合は問題とならない
バッチ処理SQLとバインド変数化
○/× 案              バッチ処理SQLの場合
○    ハードパース実行回数の削 異なるWHERE条件を指
     減によるCPU使用率の削減 定した多くのSQLが発行さ
                   れないため、効果小
○    共有プール使用量の削減   異なるWHERE条件を指
                   定した多くのSQLが発行さ
                   れないため、効果小
×    WHERE条件により最適な WHERE条件により最適な
     実行計画が異なる場合でも 実行計画が異なる場合が
     同一の実行計画を使用    多い

    ⇒ バインド変数化の利点は、バッチ処理SQLの特
    性に適合しない
バインド変数化を盲目的に推奨する風潮?

• バインド変数化の有無は、開発者がそれぞれ
  のSQLごとに判断する必要がある
 – 現在のOracle Databaseでは・・・残念ながら
• しかし、盲目的に「バインド変数化=善」と判
  断している風潮が見られる
 – コーディング規約でのルール化
 – DBアクセスロジックを過度に共通化

突発的なパフォーマンスダウンを避けるため、
盲目的にバインド変数を使用することは避け
てほしい
「そもそも論」で考える
• 「そもそも」SQLをバインド変数化する目的と
  は?
 – バインド変数化するメリット、デメリット
 – バインド変数化が「ある意味」盲目的に推奨され
   ている背景
• 「そもそも」実行計画の共有/非共有が、
  「するか しないかの2択」なのはいかがなものか
 – もう少し賢い仕組みがあってしかるべきでは
 – というわけでAdaptive Cursor Sharing (11.1-)
実行計画の共有/非共有の判断
• WHERE条件が異なるSQLと実行計画の共有/非
  共有
 – nのSQLについて1つの実行計画を共有するか
 – nのSQLについてそれぞれnの実行計画を作成する
• → 実行計画を共有するかしないか
• 「そもそも」もうすこしインテリジェントな仕組みがあって
  も良いのでは?
Adaptive Cursor Sharing (11.1-)

 • 作成済みの実行計画(≒子カーソル)が不適
   切な場合は、自動的に新規に子カーソルを作
   成する機能
                                             ②
SELECT * FROM tbl0         検索対象行
WHERE :sval < val AND val < :eval
             1                    10
                                   ①
SELECT * FROM tbl0         検索対象行
WHERE :sval < val AND val < :eval
           100                    5000   ①       :
SELECT * FROM tbl0         検索対象行 ②
WHERE :sval < val AND val < :eval
           100                    5000
Adaptive Cursor Sharingで万事OK?
• 残念ながらそんなことはない
 – Feedback-Baseなので、最低1回は痛い目にあ
   わないとダメ
 – (実行イメージ) 作成済みの実行計画で実行
   →(パフォーマンスダウン+)予測値と実測値に乖
   離
   →新規に実行計画を作成
• (大量データを処理する)バッチ処理の場合、
  痛い目にあってからでは遅い・・・
 – したがって、バッチ処理の場合は、SQLのリテラル
   化がやっぱりオススメ
ご参加いただきありがとうございました




       ひきつづき鼓動をお楽しみください
中間的な特性を持つSQLでは?
• バッチ処理とOLTPの中間的な特性を持つ
  SQLでは、どういうアプローチが適切か
 – WHERE条件により最適な実行計画が異なる
 – 実行頻度はそれなりに高い、条件の種類も多い
• 対処策
 – たまに発生する実行計画の作成ミスには目をつぶ
   り、ACSに頼る
 – 最適な実行計画が異なるバインド変数値を洗い
   出し、その場合のみリテラル化 or 実行計画を誘
   導(それなりに大変なはず)
CURSOR_SHARING=SIMILAR
• CURSOR_SHARING
 – リテラルSQLを自動的にバインド変数化する機能
• CURSOR_SHARING=SIMILAR
 – SQLの種類とオプティマイザ統計の取得状況が
   条件に合致する場合、WHERE条件毎に別の
   子カーソル(≒実行計画)を作成する
 – 意図しない実行計画の共有を回避できる反面、
   子カーソル数の肥大化を招く場合があるため、適
   用は慎重に
 – 11.2以降で非推奨、11.2.0.3で使用不可

More Related Content

What's hot

MySQLレプリケーションあれやこれや
MySQLレプリケーションあれやこれやMySQLレプリケーションあれやこれや
MySQLレプリケーションあれやこれやyoku0825
 
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)NTT DATA Technology & Innovation
 
Ingress on Azure Kubernetes Service
Ingress on Azure Kubernetes ServiceIngress on Azure Kubernetes Service
Ingress on Azure Kubernetes ServiceToru Makabe
 
Sql server よく聞く設定とその効果
Sql server よく聞く設定とその効果Sql server よく聞く設定とその効果
Sql server よく聞く設定とその効果Masayuki Ozawa
 
DDD 2016 DB 12c クエリー・オプティマイザ新機能活用と統計情報運用の戦略
DDD 2016 DB 12c クエリー・オプティマイザ新機能活用と統計情報運用の戦略DDD 2016 DB 12c クエリー・オプティマイザ新機能活用と統計情報運用の戦略
DDD 2016 DB 12c クエリー・オプティマイザ新機能活用と統計情報運用の戦略歩 柴田
 
Dbts2013 特濃jpoug log_file_sync
Dbts2013 特濃jpoug log_file_syncDbts2013 特濃jpoug log_file_sync
Dbts2013 特濃jpoug log_file_syncKoji Shinkubo
 
Linux Performance Analysis in 15 minutes
Linux Performance Analysis in 15 minutesLinux Performance Analysis in 15 minutes
Linux Performance Analysis in 15 minutesYohei Azekatsu
 
Hadoop/Spark を使うなら Bigtop を使い熟そう! ~並列分散処理基盤のいま、から Bigtop の最近の取り組みまで一挙ご紹介~(Ope...
Hadoop/Spark を使うなら Bigtop を使い熟そう! ~並列分散処理基盤のいま、から Bigtop の最近の取り組みまで一挙ご紹介~(Ope...Hadoop/Spark を使うなら Bigtop を使い熟そう! ~並列分散処理基盤のいま、から Bigtop の最近の取り組みまで一挙ご紹介~(Ope...
Hadoop/Spark を使うなら Bigtop を使い熟そう! ~並列分散処理基盤のいま、から Bigtop の最近の取り組みまで一挙ご紹介~(Ope...NTT DATA Technology & Innovation
 
わかった気になるMySQL
わかった気になるMySQLわかった気になるMySQL
わかった気になるMySQLyoku0825
 
アプリ開発者、DB 管理者視点での Cloud Spanner 活用方法 | 第 10 回 Google Cloud INSIDE Games & App...
アプリ開発者、DB 管理者視点での Cloud Spanner 活用方法 | 第 10 回 Google Cloud INSIDE Games & App...アプリ開発者、DB 管理者視点での Cloud Spanner 活用方法 | 第 10 回 Google Cloud INSIDE Games & App...
アプリ開発者、DB 管理者視点での Cloud Spanner 活用方法 | 第 10 回 Google Cloud INSIDE Games & App...Google Cloud Platform - Japan
 
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)NTT DATA OSS Professional Services
 
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャーKubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャーToru Makabe
 
PostgreSQLでスケールアウト
PostgreSQLでスケールアウトPostgreSQLでスケールアウト
PostgreSQLでスケールアウトMasahiko Sawada
 
KubernetesバックアップツールVeleroとちょっとした苦労話
KubernetesバックアップツールVeleroとちょっとした苦労話KubernetesバックアップツールVeleroとちょっとした苦労話
KubernetesバックアップツールVeleroとちょっとした苦労話imurata8203
 
PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 

What's hot (20)

NTT DATA と PostgreSQL が挑んだ総力戦
NTT DATA と PostgreSQL が挑んだ総力戦NTT DATA と PostgreSQL が挑んだ総力戦
NTT DATA と PostgreSQL が挑んだ総力戦
 
MySQLレプリケーションあれやこれや
MySQLレプリケーションあれやこれやMySQLレプリケーションあれやこれや
MySQLレプリケーションあれやこれや
 
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
 
Ingress on Azure Kubernetes Service
Ingress on Azure Kubernetes ServiceIngress on Azure Kubernetes Service
Ingress on Azure Kubernetes Service
 
Sql server よく聞く設定とその効果
Sql server よく聞く設定とその効果Sql server よく聞く設定とその効果
Sql server よく聞く設定とその効果
 
Vacuum徹底解説
Vacuum徹底解説Vacuum徹底解説
Vacuum徹底解説
 
DDD 2016 DB 12c クエリー・オプティマイザ新機能活用と統計情報運用の戦略
DDD 2016 DB 12c クエリー・オプティマイザ新機能活用と統計情報運用の戦略DDD 2016 DB 12c クエリー・オプティマイザ新機能活用と統計情報運用の戦略
DDD 2016 DB 12c クエリー・オプティマイザ新機能活用と統計情報運用の戦略
 
Dbts2013 特濃jpoug log_file_sync
Dbts2013 特濃jpoug log_file_syncDbts2013 特濃jpoug log_file_sync
Dbts2013 特濃jpoug log_file_sync
 
PostgreSQLアーキテクチャ入門
PostgreSQLアーキテクチャ入門PostgreSQLアーキテクチャ入門
PostgreSQLアーキテクチャ入門
 
Linux Performance Analysis in 15 minutes
Linux Performance Analysis in 15 minutesLinux Performance Analysis in 15 minutes
Linux Performance Analysis in 15 minutes
 
Hadoop/Spark を使うなら Bigtop を使い熟そう! ~並列分散処理基盤のいま、から Bigtop の最近の取り組みまで一挙ご紹介~(Ope...
Hadoop/Spark を使うなら Bigtop を使い熟そう! ~並列分散処理基盤のいま、から Bigtop の最近の取り組みまで一挙ご紹介~(Ope...Hadoop/Spark を使うなら Bigtop を使い熟そう! ~並列分散処理基盤のいま、から Bigtop の最近の取り組みまで一挙ご紹介~(Ope...
Hadoop/Spark を使うなら Bigtop を使い熟そう! ~並列分散処理基盤のいま、から Bigtop の最近の取り組みまで一挙ご紹介~(Ope...
 
わかった気になるMySQL
わかった気になるMySQLわかった気になるMySQL
わかった気になるMySQL
 
アプリ開発者、DB 管理者視点での Cloud Spanner 活用方法 | 第 10 回 Google Cloud INSIDE Games & App...
アプリ開発者、DB 管理者視点での Cloud Spanner 活用方法 | 第 10 回 Google Cloud INSIDE Games & App...アプリ開発者、DB 管理者視点での Cloud Spanner 活用方法 | 第 10 回 Google Cloud INSIDE Games & App...
アプリ開発者、DB 管理者視点での Cloud Spanner 活用方法 | 第 10 回 Google Cloud INSIDE Games & App...
 
Oracle Database Vaultのご紹介
Oracle Database Vaultのご紹介Oracle Database Vaultのご紹介
Oracle Database Vaultのご紹介
 
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
 
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャーKubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
 
PostgreSQLでスケールアウト
PostgreSQLでスケールアウトPostgreSQLでスケールアウト
PostgreSQLでスケールアウト
 
KubernetesバックアップツールVeleroとちょっとした苦労話
KubernetesバックアップツールVeleroとちょっとした苦労話KubernetesバックアップツールVeleroとちょっとした苦労話
KubernetesバックアップツールVeleroとちょっとした苦労話
 
PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
 

Viewers also liked

本当にあった怖い話し (やきに駆動 2.0)
本当にあった怖い話し (やきに駆動 2.0)本当にあった怖い話し (やきに駆動 2.0)
本当にあった怖い話し (やきに駆動 2.0)Oda Shinsuke
 
プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009
プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009
プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009Ryota Watabe
 
Oracle Database In Lock
Oracle Database In LockOracle Database In Lock
Oracle Database In LockRyota Watabe
 
Analyzing Oracle Database hang issues using various diagnostics.
Analyzing Oracle Database hang issues using various diagnostics.Analyzing Oracle Database hang issues using various diagnostics.
Analyzing Oracle Database hang issues using various diagnostics.Ryota Watabe
 
Introduction of Oracle Database Architecture
Introduction of Oracle Database ArchitectureIntroduction of Oracle Database Architecture
Introduction of Oracle Database ArchitectureRyota Watabe
 
パフォーマンスタブ見れないんですけど!! 株式会社コーソル 河野 敏彦
パフォーマンスタブ見れないんですけど!! 株式会社コーソル 河野 敏彦パフォーマンスタブ見れないんですけど!! 株式会社コーソル 河野 敏彦
パフォーマンスタブ見れないんですけど!! 株式会社コーソル 河野 敏彦CO-Sol for Community
 
Corruption And Revive - db tech showcase 2013 特濃JPOUG
Corruption And Revive - db tech showcase 2013 特濃JPOUGCorruption And Revive - db tech showcase 2013 特濃JPOUG
Corruption And Revive - db tech showcase 2013 特濃JPOUGRyota Watabe
 
Oracle Database Cloud Service を使ってみよう! 株式会社コーソル 守田 典男
Oracle Database Cloud Service を使ってみよう! 株式会社コーソル 守田 典男Oracle Database Cloud Service を使ってみよう! 株式会社コーソル 守田 典男
Oracle Database Cloud Service を使ってみよう! 株式会社コーソル 守田 典男CO-Sol for Community
 
SQL Developerって必要ですか? 株式会社コーソル 河野 敏彦
SQL Developerって必要ですか? 株式会社コーソル 河野 敏彦SQL Developerって必要ですか? 株式会社コーソル 河野 敏彦
SQL Developerって必要ですか? 株式会社コーソル 河野 敏彦CO-Sol for Community
 
全社情報共有サイトへの Alfresco Community 5 導入事例紹介 - 第27回Alfresco勉強会
全社情報共有サイトへのAlfresco Community 5 導入事例紹介 - 第27回Alfresco勉強会全社情報共有サイトへのAlfresco Community 5 導入事例紹介 - 第27回Alfresco勉強会
全社情報共有サイトへの Alfresco Community 5 導入事例紹介 - 第27回Alfresco勉強会Ryota Watabe
 
OSS-DB Silver ポイント解説セミナー ~SQL編~ (PostgreSQL9.0)
OSS-DB Silver ポイント解説セミナー ~SQL編~ (PostgreSQL9.0)OSS-DB Silver ポイント解説セミナー ~SQL編~ (PostgreSQL9.0)
OSS-DB Silver ポイント解説セミナー ~SQL編~ (PostgreSQL9.0)Ryota Watabe
 
おじさん二人が語る OOW デビューのススメ! Oracle OpenWorld 2016参加報告 [検閲版] 株式会社コーソル 杉本 篤信, 河野 敏彦
おじさん二人が語る OOW デビューのススメ! Oracle OpenWorld 2016参加報告 [検閲版] 株式会社コーソル 杉本 篤信, 河野 敏彦 おじさん二人が語る OOW デビューのススメ! Oracle OpenWorld 2016参加報告 [検閲版] 株式会社コーソル 杉本 篤信, 河野 敏彦
おじさん二人が語る OOW デビューのススメ! Oracle OpenWorld 2016参加報告 [検閲版] 株式会社コーソル 杉本 篤信, 河野 敏彦 CO-Sol for Community
 
バックアップと障害復旧から考えるOracle Database, MySQL, PostgreSQLの違い - Database Lounge Tokyo #2
バックアップと障害復旧から考えるOracle Database, MySQL, PostgreSQLの違い - Database Lounge Tokyo #2バックアップと障害復旧から考えるOracle Database, MySQL, PostgreSQLの違い - Database Lounge Tokyo #2
バックアップと障害復旧から考えるOracle Database, MySQL, PostgreSQLの違い - Database Lounge Tokyo #2Ryota Watabe
 
Standard Edition 2でも使えるOracle Database 12c Release 2オススメ新機能
Standard Edition 2でも使えるOracle Database 12c Release 2オススメ新機能Standard Edition 2でも使えるOracle Database 12c Release 2オススメ新機能
Standard Edition 2でも使えるOracle Database 12c Release 2オススメ新機能Ryota Watabe
 
「スキルなし・実績なし」 32歳窓際エンジニアがシリコンバレーで働くようになるまで
「スキルなし・実績なし」 32歳窓際エンジニアがシリコンバレーで働くようになるまで「スキルなし・実績なし」 32歳窓際エンジニアがシリコンバレーで働くようになるまで
「スキルなし・実績なし」 32歳窓際エンジニアがシリコンバレーで働くようになるまでShuichi Tsutsumi
 
Oracle SQL Developerを使い倒そう! 株式会社コーソル 守田 典男
Oracle SQL Developerを使い倒そう! 株式会社コーソル 守田 典男Oracle SQL Developerを使い倒そう! 株式会社コーソル 守田 典男
Oracle SQL Developerを使い倒そう! 株式会社コーソル 守田 典男CO-Sol for Community
 
Oracle Databaseを用いて学ぶ RDBMSの基本 (抜粋版) - JPOUG Oracle Database入学式 2016
Oracle Databaseを用いて学ぶRDBMSの基本 (抜粋版) - JPOUG Oracle Database入学式 2016 Oracle Databaseを用いて学ぶRDBMSの基本 (抜粋版) - JPOUG Oracle Database入学式 2016
Oracle Databaseを用いて学ぶ RDBMSの基本 (抜粋版) - JPOUG Oracle Database入学式 2016 Ryota Watabe
 
バックアップと障害復旧から考えるOracle Database, MySQL, PostgreSQLの違い
バックアップと障害復旧から考えるOracle Database, MySQL, PostgreSQLの違いバックアップと障害復旧から考えるOracle Database, MySQL, PostgreSQLの違い
バックアップと障害復旧から考えるOracle Database, MySQL, PostgreSQLの違いRyota Watabe
 

Viewers also liked (18)

本当にあった怖い話し (やきに駆動 2.0)
本当にあった怖い話し (やきに駆動 2.0)本当にあった怖い話し (やきに駆動 2.0)
本当にあった怖い話し (やきに駆動 2.0)
 
プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009
プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009
プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009
 
Oracle Database In Lock
Oracle Database In LockOracle Database In Lock
Oracle Database In Lock
 
Analyzing Oracle Database hang issues using various diagnostics.
Analyzing Oracle Database hang issues using various diagnostics.Analyzing Oracle Database hang issues using various diagnostics.
Analyzing Oracle Database hang issues using various diagnostics.
 
Introduction of Oracle Database Architecture
Introduction of Oracle Database ArchitectureIntroduction of Oracle Database Architecture
Introduction of Oracle Database Architecture
 
パフォーマンスタブ見れないんですけど!! 株式会社コーソル 河野 敏彦
パフォーマンスタブ見れないんですけど!! 株式会社コーソル 河野 敏彦パフォーマンスタブ見れないんですけど!! 株式会社コーソル 河野 敏彦
パフォーマンスタブ見れないんですけど!! 株式会社コーソル 河野 敏彦
 
Corruption And Revive - db tech showcase 2013 特濃JPOUG
Corruption And Revive - db tech showcase 2013 特濃JPOUGCorruption And Revive - db tech showcase 2013 特濃JPOUG
Corruption And Revive - db tech showcase 2013 特濃JPOUG
 
Oracle Database Cloud Service を使ってみよう! 株式会社コーソル 守田 典男
Oracle Database Cloud Service を使ってみよう! 株式会社コーソル 守田 典男Oracle Database Cloud Service を使ってみよう! 株式会社コーソル 守田 典男
Oracle Database Cloud Service を使ってみよう! 株式会社コーソル 守田 典男
 
SQL Developerって必要ですか? 株式会社コーソル 河野 敏彦
SQL Developerって必要ですか? 株式会社コーソル 河野 敏彦SQL Developerって必要ですか? 株式会社コーソル 河野 敏彦
SQL Developerって必要ですか? 株式会社コーソル 河野 敏彦
 
全社情報共有サイトへの Alfresco Community 5 導入事例紹介 - 第27回Alfresco勉強会
全社情報共有サイトへのAlfresco Community 5 導入事例紹介 - 第27回Alfresco勉強会全社情報共有サイトへのAlfresco Community 5 導入事例紹介 - 第27回Alfresco勉強会
全社情報共有サイトへの Alfresco Community 5 導入事例紹介 - 第27回Alfresco勉強会
 
OSS-DB Silver ポイント解説セミナー ~SQL編~ (PostgreSQL9.0)
OSS-DB Silver ポイント解説セミナー ~SQL編~ (PostgreSQL9.0)OSS-DB Silver ポイント解説セミナー ~SQL編~ (PostgreSQL9.0)
OSS-DB Silver ポイント解説セミナー ~SQL編~ (PostgreSQL9.0)
 
おじさん二人が語る OOW デビューのススメ! Oracle OpenWorld 2016参加報告 [検閲版] 株式会社コーソル 杉本 篤信, 河野 敏彦
おじさん二人が語る OOW デビューのススメ! Oracle OpenWorld 2016参加報告 [検閲版] 株式会社コーソル 杉本 篤信, 河野 敏彦 おじさん二人が語る OOW デビューのススメ! Oracle OpenWorld 2016参加報告 [検閲版] 株式会社コーソル 杉本 篤信, 河野 敏彦
おじさん二人が語る OOW デビューのススメ! Oracle OpenWorld 2016参加報告 [検閲版] 株式会社コーソル 杉本 篤信, 河野 敏彦
 
バックアップと障害復旧から考えるOracle Database, MySQL, PostgreSQLの違い - Database Lounge Tokyo #2
バックアップと障害復旧から考えるOracle Database, MySQL, PostgreSQLの違い - Database Lounge Tokyo #2バックアップと障害復旧から考えるOracle Database, MySQL, PostgreSQLの違い - Database Lounge Tokyo #2
バックアップと障害復旧から考えるOracle Database, MySQL, PostgreSQLの違い - Database Lounge Tokyo #2
 
Standard Edition 2でも使えるOracle Database 12c Release 2オススメ新機能
Standard Edition 2でも使えるOracle Database 12c Release 2オススメ新機能Standard Edition 2でも使えるOracle Database 12c Release 2オススメ新機能
Standard Edition 2でも使えるOracle Database 12c Release 2オススメ新機能
 
「スキルなし・実績なし」 32歳窓際エンジニアがシリコンバレーで働くようになるまで
「スキルなし・実績なし」 32歳窓際エンジニアがシリコンバレーで働くようになるまで「スキルなし・実績なし」 32歳窓際エンジニアがシリコンバレーで働くようになるまで
「スキルなし・実績なし」 32歳窓際エンジニアがシリコンバレーで働くようになるまで
 
Oracle SQL Developerを使い倒そう! 株式会社コーソル 守田 典男
Oracle SQL Developerを使い倒そう! 株式会社コーソル 守田 典男Oracle SQL Developerを使い倒そう! 株式会社コーソル 守田 典男
Oracle SQL Developerを使い倒そう! 株式会社コーソル 守田 典男
 
Oracle Databaseを用いて学ぶ RDBMSの基本 (抜粋版) - JPOUG Oracle Database入学式 2016
Oracle Databaseを用いて学ぶRDBMSの基本 (抜粋版) - JPOUG Oracle Database入学式 2016 Oracle Databaseを用いて学ぶRDBMSの基本 (抜粋版) - JPOUG Oracle Database入学式 2016
Oracle Databaseを用いて学ぶ RDBMSの基本 (抜粋版) - JPOUG Oracle Database入学式 2016
 
バックアップと障害復旧から考えるOracle Database, MySQL, PostgreSQLの違い
バックアップと障害復旧から考えるOracle Database, MySQL, PostgreSQLの違いバックアップと障害復旧から考えるOracle Database, MySQL, PostgreSQLの違い
バックアップと障害復旧から考えるOracle Database, MySQL, PostgreSQLの違い
 

Similar to バッチ処理にバインド変数はもうやめません? ~|バッチ処理の突発遅延を題材にして考えてみる~

[INSIGHT OUT 2011] B27 SQL Anywhereの先進のセルフヒーリング技術について(glenn paulley)
[INSIGHT OUT 2011] B27 SQL Anywhereの先進のセルフヒーリング技術について(glenn paulley)[INSIGHT OUT 2011] B27 SQL Anywhereの先進のセルフヒーリング技術について(glenn paulley)
[INSIGHT OUT 2011] B27 SQL Anywhereの先進のセルフヒーリング技術について(glenn paulley)Insight Technology, Inc.
 
MySQL 5.6新機能解説@dbtechshowcase2012
MySQL 5.6新機能解説@dbtechshowcase2012MySQL 5.6新機能解説@dbtechshowcase2012
MySQL 5.6新機能解説@dbtechshowcase2012Mikiya Okuno
 
AWS Black Belt Techシリーズ AWS Elastic Beanstalk
AWS Black Belt Techシリーズ  AWS  Elastic  BeanstalkAWS Black Belt Techシリーズ  AWS  Elastic  Beanstalk
AWS Black Belt Techシリーズ AWS Elastic BeanstalkAmazon Web Services Japan
 
Sql server data store data access internals
Sql server data store data access internalsSql server data store data access internals
Sql server data store data access internalsMasayuki Ozawa
 
プロとしてのOracleアーキテクチャ入門 ~番外編~
プロとしてのOracleアーキテクチャ入門 ~番外編~プロとしてのOracleアーキテクチャ入門 ~番外編~
プロとしてのOracleアーキテクチャ入門 ~番外編~ryouta watabe
 
AWSクラウドデザインパターン(CDP) - Eコマース編 -
AWSクラウドデザインパターン(CDP) - Eコマース編 -AWSクラウドデザインパターン(CDP) - Eコマース編 -
AWSクラウドデザインパターン(CDP) - Eコマース編 -SORACOM, INC
 
Microsoft Azure - SQL Data Warehouse
Microsoft Azure - SQL Data WarehouseMicrosoft Azure - SQL Data Warehouse
Microsoft Azure - SQL Data WarehouseMicrosoft
 
MySQL 5.7 Technical Update (日本語)
MySQL 5.7 Technical Update (日本語)MySQL 5.7 Technical Update (日本語)
MySQL 5.7 Technical Update (日本語)Shinya Sugiyama
 
SQL Azure のシームレスな管理
SQL Azure のシームレスな管理SQL Azure のシームレスな管理
SQL Azure のシームレスな管理junichi anno
 
AWS Redshift Analyzeの必要性とvacuumの落とし穴
AWS Redshift Analyzeの必要性とvacuumの落とし穴AWS Redshift Analyzeの必要性とvacuumの落とし穴
AWS Redshift Analyzeの必要性とvacuumの落とし穴Moto Fukao
 
双方向レプリケーションの(Bidirectional Replication)の利用方法
双方向レプリケーションの(Bidirectional Replication)の利用方法双方向レプリケーションの(Bidirectional Replication)の利用方法
双方向レプリケーションの(Bidirectional Replication)の利用方法QlikPresalesJapan
 
Qlik Replicate - 双方向レプリケーション(Bidirectional Replication)の利用
Qlik Replicate - 双方向レプリケーション(Bidirectional Replication)の利用Qlik Replicate - 双方向レプリケーション(Bidirectional Replication)の利用
Qlik Replicate - 双方向レプリケーション(Bidirectional Replication)の利用QlikPresalesJapan
 
初心者向け負荷軽減のはなし
初心者向け負荷軽減のはなし初心者向け負荷軽減のはなし
初心者向け負荷軽減のはなしOonishi Takaaki
 
2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理
2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理
2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理keki3
 
PostgreSQL9.1同期レプリケーションとPacemakerによる高可用クラスタ化の紹介
PostgreSQL9.1同期レプリケーションとPacemakerによる高可用クラスタ化の紹介PostgreSQL9.1同期レプリケーションとPacemakerによる高可用クラスタ化の紹介
PostgreSQL9.1同期レプリケーションとPacemakerによる高可用クラスタ化の紹介Masao Fujii
 
PostgreSQL V9 レプリケーション解説
PostgreSQL V9 レプリケーション解説PostgreSQL V9 レプリケーション解説
PostgreSQL V9 レプリケーション解説Masao Fujii
 
cloudpack導入資料(2011/05/06版)
cloudpack導入資料(2011/05/06版)cloudpack導入資料(2011/05/06版)
cloudpack導入資料(2011/05/06版)iret, Inc.
 
C21 SQL Server のスレッド管理 by 古賀啓一郎
C21 SQL Server のスレッド管理 by 古賀啓一郎C21 SQL Server のスレッド管理 by 古賀啓一郎
C21 SQL Server のスレッド管理 by 古賀啓一郎Insight Technology, Inc.
 
Seas で語られたこととは?
Seas で語られたこととは?Seas で語られたこととは?
Seas で語られたこととは?Masayuki Ozawa
 

Similar to バッチ処理にバインド変数はもうやめません? ~|バッチ処理の突発遅延を題材にして考えてみる~ (20)

[INSIGHT OUT 2011] B27 SQL Anywhereの先進のセルフヒーリング技術について(glenn paulley)
[INSIGHT OUT 2011] B27 SQL Anywhereの先進のセルフヒーリング技術について(glenn paulley)[INSIGHT OUT 2011] B27 SQL Anywhereの先進のセルフヒーリング技術について(glenn paulley)
[INSIGHT OUT 2011] B27 SQL Anywhereの先進のセルフヒーリング技術について(glenn paulley)
 
MySQL 5.6新機能解説@dbtechshowcase2012
MySQL 5.6新機能解説@dbtechshowcase2012MySQL 5.6新機能解説@dbtechshowcase2012
MySQL 5.6新機能解説@dbtechshowcase2012
 
AWS Black Belt Techシリーズ AWS Elastic Beanstalk
AWS Black Belt Techシリーズ  AWS  Elastic  BeanstalkAWS Black Belt Techシリーズ  AWS  Elastic  Beanstalk
AWS Black Belt Techシリーズ AWS Elastic Beanstalk
 
Sql server data store data access internals
Sql server data store data access internalsSql server data store data access internals
Sql server data store data access internals
 
プロとしてのOracleアーキテクチャ入門 ~番外編~
プロとしてのOracleアーキテクチャ入門 ~番外編~プロとしてのOracleアーキテクチャ入門 ~番外編~
プロとしてのOracleアーキテクチャ入門 ~番外編~
 
AWSクラウドデザインパターン(CDP) - Eコマース編 -
AWSクラウドデザインパターン(CDP) - Eコマース編 -AWSクラウドデザインパターン(CDP) - Eコマース編 -
AWSクラウドデザインパターン(CDP) - Eコマース編 -
 
AWSCLI AutoScaling
AWSCLI AutoScalingAWSCLI AutoScaling
AWSCLI AutoScaling
 
Microsoft Azure - SQL Data Warehouse
Microsoft Azure - SQL Data WarehouseMicrosoft Azure - SQL Data Warehouse
Microsoft Azure - SQL Data Warehouse
 
MySQL 5.7 Technical Update (日本語)
MySQL 5.7 Technical Update (日本語)MySQL 5.7 Technical Update (日本語)
MySQL 5.7 Technical Update (日本語)
 
SQL Azure のシームレスな管理
SQL Azure のシームレスな管理SQL Azure のシームレスな管理
SQL Azure のシームレスな管理
 
AWS Redshift Analyzeの必要性とvacuumの落とし穴
AWS Redshift Analyzeの必要性とvacuumの落とし穴AWS Redshift Analyzeの必要性とvacuumの落とし穴
AWS Redshift Analyzeの必要性とvacuumの落とし穴
 
双方向レプリケーションの(Bidirectional Replication)の利用方法
双方向レプリケーションの(Bidirectional Replication)の利用方法双方向レプリケーションの(Bidirectional Replication)の利用方法
双方向レプリケーションの(Bidirectional Replication)の利用方法
 
Qlik Replicate - 双方向レプリケーション(Bidirectional Replication)の利用
Qlik Replicate - 双方向レプリケーション(Bidirectional Replication)の利用Qlik Replicate - 双方向レプリケーション(Bidirectional Replication)の利用
Qlik Replicate - 双方向レプリケーション(Bidirectional Replication)の利用
 
初心者向け負荷軽減のはなし
初心者向け負荷軽減のはなし初心者向け負荷軽減のはなし
初心者向け負荷軽減のはなし
 
2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理
2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理
2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理
 
PostgreSQL9.1同期レプリケーションとPacemakerによる高可用クラスタ化の紹介
PostgreSQL9.1同期レプリケーションとPacemakerによる高可用クラスタ化の紹介PostgreSQL9.1同期レプリケーションとPacemakerによる高可用クラスタ化の紹介
PostgreSQL9.1同期レプリケーションとPacemakerによる高可用クラスタ化の紹介
 
PostgreSQL V9 レプリケーション解説
PostgreSQL V9 レプリケーション解説PostgreSQL V9 レプリケーション解説
PostgreSQL V9 レプリケーション解説
 
cloudpack導入資料(2011/05/06版)
cloudpack導入資料(2011/05/06版)cloudpack導入資料(2011/05/06版)
cloudpack導入資料(2011/05/06版)
 
C21 SQL Server のスレッド管理 by 古賀啓一郎
C21 SQL Server のスレッド管理 by 古賀啓一郎C21 SQL Server のスレッド管理 by 古賀啓一郎
C21 SQL Server のスレッド管理 by 古賀啓一郎
 
Seas で語られたこととは?
Seas で語られたこととは?Seas で語られたこととは?
Seas で語られたこととは?
 

Recently uploaded

Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsWSO2
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptxsn679259
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 

Recently uploaded (12)

Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 

バッチ処理にバインド変数はもうやめません? ~|バッチ処理の突発遅延を題材にして考えてみる~

  • 2. 今日お伝えしたいこと バッチ処理SQLを バインド変数化するの はやめませんか? OLTP処理SQLは バインド変数化してOKなんだけどね・・・
  • 3. 自己紹介 + 所属企業の紹介 • 渡部 亮太(わたべ りょうた) SE、PM を経験後、Oracle Databaseのエキスパートを目指して転職 執筆 「プロとしてのOracleアーキテクチャ入門」 「プロとしてのOracle運用管理入門」 講演 Developers Summit 2009 Oracle LOVERS シーズン2 第2回 Oracle DBA & Developer Days 2010, 2011 • 株式会社コーソル 「CO-Solutions=共に解決する」の理念のもと、Oracle技術に特化した事 業を展開中。心あるサービスの提供とデータベースエンジニアの育成に注力して いる。社員数: 98名 (エンジニアのほぼ全員がOracle Master 所有者)
  • 4. こんな現象を題材に考えます • 稼動実績があるバッチ処理が、突然パフ ォーマンスダウンするケース – 突然SQLのパフォーマンスがダウン – バインド変数を使用したSQL – 試行錯誤していろいろ対処策を探っている うちに、なぜか通常のパフォーマンスに戻った – しかし、その後も不定期にパフォーマンスダウ ンが再発 – 原因がつかめない・・・
  • 5. 正常稼働時 • 範囲検索条件をバインド変数化したSQL • 検索対象行数は比較的少ない • INDEX RANGE SCANが適切と想定される SELECT * FROM tbl0 検索対象行 WHERE :sval < val AND val < :eval 1 10 :
  • 6. パフォーマンスダウン時 • TABLE FULL SCANが実行されている • しかし、現場的には実行計画の変化に気づいていない・・・ • 不要なブロックアクセスが大量に発生 SELECT * FROM tbl0 検索対象行 WHERE :sval < val AND val < :eval 1 10 :
  • 7. 問題発生のメカニズム • なぜこのような現象が発生するのか? • 以下の2つの動作が影響している – 1) バインドピーク機能 • ハードパース時に指定されたバインド変数値を元に実 行計画を作成する機能 – 2) 共有カーソル(子カーソル)の再利用 • 作成済みの共有カーソルが共有プールに存在する場 合、 2回目以降のSQL実行で再利用する仕組み • 共有カーソルには実行計画が含まれるため、実行計 画も再利用される
  • 8. 初回実行 SELECT * FROM tbl0 検索対象行 WHERE :sval < val AND val < :eval 1 10 ハードパース 実行&フェッチ バインド変数値 sval = 1 eval = 10 を元に実行計画を作成 : 共有プール
  • 9. 2回目以降の実行 SELECT * FROM tbl0 検索対象行 WHERE :sval < val AND val < :eval 11 20 ソフトパース 実行&フェッチ 作成済み 実行計画 を流用 : 共有プール
  • 10. 共有カーソルのage-out 共有プールの領域不足、統計情報の更新など 様々な理由で共有カーソルはage-outされる場合がある 共有プール
  • 11. (age-out後の)初回実行 SELECT * FROM tbl0 検索対象行 WHERE :sval < val AND val < :eval 注目 100 5000 ハードパース 実行&フェッチ バインド変数値 sval = 100 eval = 5000 を元に実行計画を作成 : 共有プール
  • 12. (age-out後の) 2回目以降の実行 SELECT * FROM tbl0 検索対象行 WHERE :sval < val AND val < :eval 1 10 ソフトパース 実行&フェッチ 作成済み 実行計画 を流用 非効率な : SQL実行! 共有プール
  • 13. 混乱した現場が・・・ • 共有プールの強制flush、統計情報の再収集 、インスタンスの再起動などを実行すると・・・ • 共有カーソルのage-out相当の処理が実行さ れる形になる • ハードパースが再実行され、想定通りの実行 計画となる • (問題のメカニズムが分かっていれば、上記の 動作は当たり前の話なのだが・・・) 現場的に は、なぜかよくわからないが問題が解消したよ うに見える • が、以後も偶発的に同様の現象が発生・・・
  • 14. 対処策は? 対処策 説明 SQLをリテラル(バイン リテラル値(≒WHERE条件)毎に実行計 ド変数を使用しない) 画を作成 に修正 → 異なるWHERE条件が指定された SQLに対して、1つの実行計画を使いまわ さないようになる バインドピークを無効化 デフォルト値を基準に実行計画を作成す (_optim_peek_user る _binds=false) → 実行計画がバインド変数値に依存し ないようになる 実行計画を誘導 指定した実行計画が作成される (ヒント、アウトライン、 →実行計画がバインド変数値に依存しな SQL実行計画管理) いようになる
  • 15. 対処策1) SQLをリテラルに修正 • WHERE条件ごとに実行計画が作成される – 子カーソル(≒実行計画)が共有されない – 個々のWHERE条件に最適な実行計画が作成 される SELECT * FROM tbl0 検索対象行 WHERE 1 < val AND val < 10 SELECT * FROM tbl0 検索対象行 WHERE 100 < val AND val < 5000 :
  • 16. 対処策2) バインドピークを無効化 • _optim_peek_user_binds=false • デフォルト値(*1)を基準に実行計画が作成される – 子カーソル(≒実行計画)が共有される – ある意味・・・平均的な実行計画が作成される SELECT * FROM tbl0 検索対象行 WHERE :sval < val AND val < :eval 1 10 SELECT * FROM tbl0 検索対象行 WHERE :sval < val AND val < :eval : 100 5000 (*1) デフォルト値の例 '=', 'LIKE' の選択率 : 1/NUM_DISTINCT そのほかの選択率 : 0.05
  • 17. 対処策3) 実行計画を誘導 • 指定した実行計画が作成される – 子カーソル(≒実行計画)が共有される – どの実行計画に誘導するか?という問題が残る SELECT /*+INDEX(tbl0) */ 検索対象行 * FROM tbl0 WHERE :sval < val AND val < :eval 1 10 SELECT /*+INDEX(tbl0) */ 検索対象行 : * FROM tbl0 WHERE :sval < val AND val < :eval 100 5000
  • 18. 「そもそも論」で考える • 「そもそも」SQLをバインド変数化する目的と は? – バインド変数化するメリット、デメリット – バインド変数化が「ある意味」盲目的に推奨され ている背景 • 「そもそも」実行計画の共有/非共有が、 「するか しないかの2択」なのはいかがなものか – もう少し賢い仕組みがあってしかるべきでは – というわけでAdaptive Cursor Sharing (11.1-)
  • 19. 「そもそも論」で考える • 「そもそも」SQLをバインド変数化する目的と は? – バインド変数化するメリット、デメリット – バインド変数化が「ある意味」盲目的に推奨され ている背景 • 「そもそも」実行計画の共有/非共有が、 「するか しないかの2択」なのはいかがなものか – もう少し賢い仕組みがあってしかるべきでは – というわけでAdaptive Cursor Sharing (11.1-)
  • 20. バインド変数化のメリット・デメリット ○/× 案 説明 ○ ハードパース実行回数の削 異なるWHERE条件を指 減によるCPU使用率の削減 定した多くのSQLが発行さ れる場合は効果大 ○ 共有プール使用量の削減 異なるWHERE条件を指 定した多くのSQLが発行さ れる場合は効果大 × WHERE条件により最適な どのようなWHERE条件で 実行計画が異なる場合でも も最適な実行計画が同じ 同一の実行計画を使用 場合は問題とならない
  • 21. バッチ処理SQLとバインド変数化 ○/× 案 バッチ処理SQLの場合 ○ ハードパース実行回数の削 異なるWHERE条件を指 減によるCPU使用率の削減 定した多くのSQLが発行さ れないため、効果小 ○ 共有プール使用量の削減 異なるWHERE条件を指 定した多くのSQLが発行さ れないため、効果小 × WHERE条件により最適な WHERE条件により最適な 実行計画が異なる場合でも 実行計画が異なる場合が 同一の実行計画を使用 多い ⇒ バインド変数化の利点は、バッチ処理SQLの特 性に適合しない
  • 22. バインド変数化を盲目的に推奨する風潮? • バインド変数化の有無は、開発者がそれぞれ のSQLごとに判断する必要がある – 現在のOracle Databaseでは・・・残念ながら • しかし、盲目的に「バインド変数化=善」と判 断している風潮が見られる – コーディング規約でのルール化 – DBアクセスロジックを過度に共通化 突発的なパフォーマンスダウンを避けるため、 盲目的にバインド変数を使用することは避け てほしい
  • 23. 「そもそも論」で考える • 「そもそも」SQLをバインド変数化する目的と は? – バインド変数化するメリット、デメリット – バインド変数化が「ある意味」盲目的に推奨され ている背景 • 「そもそも」実行計画の共有/非共有が、 「するか しないかの2択」なのはいかがなものか – もう少し賢い仕組みがあってしかるべきでは – というわけでAdaptive Cursor Sharing (11.1-)
  • 24. 実行計画の共有/非共有の判断 • WHERE条件が異なるSQLと実行計画の共有/非 共有 – nのSQLについて1つの実行計画を共有するか – nのSQLについてそれぞれnの実行計画を作成する • → 実行計画を共有するかしないか • 「そもそも」もうすこしインテリジェントな仕組みがあって も良いのでは?
  • 25. Adaptive Cursor Sharing (11.1-) • 作成済みの実行計画(≒子カーソル)が不適 切な場合は、自動的に新規に子カーソルを作 成する機能 ② SELECT * FROM tbl0 検索対象行 WHERE :sval < val AND val < :eval 1 10 ① SELECT * FROM tbl0 検索対象行 WHERE :sval < val AND val < :eval 100 5000 ① : SELECT * FROM tbl0 検索対象行 ② WHERE :sval < val AND val < :eval 100 5000
  • 26. Adaptive Cursor Sharingで万事OK? • 残念ながらそんなことはない – Feedback-Baseなので、最低1回は痛い目にあ わないとダメ – (実行イメージ) 作成済みの実行計画で実行 →(パフォーマンスダウン+)予測値と実測値に乖 離 →新規に実行計画を作成 • (大量データを処理する)バッチ処理の場合、 痛い目にあってからでは遅い・・・ – したがって、バッチ処理の場合は、SQLのリテラル 化がやっぱりオススメ
  • 27. ご参加いただきありがとうございました ひきつづき鼓動をお楽しみください
  • 28. 中間的な特性を持つSQLでは? • バッチ処理とOLTPの中間的な特性を持つ SQLでは、どういうアプローチが適切か – WHERE条件により最適な実行計画が異なる – 実行頻度はそれなりに高い、条件の種類も多い • 対処策 – たまに発生する実行計画の作成ミスには目をつぶ り、ACSに頼る – 最適な実行計画が異なるバインド変数値を洗い 出し、その場合のみリテラル化 or 実行計画を誘 導(それなりに大変なはず)
  • 29. CURSOR_SHARING=SIMILAR • CURSOR_SHARING – リテラルSQLを自動的にバインド変数化する機能 • CURSOR_SHARING=SIMILAR – SQLの種類とオプティマイザ統計の取得状況が 条件に合致する場合、WHERE条件毎に別の 子カーソル(≒実行計画)を作成する – 意図しない実行計画の共有を回避できる反面、 子カーソル数の肥大化を招く場合があるため、適 用は慎重に – 11.2以降で非推奨、11.2.0.3で使用不可