問題タブ [cbo]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
9 に答える
135033 参照

sql - PostgreSQL-列の最大値を持つ行をフェッチします

time_stamp、usr_id、transaction_id、lives_remainingの列を持つレコードを含むPostgresテーブル(「lives」と呼ばれる)を扱っています。各usr_idの最新のlives_remaining合計を取得するクエリが必要です

  1. 複数のユーザーがいます(個別のusr_id)
  2. time_stampは一意の識別子ではありません。同じtime_stampでユーザーイベント(テーブル内の行ごと)が発生する場合があります。
  3. trans_idは、非常に短い時間範囲でのみ一意です。時間の経過とともに繰り返されます
  4. (特定のユーザーの)remaining_livesは、時間の経過とともに増加および減少する可能性があります

例:

指定された各usr_idの最新データを使用して行の他の列にアクセスする必要があるため、次のような結果を返すクエリが必要です。

前述のように、各usr_idはライフを獲得または喪失する可能性があり、これらのタイムスタンプ付きイベントは非常に接近して発生するため、同じタイムスタンプを持つ場合があります。したがって、このクエリは機能しません。

代わりに、time_stamp(最初)とtrans_id(2番目)の両方を使用して正しい行を識別する必要があります。次に、その情報をサブクエリからメインクエリに渡して、適切な行の他の列のデータを提供する必要があります。これは、私が機能するようになったハッキン​​グされたクエリです。

さて、これは機能しますが、私はそれが好きではありません。クエリ内のクエリ、自己結合が必要です。MAXが最大のタイムスタンプとtrans_idを持っていることがわかった行を取得することで、はるかに簡単になると思います。テーブル「lives」には解析する行が数千万行あるので、このクエリをできるだけ高速かつ効率的にしたいと思います。私は特にRDBMとPostgresを初めて使用するので、適切なインデックスを効果的に使用する必要があることを知っています。最適化する方法に少し迷っています。

私はここで同様の議論を見つけました。Oracle分析関数に相当するある種のPostgresを実行できますか?

集計関数(MAXなど)で使用される関連する列情報へのアクセス、インデックスの作成、およびより適切なクエリの作成に関するアドバイスをいただければ幸いです。

PS以下を使用して、私の例のケースを作成できます。

0 投票する
5 に答える
20399 参照

mysql - この遅い mysql クエリを改善するためのヒントはありますか?

通常は 1 秒未満で実行されるクエリを使用していますが、完了するまでに 10 ~ 40 秒かかる場合があります。サブクエリがどのように機能するかについては、実際には完全に明確ではありません。faverprofileid ごとに 15 行が得られるという点で、それが機能することだけはわかっています。

遅いクエリをログに記録すると、5823244 行が検査されたことがわかります。これは、関連するテーブルのいずれにもそれほど多くの行がないため、奇妙です (お気に入りテーブルには 50,000 行が最も多くあります)。

誰かが私にいくつかの指針を提供できますか? サブクエリの問題であり、ファイルソートを使用する必要がありますか?

編集: Explain を実行すると、 users テーブルがインデックスを使用していないことが示されます (id が主キーであっても)。余分な下には、次のように書かれています:一時的な使用。ファイルソートの使用。

0 投票する
1 に答える
3436 参照

performance - ヒントなしでハッシュ結合、group by および order by の Oracle CBO コスト見積もりを増やす方法

一部のサーバーでは、ハッシュ結合、group by および order by のコストが実際のコストに比べて低すぎるようです。つまり、多くの場合、インデックス レンジ スキャンを使用した実行計画は前者よりも優れていますが、実行計画ではコストが高くなります。

さらにいくつかの注意事項:

  1. 私はすでにoptimizer_index_cost_adjを20に設定していますが、それでも十分ではありません. 純粋な全テーブル スキャンのコストを増やしたくありません。実際、オプティマイザがコストを削減してもかまいません。
  2. pga_aggregate_targetが CBO コストの見積もりに影響を与えることに気付きましたが、十分な RAM があるため、このパラメーターを下げたくありません。
  3. 個々のクエリでオプティマイザ ヒントを使用するのではなく、設定をグローバルにしたいと考えています。

編集 1: 動的サンプリングを試してみることを考えていますが、これが全体的なパフォーマンスにどのように影響するか、つまり実行計画が変更される頻度を予測するのに十分な詳細な知識がありません。私は間違いなく非常に安定したものを好みます。実際、最大のクライアントの一部では、すべての統計をロックするポリシーがあります (これは Oracle 11g SQL Plan Management で変更されます)。

0 投票する
3 に答える
1027 参照

sql - NULL CBO インデックス修正による Oracle MAX() のバグにより、インデックスが制限される

2011 年 1 月 31 日更新

私はDBの制限に逆らっていると思います。GROUP BY 式
とすべての不明確な集計関数が、1 つの
データベース ブロックを超えている可能性があります。http://download.oracle.com/docs/cd/B19306_01/server.102/b14237/limits003.htm
を参照してください。

元の投稿:

これは、Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod にあります。


matchKey が同じ 2 つのレコード(
contributionP NULL 値を持つレコードと NULL 以外の値を持つレコード) がある場合、次の挿入は真の MAX() 値を返しません。
MAX() によって返される値が NULL 値である場合があります。

次のようにインデックスを作成し、CBO のヒントを与える場合

これにより、MAX() が正しく動作します。

15 列を追加し、インデックスを変更する必要があります

小さな問題

ORA- 01793
を返します: インデックス列の最大数は 32 です

最初の MAX() は大きな列セットでは機能しません。次に、index+CBO パッチ
がインデックスの制限につながります。

助言がありますか?

0 投票する
1 に答える
558 参照

sql - Oracle クエリに「distinct」キーワードを追加すると、理由もなくクエリのパフォーマンスが低下する

私は、Oracle 10 データベースで見ているものにかなり混乱しています。

次のクエリがあります。

私には特別なことのようには思えません。autotrace のベースライン パフォーマンスの数値は次のとおりです。

CR_GETS: 318

CPU: 3

行: 33173

ここで、「DISTINCT」キーワードをクエリに追加すると (たとえば、「select distinct t2.duplicate_num...」)、これが発生します。

CR_GETS: 152921

CPU: 205

行: 305

クエリ プランは変更されていませんが、論理 IO は 500 倍に増加しています。CPU のみが上昇し、論理 IO はほとんど変化しないと予想していました。

最終的な結果は、distinct キーワードを使用したクエリの実行速度が 10 ~ 100 倍遅くなります。わずかな時間で結果セットを区別するコードをアプリケーションに入れることができます。これはどのように意味がありますか?特にクエリプランを変更せずに?

0 投票する
1 に答える
516 参照

java - Java での遠心性カップリングの計算

ソース ファイルから Java プログラムの遠心性結合 (オブジェクト間の結合) を計算する必要があります。

私はすでに Eclipse で jdt を使用して抽象構文ツリーを抽出していますが、別のクラスからクラスの依存関係を直接抽出できるかどうかはわかりません。

メトリック プラグインを使用できません。

ご協力いただきありがとうございます。

0 投票する
1 に答える
929 参照

oracle - Oracle が where 句に条件を追加するとクエリが遅くなる

いくつかのテーブルに基づいてレポートを生成すると、そのうちのいくつかは非常に巨大 (10 億以上のレコード) で、一部はかなり小さい (100 レコード) で、17 分かかります。しかし、where句に条件を追加すると、1時間以上実行され始めました。

table1 には 10 億以上のレコードがあり、追加された条件は "and line_ind in ('Y', '*')" です。問題は、CBO が結合の結果セットから検索できるのに、なぜ全テーブル スキャンを行うのかということです。順序付けられたヒントは役に立たないようで、この選択をより速く実行する方法を考えています.?

テーブルのレコード数は次のとおりです

計画の説明