*と *パーティションがアクセスされている場合 *と * sql server 2008 dbエンジンを伝えるにはどうすればよいですか
-
27-09-2019 - |
質問
設定
- 並列性のしきい値のコスト:5
- 並列性の最大度:4
- プロセッサの数:8
- SQL Server 2008 10.0.2.2757
- 多くの参加、多くのレコードを含む質問があります。
- デザインは星です。 (参照テーブルにFKSを備えた中央テーブル)
- 中央のテーブルは、関連する日付列に分割されています。
- パーティションスキーマは数日ごとに分割されます
- データはパーティションスキーマ全体に非常によく分割されています - パーティションスキーマに割り当てられたファイルグループのファイルのサイズを比較することで判断されます
- 関係するクエリには、分割列の上に述語が設定されています。 (cs.dte> = @min_dateおよびcs.dte <@max_date)など
- 日付パラメーターの値は @ミッドナイトの1日です。2010-02-01、2010-02-02
- 推定クエリ計画は、並列性を示していません
a)この質問は、SQL Server 2008データベースエンジンに関するものです。 OLTPエンジンのクエリが実行されているとき、Progress Endイベントを使用してSSASクエリをプロファイリングするときに、「PartititionXyzの読み取り」のようなものを見るときに、洞察のような洞察を見たい /見たいです。
b)推定クエリ計画または実際のクエリ計画に並列処理が示されていない場合、それはすべてのパーティションがチェック /読み取られたことを意味しますか? *私がここで言おうとしていたのは、クエリプランに並列性が表示されないだけです。クエリが複数のパーティションにヒットしていないことを保証しませんか?または - 並列処理と#パーティションにアクセスされる確固たる関係はありますか?
c)提案?私が提供する必要がある詳細情報はありますか?
d)実際のクエリプランを見て、クエリが並行して並行して処理されているかどうかを知るにはどうすればよいですか? *どのパーティションが使用されているかを特定するのに役立つ場合にのみ、私はこれに本当に興味があります。
11月10日追加
これを試して:
- それを作成します したほうがいい 1、3、およびすべてのパーティションを押します
- SSMSクエリウィンドウを開き、実行します
SET SHOWPLAN_XML ON
- そのウィンドウで各クエリを1つずつ実行します
- 各実行は、XMLのチャンクをキックアウトします
- これらのXMLの結果を比較します(テキストDIFFツールを使用し、「比較」しますが、同様のツールはどんなものも行います)
実行計画が大きく異なることがわかります。私の「3」と「すべて」のクエリには、(それぞれ)テーブル内のすべてのパーティションのエントリがある「ConstantsCan」というタグ付けされたテキストがあり、そのセクションは「1パーティション」クエリには存在しません。 。私はこれを使用して、はい、SQLはそれが言うことをしていることをしています。
解決
他のヒント
a)クエリがまだ実行されている間にクエリがどのように進行したかを判断する方法を知りません。ラッチングとロックシステムのビューで気分が悪くなったのかもしれませんが、私はそれを疑います。 (残念ながら、2つの間に類似点を描くのに十分なSSAに精通していません。)
b)SQLは、おそらく単一のテーブル内の複数のパーティションを操作する場合、おそらく並列性を使用します。その場合、クエリプランに並列処理「トークン」が表示されます。ただし、何らかの理由で並列性が呼び出されない場合、複数のパーティションを読み取る必要がある場合、並列性を使用せずに読み取られます。
d)おそらくできない別のこと。非常に制御されたCirsumstancesでは、System Monitor(Perfmon)を使用して、CPUの使用状況を追跡するか、クエリの実行中にディスク読み取りを追跡できます。これは、サーバーが他の作業を実行している場合、またはデータがメモリに居住している場合(バッファキャッシュ)、使用が限られている場合は役に立ちません。
c)あなたが実際に理解しようとしていることは何ですか?一定期間にわたってユーザーがアクセスしているパーティション(もしあれば)はどれですか? SQLは「スマート」クエリプランを生成していますか?データ、構造、クエリの詳細がなければ、アドバイスを作成するのは困難です。