關於SQL 2008資料庫壓縮後收縮(database shrink)的測試實驗和效能比較
資料庫收縮效能問題可能會涉及一個關於棧內頁面壓縮的漏洞http://support.microsoft.com/kb/963658這篇文章討論中資料庫收縮之後可能頁面壓縮(page compression)會被移除,也許後續開發會完善這功能,讓收縮之後頁面壓縮重建。
總而言之,聚集索引是在壓縮和收縮方面最好用的工具
測試實驗環境引數
資料庫Database:
Normal 0 7.8 pt 0 2 false false false EN-US ZH-CN X-NONE
database_name database_size unallocated space
------------- -------------- ----------------
test1 26619.56 MB 15833.65 MB
reserved data index_size unused
----------- ------------ ------------ ----------
10418984 KB 6820040 KB 3571560 KB 27384 KB
包含一個表格: table1
Sp_spaceused table1
Normal
0
7.8 pt
0
2
false
false
false
EN-US
ZH-CN
X-NONE
name reserved data index_size unused rows
----- ------------- ------------ ------------ --------- --------
table1 10417560 KB 6819464 KB 3570824 KB 27272 KB 62113305
Normal 0 7.8 pt 0 2 false false false EN-US ZH-CN X-NONE
Sp_helpindex table1:
i_table_1 clustered located on PRIMARY SalesOrderDetailID
i_table1_1 nonclustered located on PRIMARY RowNumber, SalesOrderID, CarrierTrackingNumber, rowguid
SELECT PageCompressedAgain = page_count FROM
sys.dm_db_index_physical_stats (
DB_ID (),
OBJECT_ID ('table1'),
NULL, NULL, 'SAMPLED');
852433
439130
delete from table1 where RowNumber%47 =1
(1321559 row(s) affected)
測試指令碼:
print getdate()
dbcc shrinkfile(1)
print getdate()
測試1:
聚集索引條件下,行壓縮(cluster index + row compression)
Compression –log 4.85 GB (5,218,172,928 bytes)
SELECT PageCompressedAgain = page_count FROM
sys.dm_db_index_physical_stats (
DB_ID (),
OBJECT_ID ('table1'),
NULL, NULL, 'SAMPLED');
561638
439130
Sp_spaceused table1
table1 60791746 8046304 KB 4493104 KB 3552312 KB 888 KB
shrink log 1.40 GB (1,511,325,696 bytes)
收縮之後:
PageCompressedAgain
--------------------
561638
439130
table1 60791746 8046528 KB 4493104 KB 3552288 KB 1136 KB
Normal 0 7.8 pt 0 2 false false false EN-US ZH-CN X-NONE
database_name database_size unallocated space
-------------- --------------- ------------------
test1 9300.81 MB 0.19 MB
reserved data index_size unused
----------- ------------ ------------- ---------
8047936 KB 4493688 KB 3552960 KB 1288 KB
Mar 26 2010 3:46PM
Normal 0 7.8 pt 0 2 false false false EN-US ZH-CN X-NONE
DbId FileId CurrentSize MinimumSize UsedPages EstimatedPages
------ --------- ----------- ----------- ---------- --------------
12 1 1006016 256 1006000 1006000
(1 row(s) affected)
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
Mar 26 2010 3:52PM
耗時6分鐘.
測試2:
在聚集索引條件下,頁壓縮(cluter index + page compression)
Compression LOG 1.16 GB (1,248,985,088 bytes)
Shrink LOG 1.70 GB (1,828,716,544 bytes)
SELECT PageCompressedAgain = page_count FROM
sys.dm_db_index_physical_stats (
DB_ID (),
OBJECT_ID ('table1'),
NULL, NULL, 'SAMPLED');
PageCompressedAgain
--------------------
133567
439130
Shrink:
Mar 29 2010 7:15AM
DbId FileId CurrentSize MinimumSize UsedPages EstimatedPages
------ ----------- ----------- ----------- ----------- --------------
12 1 577032 256 577016 577016
(1 row(s) affected)
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
Mar 29 2010 7:25AM
耗時10 分鐘
測試3:
刪除聚集索引後做行壓縮,之後收縮資料檔案
Compression LOG 7.82 GB (8,404,074,496 bytes)
SELECT PageCompressedAgain = page_count FROM
sys.dm_db_index_physical_stats (
DB_ID (),
OBJECT_ID ('table1'),
NULL, NULL, 'SAMPLED');
PageCompressedAgain
--------------------
541300
392331
Shrink --log 1.87 GB (2,011,627,520 bytes)
PageCompressedAgain
--------------------
541600
451801
Mar 26 2010 4:29PM
DbId FileId CurrentSize MinimumSize UsedPages EstimatedPages
------ ----------- ----------- ----------- ----------- --------------
12 1 999512 256 999496 999496
(1 row(s) affected)
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
Mar 26 2010 7:04PM
耗時2小時35分鐘
測試 4
刪除聚集索引後做頁壓縮
compression log 140MB
shrink log 2.06 GB (2,212,823,040 bytes)
SELECT PageCompressedAgain = page_count FROM
sys.dm_db_index_physical_stats (
DB_ID (),
OBJECT_ID ('table1'),
NULL, NULL, 'SAMPLED');
PageCompressedAgain
--------------------
127000
437707
Mar 29 2010 5:55PM
DbId FileId CurrentSize MinimumSize UsedPages EstimatedPages
------ ----------- ----------- ----------- ----------- --------------
12 1 571048 256 571032 571032
Mar 29 2010 8:10PM
耗時2小時10分鐘.
結論
1. 無論是row compression還是page compression,有clustered index的情況下,shrink的效能都比沒有clustered index的要快幾十倍。
2. Row compression 的過程生成的log是page compression的4-5倍。
3. 在同樣的compression模式下,沒有clustered index的資料庫shrink所生成的log 要略多於 有clustered index的資料庫。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25175503/viewspace-704935/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [zt] 收縮使用者資料庫 (shrink database)資料庫Database
- Linux壓縮工具的效能比較Linux
- 壓縮工具效能測試
- 關於收縮資料檔案的嘗試
- SQL Server收縮資料庫SQLServer資料庫
- sql server 資料庫收縮SQLServer資料庫
- 實現SQL Server 2008資料壓縮SQLServer
- 11g 資料庫rman壓縮備份壓縮率測試資料庫
- 關於資料庫壓縮技術的Survey資料庫
- SQL Server 2008 表和索引的行壓縮和頁壓縮SQLServer索引
- 大資料中批次壓縮與獨立壓縮的比較 - Bozho大資料
- Java不同壓縮演算法的效能比較Java演算法
- mysql資料庫xtrabackup壓縮備份測試MySql資料庫
- AWS Graviton2上資料壓縮演算法效能比較演算法
- sqlserver收縮資料庫、收縮資料檔案的操作SQLServer資料庫
- SQL Server 2008中的資料壓縮功能SQLServer
- 表空間(資料檔案shrink)收縮示例
- AIX下的壓縮測試及所有壓縮命令AI
- shrink收縮檔案空間
- SQL Server如何截斷(Truncate)和收縮(Shrink)事務日誌SQLServer
- sqlserver 資料庫收縮的方法SQLServer資料庫
- 關於資料庫壓力測試的故事資料庫
- MYSQL壓縮表測試MySql
- Linux下各壓縮方式測試(壓縮率和使用時間)Linux
- 資料庫收縮,刪除日誌,自動收縮,資料庫分離附加資料庫
- PHP的壓縮函式實現:gzencode、gzdeflate和gzcompress比較PHP函式
- SQL Server 2008的新壓縮特性SQLServer
- Oracle 10g Shrink Table - Shrink Space 收縮空間Oracle 10g
- SQL Server 2008 備份壓縮SQLServer
- 備份和恢復SQL Server資料庫+壓縮ACCESS的類(方法)SQLServer資料庫
- android 比較靠譜的圖片壓縮Android
- Oracle壓縮黑科技(二)—壓縮資料的修改Oracle
- 資料庫壓縮技術探索資料庫
- 資料庫自動收縮造成的阻塞資料庫
- IBM收購實時資料壓縮廠商Storwize(轉)IBM
- 關於收縮表和表空間的相關概念(Shrinking Database Segments Online)Database
- 【SHRINK】Oracle收縮表的詳細命令參考Oracle
- 比較SQL資料庫和HadoopSQL資料庫Hadoop