私のデータベースの 1 つで、workfiles created/sec パフォーマンス カウンターが 10K から 20K の間で制御不能に急上昇しています。
どのクエリがこの問題を引き起こしているかを調べる方法について誰か考えがありますか?
私のデータベースの 1 つで、workfiles created/sec パフォーマンス カウンターが 10K から 20K の間で制御不能に急上昇しています。
どのクエリがこの問題を引き起こしているかを調べる方法について誰か考えがありますか?
悲しいことに、SQL Server のドキュメントは、1 秒あたりに作成される作業ファイルの数が多い場合に何が起こっているかを完全に説明しているという点ではそれほど優れていません。
しかし、彼らはいくつかの洞察を提供します: http://msdn.microsoft.com/en-us/library/ms177426.aspx
まず、作業ファイル (作業テーブルとは対照的に) は HASH 結合とハッシュ集計を格納するために作成されることを指摘しています。ここでは通常、両方で多数の行/結果を結合/結合/集計しようとする操作のためにハッシュが行われます。方程式の側面 (たとえば、ネストされたループまたは他の結合/操作と比較して)。さまざまな結合タイプの詳細については、これを参照してください (すべてのハッシュ = 結合ではないことに注意してください): http://msdn.microsoft.com/en-us/library/ms191426%28v=SQL.100%29.aspx
そう。翻訳: 多数の作業ファイルが表示される理由は、ワークロードが 1 つのテーブル (または JOIN のセット) からの多数の結果を別のテーブル (または JOIN のセット) に対して何度も「マッシュ」しているためです。
マルチテナント システムでは、1 秒あたりに作成される作業ファイルの数が多いのが一般的です (つまり、ほとんどのチューニング専門家が SINGLE データベースに対して推奨する 20 未満の典型的な範囲よりも高い)。しかし、あなたが報告している数は明らかにかなり高いです。
とは言っても: - 他の問題 (ユーザーがあなたを殺すと脅している、ページの読み込みが遅いなど) が発生していない場合、(RAM が大量にある場合) これは大きな問題ではない可能性があります。代わりに、サーバーが問題なく処理しているという一種の「潜んでいる」問題である可能性がありますが、これにより、スケーリングする能力が妨げられます。- この問題を修正または修正する唯一の実際の方法は、コードと操作を確認することです。大量のデータに対して JOIN の GOB + 集計を実行しようとする単一/巨大なスライス + ダイス クエリで多数の行を結合している場合、それらの単一クエリを複数の小さな「サブクエリ」と「プレクエリ」に分割します。フィルタリングは、作成される作業ファイルの数を減らすことができます/減少し、全体的なパフォーマンスとスループットにかなりの影響を与えます (つまり、
ここで「事前フィルタリング」の概念について書きました: http://devproconnections.com/database-development/generating-high-performance-sql-server-query-results