SELECT t.NAME AS TableName, s.Name AS SchemaName, p.rows AS RowCounts, SUM(a.total_pages) *8/1024AS TotalSpaceMB, SUM(a.used_pages) *8/1024AS UsedSpaceMB, (SUM(a.total_pages) -SUM(a.used_pages)) *8/1024AS UnusedSpaceMB FROM sys.tables t INNERJOIN sys.indexes i ON t.OBJECT_ID = i.object_id INNERJOIN sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id INNERJOIN sys.allocation_units a ON p.partition_id = a.container_id LEFTOUTERJOIN sys.schemas s ON t.schema_id = s.schema_id WHERE t.NAME NOTLIKE'dt%' AND t.is_ms_shipped =0 AND i.OBJECT_ID >255 GROUPBY t.Name, s.Name, p.Rows ORDERBY UsedSpaceMB DESC
结果示例:
TableName
SchemaName
RowCounts
TotalSpaceMB
UsedSpaceMB
UnusedSpaceMB
T1
dbo
25609971
97735
97366
369
T2
dbo
157963374
76543
76341
201
T3
dbo
10714232
56383
53113
3269
T4
dbo
47533799
26000
25310
690
T5
dbo
15956528
17750
17742
8
获取各存储过程的用量
1 2 3 4 5 6 7 8 9 10 11 12 13
DECLARE@dbnamevarchar(30) ='';
select db_name(st.dbid) as database_name, object_name(st.objectid) as name, p.size_in_bytes /1024as size_in_kb, p.usecounts, st.text from sys.dm_exec_cached_plans p cross apply sys.dm_exec_sql_text(p.plan_handle) st where p.objtype ='proc' and st.dbid = db_id(@dbname) orderby p.usecounts desc
结果示例:
database_name
name
size_in_kb
usecounts
text
D
Proc_Upsert
8800
39675743
xxx
D
Proc_Update
1368
2216916
xxx
D
Proc_Select
280
1641531
xxx
获取存储过程的上次执行时间
1 2 3 4 5 6 7
SELECT DB_NAME(database_id) ,OBJECT_NAME(object_id,database_id) as procname ,cached_time ,last_execution_time ,execution_count FROM sys.dm_exec_procedure_stats orderby procname
结果示例:
procname
cached_time
last_execution_time
execution_count
CleanUpArticles
2021-04-20 17:00:02.710
2021-04-20 17:00:02.710
3788
CleanUpTables
2021-04-22 12:51:17.807
2021-04-22 12:51:17.807
6019
Proc_Select
2021-04-19 02:09:41.830
2021-04-19 02:09:41.830
3827
获取存储过程依赖哪些表
1 2 3 4 5
SELECTDISTINCT p.name AS proc_name, t.name AS table_name FROM sys.sql_dependencies d INNERJOIN sys.procedures p ON p.object_id = d.object_id INNERJOIN sys.tables t ON t.object_id = d.referenced_major_id ORDERBY proc_name, table_name
SELECT a.object_id, object_name(a.object_id) AS TableName, a.index_id, name AS IndedxName, avg_fragmentation_in_percent FROM sys.dm_db_index_physical_stats (DB_ID(@dbname) , OBJECT_ID(@tablename) , NULL , NULL , NULL) AS a INNERJOIN sys.indexes AS b ON a.object_id = b.object_id AND a.index_id = b.index_id;
Sample result:
object_id
TableName
index_id
IndedxName
avg_fragmentation_in_percent
1733581214
T1
1
PK_dbo.T1
23.53719
1733581214
T1
3
key
22.5999
重建索引
1 2 3
ALTER INDEX [PK_dbo.T1] ON [dbo].[T1] REBUILD WITH (ONLINE =ON);