問題タブ [sql-server-performance]
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.
sql-server - 同じインデックス操作で異なる推定行?
導入と背景
簡単なクエリを最適化する必要がありました (以下の例)。何度か書き直したところ、クエリの書き方によって、同じインデックス操作の推定行数が異なることがわかりました。
当初、クエリはクラスター化インデックス スキャンを実行しました。本番環境のテーブルにはバイナリ列が含まれているため、テーブルが非常に大きく (約 100 GB)、テーブル全体のスキャンの実行に時間がかかりすぎます。
質問
同じインデックス操作で推定行数が異なるのはなぜですか (例を示します)。オプティマイザーはここで何をしていますか?
サンプル データベース - SQL Server 2008 R2 を使用しています
動作を示す本番テーブルの非常に単純化されたバージョンを作成しようとしました。
準備が整ったので、クエリを開始しましょう
最初に統計を見てみましょうRANGE_HI_KEY=8
。489 個の EQ_ROWS があります。
次に、クエリを実行します。最初のものは、最適化する必要があった元のクエリです。実行時に現在の実行計画を有効にしてください。「インデックス シーク (非クラスター化) [DetailTable].[IX_DetailTable]」操作を見てください。
分析と最終質問
「インデックス シーク (非クラスター化) [DetailTable].[IX_DetailTable]」の操作をご覧ください。
上記のスクリプトのコメントは、推定および実際の行数について取得した値を示しています。
私たちの実稼働環境では、このテーブルには 3,300 万行があり、上記のクエリの推定行数は 300 万から 1,600 万まで異なります。
要約する:
DetailTable と MasterTable の間の結合が行われると、推定行数は 12.5% です (マスター テーブルには 8 つの値があり、理にかなっています...)
DetailTable とテーブル変数の間の結合が行われると、推定行数は 10% です。
DetailTable と一時テーブルの間の結合が行われると、推定される行数は実際の行数とまったく同じになります
問題は、なぜこれらの値が異なるのかということです。
統計は最新のものであり、見積もりを行うのは本当に簡単です。
これだけは理解しておきたい。
.net - 1 分あたりの膨大な数のデータベース リクエストでアプリケーションを最適化する
free demo
アプリケーションでエンドユーザーに何らかのサービスを提供する必要があります。などの無料デモ30 mins, 1 hours, 5 hours
( predefined time
) 新規ユーザーは 1 回限り。
ユーザーはその時間を部分的に消費することもできます。30 分間の無料デモのように、今日は 10 分間、明日は 15 分間、翌日は残りの時間を使用できます。ユーザーが 30 分間の無料デモを選択し、ログインしてサービスを使用すると、. 開始時間と終了時間でユーザーを 30 分間制限できます。開始時間と終了時間の合計が 30 分に等しい場合、支払いページに送信できます。
現在、ユーザーがブラウザを閉じたり、インターネットが機能しなくなったり、アクティブなセッション中に最後に何かが発生した場合など、いくつかの不確実な条件で問題が発生します。これでは、終了時間がないため、消費された時間を計算できません。
シナリオは次のようになります (30 分間のデモ)。
同時に 100,000 人以上のユーザーがサービスを利用する可能性があるため、これに対する効率的なソリューションを見つけています。
私の理解では、別のジョブを作成してユーザーの LastActiviteTime を確認し、それに基づいてデータベースで Consumed(mins) を更新できます。そのジョブは毎分実行され、一方で各セッション ユーザーのブラウザはLastActiveTime
データベース内を更新します。
これで問題は解決しますが、1 分間に膨大な数のデータベース リクエストが発生するため、アプリケーションのパフォーマンスについてはよくわかりません。
sql-server - Over Partition By と Group By の SQL Server パフォーマンス比較
Over Partition By
との違いについていくつかの質問がすでに SO に投稿されていましたが、Group By
どちらがより優れているかについての決定的な結論は見つかりませんでした。
SqlFiddleで簡単なシナリオを設定しましたがOver (Partition By)
、より優れた実行計画を誇っているようです (ただし、私はそれらにあまり慣れていません)。
テーブル内のデータの量はこれを変更することになっていますか? Over (Partition By)
その後、最終的にパフォーマンスが向上しますか?
sql-server - SQL Server テーブル値パラメーター ストアド プロシージャの制限
でテーブル値パラメーターのストアド プロシージャを使用していますSQL Server 2008/2012
。過去に、50k 行を渡すインスタンスの問題 (インスタンスの応答停止、メモリの問題) があったため、現在は tvp の行数を 5-10k に制限しています。
テーブル値パラメーター ストアド プロシージャに渡す行数に制限はありますSQL Server 2012/2016?
か? 安全な方法で >=100k を渡す tvp ストアド プロシージャを使用する方法はありますか? この問題を回避するより良い方法はありますか?
ありがとうございました