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

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

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

Oracle Databaseは、米オラクルが開発・販売を行うリレーショナルデータベース管理システムです。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

1回答

10877閲覧

SQLdeveloperの問合せに表示される秒数は何を表すか

lupus_dingo

総合スコア257

Oracle Database

Oracle Databaseは、米オラクルが開発・販売を行うリレーショナルデータベース管理システムです。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2017/09/26 02:22

編集2017/09/26 02:23

SQLdeveloperからクエリを実行すると問い合わせ結果(デフォルトではおそらくSQLワークシートの下)のヘッダに経過時間が表示されると思いますが、これは何に対する経過時間なのでしょうか?

私の環境では、
50行フェッチしました(12.345秒)
のように表示されますが、スクロールすると次の50行をフェッチしているようで
12.350秒
のようにほんの少しですが秒数が増えていきます。
これは最初の50行のフェッチだけ12.345秒かかり、次の50行は0.005秒しかかからないということでしょうか?
それとも全体の、例えば1000行全てフェッチするのに12.345秒かかり、表示のみに0.005秒かかっているということでしょうか?

SQLdeveloper3.0

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

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

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

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

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

guest

回答1

0

ベストアンサー

これは何に対する経過時間なのでしょうか?

データベースにクエリを発行して、結果が返ってくるまでの時間の累積時間かと思われます。

最初の50行のフェッチだけ12.345秒かかり、次の50行は0.005秒しかかからない

どちらかといえば、こちらのニュアンスの方が実態に即した内容かと思います。
SQLが実行される場合、結果を1行でも取得しようと思うと、最終的な結果まで計算されないとデータが返却できません。
そのため、複雑なSQLなどでは最初の実行にはどうしても時間がかかる場合があります。

ただし、結果が100万行となるようなSQLを実行しても、いきなり100万行すべてが返却されているというわけではありません。
カーソルという仕組みを使って、都度必要な行数分のみをデータベースから取得しています。
この操作がフェッチです。

SQL Developerではフェッチ行数の初期値が50行となっており、この値は変更可能です。
フェッチ処理で次の行を取得する際もデータベースとの通信が発生しており、このやり取りにかかる時間が経過時間として加算されるため、経過時間の値が少しずつ増えるということになっているものと思われます。

投稿2017/10/07 10:30

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

lupus_dingo

2017/10/09 22:38

>SQLが実行される場合、結果を1行でも取得しようと思うと、最終的な結果まで計算されないとデータが返却できません。 >このやり取りにかかる時間が経過時間として加算されるため、経過時間の値が少しずつ増えるということになっているものと思われます。 つまり、最初のフェッチはデータ取得にかかる時間でそれ以降はネットワークの時間ということでしょうか? 気にしているのは、実行計画とは別に実際のSQLのパフォーマンスを大量に計測する必要がある場合、sqlplusのspoolなどで測ると手間とファイルサイズがかかりすぎるので、SQL Developerの最初のフェッチで代用できないかということです。 二回目以降がネットワークのみの時間ならこの方法で問題ないと思っています。
退会済みユーザー

退会済みユーザー

2017/10/09 22:49

その前提を質問に記載頂きたかったと思います。 パフォーマンス計測なのであれば、AWRやStatspackを確認されることをおすすめします。
lupus_dingo

2017/10/09 23:56

awrとSQLdeveloperの経過時間は全く異なるのでしょうか? 例えばSQLをrownum50で固定すれば両者の前提条件が揃えられる(awrでも全体結果を読み込んでからサイトの50件のみを返すという考え方ならSQLdeveloperと同じ結果になるはず)など。 awrなどで取るのが一番正確だと思いますが、 正直、現環境で大量のawrを取得しようとするとプロジェクト固有の作法を含めてかなりの手間がかかるため、なるべくなら使用したくないです。 その代用案として今回のSQLdeveloperを使用した方法を思い付きました。 いろいろ記載不備があってすみません。
退会済みユーザー

退会済みユーザー

2017/10/10 00:27

Enterprise Managerの導入有無もありますが、開発者に割当てられている権限設定等の関係で、今できる範囲内で計測をしようとされている状況はお察しいたしますが、SQL Developerで表示される経過秒数はネットワークレスポンスも含まれるため、あたりをつけるには使えるかもしれませんがあくまで参考にしかなりません。 また、SGAのバッファキャッシュやインデックスの利用有無、同時利用状況なども影響してきますので、SQL Developerでの取得が早かったからといって、なんらの保証もされないものであることをご認識おきください。 Enterprise EditionであればAWRは自動取得されており、手間がかかるとしても必要なタイミングでレポート取得を依頼できるように調整されてはいかがでしょうか。OEM上からであれば適切な権限が付与されれば一般ユーザーにAWRレポートを取得させることも可能です。 Standard Editonでも、運用を考えるとStatspackの定期実行は行った方がよいものと思いますので、仕組みがないのであれば仕組みを作られるようにした方がよいかと思います。
lupus_dingo

2017/10/18 22:20

回答ありがとうございます。 やはりawrが一番よさそうですね。 自動取得はされているようですが、 おっしゃる通り権限の問題でそのファイルにアクセスするのがとても面倒なんです。。 SQLdeveloperではインデックスが使用されているかなど、どの実行計画の時の経過時間なのかわからないですもんね。 Statspackは全くわからないので調べてみます。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問