sp_estimate_data_compression_savings (Transact-SQL)
傳回目前資料表大小,並針對要求的壓縮狀態預估資料表大小。可以針對整個資料表或部分資料表評估壓縮,這包括堆積、叢集索引、非叢集索引、索引檢視表以及資料表和索引資料分割。可以使用資料列壓縮或頁面壓縮來壓縮資料表結構。如果資料表、索引或資料分割已經壓縮,您可以使用此程序來評估未壓縮之資料表、索引或資料分割的大小。
[!附註]
壓縮和 sp_estimate_data_compression_savings 只適用於 SQL Server 2008 Enterprise 和 Developer 版本。
若要預估使用要求壓縮設定之物件的大小,此預存程序會取樣來源物件,並將此資料載入 tempdb 內所建立的同等資料表和索引中。然後會將 tempdb 內所建立的資料表或索引壓縮成要求的設定,並計算預估的壓縮節省程度。
若要變更資料表、索引或資料分割的壓縮狀態,請使用 ALTER TABLE 或 ALTER INDEX 陳述式。如需有關壓縮的一般資訊,請參閱<建立壓縮資料表及索引>。
[!附註]
如果現有的資料已分割,您或許能夠減少資料的大小,而不需要重建索引來使用壓縮。如果是索引,將會在索引重建時套用填滿因數,這樣可能會增加索引的大小。
語法
sp_estimate_data_compression_savings
[ @schema_name = ] 'schema_name'
, [ @object_name = ] 'object_name'
, [@index_id = ] index_id
, [@partition_number = ] partition_number
, [@data_compression = ] 'data_compression'
[;]
引數
[ @schema\_name = ] 'schema_name'
這是包含資料表或索引檢視表的資料庫結構描述名稱。schema_name 是 sysname。如果 schema_name 為 NULL,就會使用目前使用者的預設結構描述。[ @object\_name = ] 'object_name'
這是索引所在的資料表或索引檢視表名稱。object_name 是 sysname。[ @index\_id = ] 'index_id'
這是索引的識別碼。index_id 是 int,而且可以是下列其中一個值:索引的識別碼、NULL 或 0 (如果 object_id 為堆積)。若要傳回基底資料表或檢視表的所有索引相關資訊,請指定 NULL。如果您指定 NULL,您也必須對 partition_number 指定 NULL。[ @partition\_number = ] 'partition_number'
這是物件中的資料分割編號。partition_number 是 int,而且可以是下列其中一個值:索引或堆積的資料分割編號、NULL 或是 1 (若為非資料分割索引或堆積)。若要指定資料分割,您也可以指定 $partition 函數。若要傳回主控物件之所有資料分割的相關資訊,請指定 NULL。
[ @data\_compression = ] 'data_compression'
這是要評估的壓縮類型。data_compression 可以是下列其中一個值:NONE、ROW 或 PAGE。
傳回碼值
0 (成功) 或 1 (失敗)
結果集
系統會傳回下列結果集,以提供目前和預估的資料表、索引或資料分割的大小。
資料行名稱 |
資料類型 |
描述 |
---|---|---|
object_name |
sysname |
資料表或索引檢視表的名稱。 |
schema_name |
sysname |
資料表或索引檢視表的結構描述。 |
index_id |
int |
索引的索引識別碼: 0 = 堆積 1 = 叢集索引 > 1 = 非叢集索引 |
partition_number |
int |
資料分割編號。如果是非資料分割的資料表或索引,則會傳回 1。 |
size_with_current_compression_setting (KB) |
bigint |
目前存在且要求之資料表、索引或資料分割的大小。 |
size_with_requested_compression_setting (KB) |
bigint |
使用要求之壓縮設定的資料表、索引或資料分割的預估大小,以及適用的現有填滿因數 (假設沒有片段)。 |
sample_size_with_current_compression_setting (KB) |
bigint |
使用現有壓縮設定所建立的樣本大小,以及適用的現有填滿因數 (沒有片段)。由於此資料列集是從頭開始建立的,所以沒有片段。 |
sample_size_with_requested_compression_setting (KB) |
bigint |
使用要求之壓縮設定所建立的樣本大小,以及適用的現有填滿因數 (沒有片段)。 |
備註
使用 sp_estimate_data_compression_savings 可預估當您啟用資料表或資料分割進行資料列或頁面壓縮時,可以產生的節省程度。例如,如果資料列的平均大小可縮減 40%,您就可能會將物件的大小縮減 40%。您可能無法節省空間,因為這是根據填滿因數和資料列的大小而定。例如,如果您有一個長度為 8000 個位元組的資料列,而且您將它的大小縮減 40%,則仍然只能在資料頁面上容納單一資料列。無法節省任何空間。
如果執行 sp_estimate_data_compression_savings 的結果指示資料表將會成長,就表示資料表中的許多資料列都使用資料類型的幾乎完整有效位數,而且壓縮格式所需的小型負擔增加會比壓縮的空間節省更大。在這種罕見情況下,請勿啟用壓縮。
如果資料表已啟用壓縮,請使用 sp_estimate_data_compression_savings 來預估未壓縮資料表時的資料列平均大小。
進行這項作業期間,將會取得資料表的 (IS) 鎖定。如果無法取得 (IS) 鎖定,此程序將會被封鎖。資料表會在讀取認可的隔離等級下掃描。
如果要求的壓縮設定與目前的壓縮設定相同,則預存程序將會傳回預估的大小,其中不含任何資料片段,而且會使用現有的填滿因數。
如果此索引或資料分割識別碼不存在,則不會傳回任何結果。
權限
需要資料表的 SELECT 權限。
範例
下列範例會預估 AdventureWorks 資料庫中 Production.WorkOrderRouting 資料表的大小 (如果使用 ROW 壓縮來將它壓縮)。
USE AdventureWorks
GO
EXEC sp_estimate_data_compression_savings 'Production', 'WorkOrderRouting', NULL, NULL, 'ROW' ;
GO