4

1台のサーバーに巨大なテーブルがあり、そのテーブルを本番サーバーにコピーする必要があります。これは可能ですが、統計を生成する必要があります。これは、巨大な仕事を処理するように依頼したくないシステムでは長い時間がかかります。データベース全体を移動する場合、既存のデータベースを削除するためにシステムを停止する必要があります。これはノーノーです。

Pinal Daveには、http://blog.sqlauthority.com/2011/01/05/sql-server-copy-statistics-from-one-server-to-another-server/という投稿が あります。 Microsoftの「GenerateScripts」を使用して、あるテーブルから新しいテーブルに統計をコピーします。これにより、文書化されていないSTATS_STREAM機能を介してコピーできます。これは新しいテーブル用です。統計を使用してテーブルを作成し、すべてのデータを書き込むことができるかどうかはわかりません。これにより、システムが統計を更新する必要があるためです。おそらく、統計の自動生成をオフにしている場合でも同様です。

私は次のコードを使用しています:(テーブルはInvTblであり、更新しているそのテーブルの統計はGammaThetaです。統計は存在し、データはそこにあります。)

Update STATISTICS dbo.InvTbl [GammaTheta]  WITH STATS_STREAM = 0x0100002000...

まず、Stats_Streamにすべての統計データが含まれているかどうかを誰かが知っていますか?次に、重要なのは、それがどのようにバイナリに格納されているのかということです。

注:この表には、結合に基づいて検索する2つの変数の統計分布が格納されており、入力の分布に関していくつかの非常に重要な機能があります。これは静的であり、一度ロードされた値や統計を再計算する必要はありません。結合速度が重要であり、影響を受けるため、テストに基づいて、フルスキャンを使用しないことはオプションではありません。

注2:いいえ、数字は省略記号で終わりません。データを残しました。

4

1 に答える 1

4

私があなたの質問を理解している場合、統計ストリームは統計データのバイナリ表現であり、データが異なる別のテーブル(同じスキーマでも)でも、統計を完全に再作成するために使用できます。KevinKlineはここでそれについてブログに書いています。私はここでそれのより良い自動化にスイングしました。

于 2012-04-25T04:01:11.370 に答える