在 tempdb sql 服务器中取消分配未使用的 space
Unallocate unused space in tempdb sql server
sql 服务器中用于查找 space 临时 tables 使用的任何脚本 + 在 tempdb 中创建临时 table 的数据库名称?
我的 tempDb 的大小已经增长到 100 GB,我无法恢复 space 并且我不确定是什么占用了这么多的 space。
感谢您的帮助。
也许您可以在临时数据库文件上单独使用以下 SQL 命令
DBCC SHRINKFILE
临时 tables 总是在 TempDb 中创建。但是,TempDb 的大小不一定只是由于临时 tables。 TempDb 的使用方式多种多样
- 内部对象(排序和假脱机、CTE、索引重建、散列连接等)
- 用户对象(临时 table、table 变量)
- 版本存储(AFTER/INSTEAD OF 触发器,MARS)
因此,很明显它被用于各种 SQL 操作中,因此大小也会由于其他原因而增长
您可以使用以下查询检查导致 TempDb 变大的原因
SELECT
SUM (user_object_reserved_page_count)*8 as usr_obj_kb,
SUM (internal_object_reserved_page_count)*8 as internal_obj_kb,
SUM (version_store_reserved_page_count)*8 as version_store_kb,
SUM (unallocated_extent_page_count)*8 as freespace_kb,
SUM (mixed_extent_page_count)*8 as mixedextent_kb
FROM sys.dm_db_file_space_usage
如果上面的查询显示,
- 更多的用户对象意味着有更多的使用 Temp tables ,游标或临时变量
- 内部对象数量较多表示查询计划使用了大量数据库。例如:排序、分组依据等
- 更多的版本存储显示长 运行 事务或高事务吞吐量
在此基础上,您可以配置 TempDb 文件大小。我最近写了一篇关于 TempDB 配置最佳实践的文章。你可以读到 here
sql 服务器中用于查找 space 临时 tables 使用的任何脚本 + 在 tempdb 中创建临时 table 的数据库名称?
我的 tempDb 的大小已经增长到 100 GB,我无法恢复 space 并且我不确定是什么占用了这么多的 space。
感谢您的帮助。
也许您可以在临时数据库文件上单独使用以下 SQL 命令
DBCC SHRINKFILE
临时 tables 总是在 TempDb 中创建。但是,TempDb 的大小不一定只是由于临时 tables。 TempDb 的使用方式多种多样
- 内部对象(排序和假脱机、CTE、索引重建、散列连接等)
- 用户对象(临时 table、table 变量)
- 版本存储(AFTER/INSTEAD OF 触发器,MARS)
因此,很明显它被用于各种 SQL 操作中,因此大小也会由于其他原因而增长
您可以使用以下查询检查导致 TempDb 变大的原因
SELECT
SUM (user_object_reserved_page_count)*8 as usr_obj_kb,
SUM (internal_object_reserved_page_count)*8 as internal_obj_kb,
SUM (version_store_reserved_page_count)*8 as version_store_kb,
SUM (unallocated_extent_page_count)*8 as freespace_kb,
SUM (mixed_extent_page_count)*8 as mixedextent_kb
FROM sys.dm_db_file_space_usage
如果上面的查询显示,
- 更多的用户对象意味着有更多的使用 Temp tables ,游标或临时变量
- 内部对象数量较多表示查询计划使用了大量数据库。例如:排序、分组依据等
- 更多的版本存储显示长 运行 事务或高事务吞吐量
在此基础上,您可以配置 TempDb 文件大小。我最近写了一篇关于 TempDB 配置最佳实践的文章。你可以读到 here