我想知道如何识别实际填充 TEMPDB 数据库事务日志的确切查询或存储过程。
sql-server-2005 sql-server-2008 sql-server tempdb transaction-log
我在 SQL 2008 上有一个 TempDB,它变得非常大(> 40gb),我想缩小它。我已经通过 Management Studio 使用了 dbcc 收缩数据库、dbcc 收缩文件和收缩命令。
我收到以下错误:
页面 1:4573184 无法移动,因为它是工作表页面。
通过运行 DBCC FREEPROCCACHE 并重新运行其中一个收缩例程,我已经能够回收一些空间使我脱离危险,但显然这并不理想,而且可能只会给我争取一点时间。
我已经运行 DBCC OpenTran 并且没有任何东西挂在那里。
我在互联网上读到的所有地方都归结为回收 SQL Server ……肯定有更好的方法……有人吗?
谢谢,
汤姆
我们为一些 SQL Server 2005 数据库启用了“READ_COMMITTED_SNAPSHOT”。
现在我们不时看到我们的 TempDB 正在填满硬盘,我们怀疑版本存储是罪魁祸首。
我们监视 TempDB 的使用情况sys.dm_db_file_space_usage,一旦我们看到版本存储在增加(如 所报告的那样 version_store_reserved_page_count),我们希望识别正在使用版本存储的事务。
我正在使用以下语句来查找使用版本存储的事务:
SELECT db_name(spu.database_id) as database_name,
at.transaction_begin_time as begin_time,
case
when at.transaction_state in (0,1) then 'init'
when at.transaction_state = 2 then 'active'
when at.transaction_state = 3 then 'ended'
when at.transaction_state = 4 then 'committing'
when at.transaction_state = 6 then 'comitted'
when at.transaction_state = 7 then 'rolling back'
when at.transaction_state = 6 then 'rolled back'
else 'other'
end as transaction_state,
ast.elapsed_time_seconds as elapsed_seconds,
ses.program_name, …Run Code Online (Sandbox Code Playgroud) 我有一个 tempdb 增长问题。让我通过提供我的 tempdb 设置来开始一切。

即使没有在数据库/服务器上运行查询,tempdb 的大小也会不断增加,开始迅速,然后缓慢而没有停止。我运行了许多查询来找出正在运行的内容,下面是查询的结果,它实际上给了我可以使用的结果。

可以看出,它们都是内部 spid 的,有什么方法可以找出 tempdb 继续失控的原因以及如何缓解它?对这个问题的任何帮助将不胜感激。
--Query that returned the result set
SELECT session_id,
SUM(internal_objects_alloc_page_count) AS task_internal_objects_alloc_page_count,
SUM(internal_objects_dealloc_page_count) AS task_internal_objects_dealloc_page_count
FROM sys.dm_db_task_space_usage
GROUP BY session_id
HAVING SUM(internal_objects_alloc_page_count) > 0
Run Code Online (Sandbox Code Playgroud) 有什么方法可以识别哪个存储过程在 tempDB 中创建表变量?
我正在查看 sys.dm_db_index_operational_stats 中的 forward_fetch_count,我们有几个表的计数非常大(最大的超过 1.33 亿)。表名以 # 后跟 8 个十六进制字符的形式出现在 tempDB 中。有没有办法将其追溯到原始流程,以便我们修复它?
我们在 Linux 上运行 SQL 2019。
谢谢,埃文