今天在有台服务器硬盘突然告警了,排查了一下发现是SQL Server的mdf文件太大,把硬盘给撑爆了。所以就有一个需求要在SQL Server里找出占用存储空间最多的表,进行清理。
下面是Amber和Qing贡献的一个SQL查询和运行效果。
CREATE TABLE #temp ( table_name sysname , row_count INT, reserved_size VARCHAR(50), data_size VARCHAR(50), index_size VARCHAR(50), unused_size VARCHAR(50)) SET NOCOUNT ON INSERT #temp EXEC sp_msforeachtable 'sp_spaceused ''?''' SELECT a.table_name, a.row_count, COUNT(*) AS col_count, a.data_size FROM #temp a INNER JOIN information_schema.columns b ON a.table_name collate database_default = b.table_name collate database_default GROUP BY a.table_name, a.row_count, a.data_size ORDER BY CAST(REPLACE(a.data_size, ' KB', '') AS integer) DESC DROP TABLE #temp
输出结果如下图所示
Table_Name
Row_count
Col_count
DataSize
tbl_TR_SubtaskTrail
26962623
12
48679192 KB
tbl_TR_TaskTrail
7656102
25
7120016 KB
tbl_TR_AuditTrail
3361530
8
3410224 KB
tbl_TR_TaskTrailUserAccess
23569366
5
2882992 KB
tbl_PCMT_PerfHistory_Raw
3835883
4
650904 KB
tbl_PCMT_PerfHistory_Hourly
1982372
4
342872 KB
tbl_TR_DeletedObject
1320476
4
279712 KB
tbl_PCMT_PerfHistory_Daily
1393939
4
193592 KB
tbl_WLC_VMInstance
12692
77
108144 KB
tbl_WLC_VNetworkAdapter
41212
42
100376 KB
tbl_PCMT_TieredPerfCounter
257699
41
95336 KB
Leave a Reply
You must be logged in to post a comment.