web-dev-qa-db-ja.com

列ストア圧縮用のsp_estimate_data_compression_savings

列ストアと列ストア列ストアのアーカイブ圧縮のために圧縮を保存する方法はありますか?

これらの圧縮の節約を確認するには、すべてのクラスター化インデックスと非クラスター化インデックスを削除してから、クラスター化列に格納されたインデックスを作成する必要があります。ほとんどの場合、これは時間のかかる操作であり、これを行う別の方法があるのではないかと思います。

3
gotqn

同等のプロシージャがないため、最近行っているのは、SELECT ... INTOを使用してtempdbにテーブルのコピーを作成することです。

SELECT TOP 10 PERCENT *
INTO tempdb.dbo.yourTable
FROM dbo.yourTable

次に、クラスター化された列ストアを適用します。テーブルが大きすぎてtempdbに収まらない場合(データウェアハウステーブルに期待できるように)、パーセンテージを転送してそこから推測します。 tempdbに空のテーブルを作成し、列ストアを追加してからデータを入力することもできますが、これにはおそらく時間がかかります。圧縮はINSERT時間にかなりの影響を及ぼします。 SELECT ... INTO手法には、インデックスを削除するという追加の利点があり、最小限のログ記録が可能であり、SQL2014で並行して実行することもできます。

例: 1TBのテーブルがあり、100GB(10%)をtempdbのテーブルにコピーします。クラスター化された列ストアインデックス(通常の圧縮)を適用し、テーブルサイズを確認します。 10GB、つまり10倍の圧縮にパックされています。 COLUMNSTORE_ARCHIVEモードでクラスター化された列ストアを再構築すると、テーブルは5GBまたは20倍の圧縮にパックされます。私の1TBテーブルは、アーカイブモードで100GBまたは50GBにパックされると推測できます。 推定値であるため、ある程度の許容誤差を許容します。

ドキュメントでは最大7倍の圧縮が提案されていますが、特にCOLUMNSTORE_ARCHIVEモードでは、読み取り時にCPUオーバーヘッドが発生するため、テストでより大きな要因が見られます。 YMMV。

6
wBob