質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Oracle Database 12c

Oracle Database 12cは、RDBMS製品です。世界初の商用RDBMSであるOracle Databaseのバージョンで、2013年にリリース。クラウド対応を考慮して設計されました。主な機能には、マルチテナント対応やインメモリデータベースの実装などがあります。

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

Q&A

解決済

2回答

4219閲覧

Oracleの実行計画が書き換わる条件として、「新たなデータ参照用のSQL文の実行が増える」というものは存在するか?

teruq

総合スコア12

Oracle Database 12c

Oracle Database 12cは、RDBMS製品です。世界初の商用RDBMSであるOracle Databaseのバージョンで、2013年にリリース。クラウド対応を考慮して設計されました。主な機能には、マルチテナント対応やインメモリデータベースの実装などがあります。

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

0グッド

0クリップ

投稿2019/04/09 03:31

編集2019/04/09 05:44

いつも助けていただきありがとうございます。

表題の件について、
Oralce Databese12cを利用しているシステムにおいて、
システムを委託しているベンダーより

現在の検索処理に最適化されている実行計画が、新たな「検索」が増加することにより
実行計画が変化する可能性があり、その結果、既存の処理の検索効率が悪化する可能性がある。

という指摘を受けております。(詳細は割愛させていただきます…)
※新たな「検索」とは、WHERE句が異なる新たなSELECT文が増えるという意味です。

書き込みが増えることにより、実行計画が書き換わることがあるのは理解できるのですが、
本当に新たな検索が増えるだけで既存の実行計画は書き換わるのでしょうか?

==========追記==========

いろいろと割愛しすぎてわかりにくくなり申し訳ございません。

下記3画面が存在するWebサイトにおいて、

画面①:記事の一覧を取得し表示(SELECT * FROM interviews;)
画面②:タグで絞り込んだ記事の一覧を取得し表示(SELECT * FROM interviews LEFT OUTER JOIN tags ON ...)
画面③:ユーザの一覧を取得し表示(SELECT * FROM users;)

新規画面として「未回答の記事一覧を取得(SELECT * FROM interview WHERE kaitou = false)」する画面を作った場合、
この新規画面のSQLにより、①~③の画面でデータ取得用の実行計画に影響はあるのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

新たな「検索」が増加する

これが検索条件の追加という事なら、当然実行計画は変わる可能性はありますね。
検索項目を追加できる仕組みのEUCは良く見かけますが、そういった類なんでしょうか?

もしそうなら、動的に変更される検索用テーブルなどを用いた設計でなければ、性能に影響は出るでしょうね。

追記

新規画面として「未回答の記事一覧を取得(SELECT * FROM interview WHERE kaitou = false)」する画面を作った場合、この新規画面のSQLにより、①~③の画面でデータ取得用の実行計画に影響はあるのでしょうか?

新規の画面で、今までになかった抽出条件のSQLが発生しても、従来の画面で発行しているSQLに影響はありません。
新規画面のSQLに合わせて、チューニングの為にインデックスを追加したりすると従来の画面でのSQLの実行計画に影響が出る場合はあります。


開発を依頼した場合の見積もりの内容について疑問を持たれているように見受けられます。
新規で開発を依頼した画面のチューニングを施すでしょうから、そのチューニングが他の画面に影響が無いかどうか調査し、結果的に既存の機能の改修が発生する事はありますよ。

投稿2019/04/09 04:25

編集2019/04/09 07:05
sazi

総合スコア25173

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

teruq

2019/04/09 05:58

ご回答有り難うございます。 「新たな検索」が非常に曖昧でしたね。申し訳ございません。 新たな「検索」とは、WHERE句が異なる新たなSELECT文が増えるという意味で使っておりました。 質問に追記させていただきましたので、合わせてご確認いただけますと幸いです。
teruq

2019/04/09 10:20

なるほど、、、単純にSQLを追加するだけではない可能性があるということですね。 頂いた内容をベースに色々質問してみようと思います!ありがとうございました!
guest

0

パフォーマンス絡みの質問はできるだけ具体的な内容の方が適切な回答が付き易いです。

本当に新たな検索が増えるだけで既存の実行計画は書き換わるのでしょうか?

新たな検索が増えるだけ、ってのはわかりませんが、原因がわからないけどいつの間にか実行計画が変わった、ってのはあり得ます。データの追加・変更・削除があるテーブルにはきちんと統計情報を取得していないと実行計画が適切ではなくなってしまうことがあります。

投稿2019/04/09 03:43

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

teruq

2019/04/09 05:55 編集

ご回答有り難うございます。 「新たな検索」が非常に曖昧でしたね。申し訳ございません。 新たな「検索」とは、WHERE句が異なる新たなSELECT文が増えるという意味で使っておりました。 データの追加・変更・削除が原因でオプティマイザが実行計画を書き換えるのは良いのですが、 新たな検索(SELECT文)が増えただけで実行計画が書き換わるのかが知りたかったのです。 質問に追記させていただきましたので、合わせてご確認いただけますと幸いです。
Orlofsky

2019/04/09 06:40

>①~③の画面でデータ取得用の実行計画に影響はあるのでしょうか? 実行計画に影響はないです。ですが、実行計画が変わらないことを保証するものではありません。 将来なくなる機能ですが、DBMS_OUTLNパッケージhttps://docs.oracle.com/cd/E82638_01/arpls/DBMS_OUTLN.html#GUID-9ECBE2FC-FA2A-4A39-AA4A-395E6C4EDA71 を使うことも考えられます。通常はWebのレスポンス時間やバッチの実行時間を記録して、データ量が増えていないのに処理時間が増えていないかチェックしたり、必要に応じてAWRやstatspack のスナップショットを取得する機能も作り込むことがあります。 提示されたSELECT文ではORDER BYさえないので実用に耐えられないのでは? 差し支えない限り、create table, create index, join している文の全部も提示されたほうが良いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問