2012-04-24 8 views
3

私は1台のサーバー上に巨大なテーブルを持ち、テーブルを運用サーバーにコピーする必要があります。私はこれを行うことができますが、統計を生成する必要があります。これは、巨大な仕事を処理することを求めたくないシステムでは時間がかかります。データベース全体を移動する場合は、既存のデータベースを削除するためにシステムを停止する必要があります。これはノー・ノーです。TSQL STATS_STREAM(文書化されていない機能)の形式は何ですか?それはすべての統計データを含んでいますか?

Pinal Daveは、ポストにhttp://blog.sqlauthority.com/2011/01/05/sql-server-copy-statistics-from-one-server-to-another-server/ をポストを持って、彼は文書化されていないSTATS_STREAM機能を経由してコピーすることができますマイクロソフト社の使用して新しい「生成するスクリプトを、」1つのテーブルからの統計情報をコピーする方法について説明します。これは新しいテーブル用です。統計を使ってテーブルを作成してすべてのデータを書き込むことができるかどうかはわかりません。統計を更新する必要があるからです。統計を自動生成していても可能です。

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

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

まず、ありませんStats_Streamにすべての統計データが含まれていれば誰でも知っていますか?次に重要なのは、バイナリ形式でどのように格納されているのか?

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

注2:番号は省略記号で終了しません。私はデータを残しました。

答えて

3

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

+0

クローン・データベースは、データベースに追加のデータをコピーした後、同じ統計情報を保持していますか? –

+1

統計は、明示的な「統計の更新」ステートメントを発行したときのみ更新されているか「is_auto_update_stats_on」または「is_auto_update_stats_async_on」のいずれかを使用しているデータベース用に設定されている場合〜あなたのデータの10%は、統計が最後に更新された以降に変更されました。インデックスがあるようにあなたがそれをスライスどのような方法は、しかし、統計情報をリアルタイムで維持されていません。 –

+0

行を追加しても更新しないでください。私はauto_updateをオフにしておくことができます。 –