3

DBeaver で初めてクエリを実行すると、結果が表示されるまでに最大 10 ~ 15 秒かかる場合があります。SQLDeveloper では、これらのクエリにかかる時間はごくわずかです。

例: シンプルな "select column1 from table1" ステートメント

DBeaver: 2006ms、SQLDeveloper: 306ms

例 2 (別の方法です。したがって、サーバー側のキャッシュはありません): 単純な "select column1 from table2" ステートメント

SQLDeveloper: 252ms、DBeaver: 1933ms

DBeavers のステータス ボックスには次のように表示されます。

  1. 結果セットを取得する
  2. ディスカバー属性 column1
  3. 属性 column1 を検索
  4. 遅延バインド属性 column1

2、3、および 4 は、クエリの実行時間のほとんどを使用します。

Oracle 11g、SQLDeveloper 4.1.1.19、および DBeaver 3.5.8 を使用しています。

http://dbeaver.jkiss.org/forum/viewtopic.php?f=2&t=1870を参照してください。

原因は何ですか?

4

2 に答える 2

3

DBeaver は、クエリ内のオブジェクトに関連するいくつかのメタデータを検索します。

Oracle DB では、次のようなカタログ テーブルにクエリを実行します。

  • SYS.ALL_ALL_TABLES / SYS.ALL_OBJECTS - 接続後、最初に実行するクエリに対して 1 回のみ
  • SYS.ALL_TAB_COLS / SYS.ALL_INDEXES / SYS.ALL_CONSTRAINTS / ... - 以前に使用されていないテーブルをクエリするたびに、私は信じています。

バージョン 3.6.10 では、これらのクエリで使用されるヒントを有効/無効にするオプションが導入されました。ヒントを無効にすると、私にとって大きな違いがありました。このオプションは、接続編集ダイアログの [Oracle プロパティ] タブにあります。詳細については、 dbeaverの github の問題 360 を参照してください。

于 2016-06-14T23:13:35.547 に答える
2

洞察を得る最善の方法は、データベース トレースを実行することです。

クエリを数回実行して、キャッシュ効果を排除します。

手順に従って両方の IDE で繰り返すよりも

トレースを有効にする

ALTER SESSION SET tracefile_identifier = test_IDE_xxxx;

 alter session set events '10046 trace name context forever, level 12'; /* binds + waits */

テストを識別するために xxxx を指定します。この文字列は、トレース ファイル名の一部として表示されます。

レベル 12 を使用して、待機イベントとバインド変数を確認します。

クエリを実行する

接続を閉じる

これは、他のものをトレースしないために重要です。

2 つのトレース ファイルを調べて、次のことを確認します。

  • どのようなステートメントが実行されましたか

  • フェッチされた行数

  • DBで経過した時間

  • 残りの時間はクライアント (IDE) が担当

これにより、ある IDE が他の IDE とは異なる動作をするか、発行された DB ステートメントが異なるかどうかを主張するのに十分な証拠が得られます。

于 2016-02-01T10:35:33.247 に答える