問題タブ [sql-tuning]
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.
performance - 「TABLE ACCESS BY INDEX ROWID」は、インデックスまたはテーブルを使用するオプティマイザーを意味しますか?
TABLE ACCESS BY INDEX ROWID
Optimizer がrowid
インデックスまたはスキャン テーブルにアクセスして を取得していることを意味しrowids
ますか?
現在、クエリは数秒で終了しています。しかし、計画では、インデックスを使用しないと述べており、両方のテーブルに適切なインデックスがあります。
mysql - NOT IN クエリをより良いパフォーマンスに変換する
MySQL 5.0 を使用しており、このクエリを微調整する必要があります。これで私ができるチューニングを誰か教えてください。
tsql - Sybase ASE - パフォーマンスの Select Into と Insert Select
ログに記録されていないため、select into のパフォーマンスは、insert/select の組み合わせよりも優れていることがわかりました。しかし、今日、私は別のシナリオに遭遇しました。物理テーブルから一時テーブルへの選択を行っており、410 秒で 240 万レコードを挿入しますが、これを選択ステートメントに分割して最初にテーブルを作成し、次に挿入/選択を使用してデータを挿入すると、同じクエリで、10.6 秒で 240 万件のレコードがクリックされます。
私は混乱しています、理由は何ですか?
410 秒で 240 万件のレコードが挿入されました
10.6 秒で 240 万件のレコードを挿入
ジャンからのコメント後
今、その行動は奇妙です。最初にクエリ 1 を実行し、次にクエリ 2 を実行すると、結果は上記のようになります。しかし、順序を入れ替えると、クエリ 1 は ~9 秒で実行され、クエリ 2 は ~7 秒で実行されます。
クエリ 1
クエリ 2
sql - spid のステータスが一時停止されている理由を調べる方法は? spid が待機しているリソースは?
実行するEXEC sp_who2 78
と、次の結果が得られます。
ステータスが中断されている理由を確認するにはどうすればよいですか?
このプロセスはINSERT
、コストのかかるクエリに基づいた重いものです。SELECT
複数のテーブルからデータを取得し、約 3 ~ 400 万行を別のテーブルに書き込むビッグ。
ロック/ブロックはありません。
waittype
リンク先はですCXPACKET
。下の写真でわかるように 9 つの 78 があるので、これは理解できます。
私が気になっていること、そして本当に知りたいことは、なぜSPID
78 の背番号 1 が出場停止になったのかということです。
のステータスSPID
が中断されている場合、プロセスがリソースを待機していることを意味し、リソースを取得すると再開されることを理解しています。
これについての詳細はどうすればわかりますか? 何の資源?なぜ利用できないのですか?
以下のコードとそのバリエーションをよく使用しますが、SPID
が中断された理由を調べるために他にできることはありますか?
私はすでにsp_whoisactiveを使用しました。この特定の spid78 で得られた結果は次のとおりです: (画面に合わせて 3 つの写真に分割)
sql - 移行後の SQL パフォーマンス分析
多くの Oracle DB を ESX 環境 (まったく同じシステム、DB バージョンなど) の新しい仮想マシンに移行します。異なるストレージが使用されているため、私の懸念はディスク IO パフォーマンスです。後で比較するために、移行前と移行後に SQL 負荷チェックを実行する必要があります。これ以上詳細なパフォーマンス分析を行う時間はないので、非常に簡単なテストを行うことにしました。
40 000 000 行の挿入を実行し、移行前と移行後の操作の時間を測定します。
DB に他のアクティビティがなければ、この種のテストで十分ですが、テスト中に他の接続を停止することはできません。そのため、他のワークロードがテスト挿入の結果に影響を与える可能性があります。
この問題を解決するための私の考えは、一連のテストを実行し、各テスト中に統計を収集して、各テストが実行されたときの環境を把握することです。次に、同様のワークロードで実行されたテストのみを比較します。
この問題へのアプローチ方法、このアイデアについてどう思いますか、どのような統計を収集する必要があるか教えていただけますか?
sql - DBA_HIST_SQLSTAT: 実行回数がゼロである間の経過時間はゼロではありません
こんにちは、ビュー dba_hist_sqlstat のいくつかの sql_ids 統計で奇妙な状況が見つかりました。実行値がゼロに等しい場合、それらはゼロ以外の経過時間値を持つようです。それがどのように可能かわかりません。セッションが非アクティブであるか、待機イベントが発生している場合に発生する可能性があります。これはどういう意味ですか?
sql - Oracle で NOT EXISTS のパフォーマンスを改善する方法
私のSQL文は次のようになります。table1 と table3 には 1000000 行以上あり、table2 には 100 行あります。この SQL ステートメントは非常に低速です。100秒以上かかります。それを改善する方法はありますか?
sql - 結合のない Oracle IN 句のパフォーマンスへの影響は何ですか?
この形式のクエリは、平均して約 100 個の in 句要素を使用し、まれに 1000 個を超える要素を使用します。要素が 1000 を超える場合は、in 句を 1000 (Oracle の最大値) に分割します。
SQL の形式は次のとおりです。
私が選択しているテーブルは巨大で、in 句にあるものよりも数百万行多く含まれています。私の懸念は、オプティマイザがテーブル スキャンを実行することを選択する可能性があることです (データベースには最新の統計情報がありません - そうです - わかっています ...)
主キーの使用を強制するために渡すことができるヒントはありますか?主キーのインデックス名を知らなくても、おそらく ... /*+ DO_NOT_TABLE_SCAN */?
そのようなデータを引き戻すための創造的なアプローチはありますか?
- 往復回数が最も少ない
- 最小数のブロックを読み取ります (論理 IO レベルで?)
- これで速くなるのか..
sql - SELECT (MIN) vs ORDER BY ASC WITH FOR UPDATE
テーブル test1 (TXID プライマリ キー、STATE、NEXTRUN、TARGET) があり、状態 (入力として渡される) の最小の NEXTRUN を持つ行を取得したいと考えています。
MIN() を使用したクエリ 1:
説明計画は示しています ( 2 TABLE ACCESS FULL)
ORDER BY と ROWNUM を使用したクエリ 2:
説明計画:
デッドロックの防止とパフォーマンスの点で、どちらが優れたクエリですか? クエリは、複数のスレッド (接続) から呼び出されます。最初のケース (2 TABLE ACCESS FULL) でデッドロックが発生することがあります。したがって、クエリ2を試しています。