我正在开发一个简单查询的项目(简单选择)。为此,背后有很多逻辑,我在查询中创建了许多临时表(#)。
自上周以来,我们的数据库面临着一个问题,事务文件的大小很大而且只是在增长,DBA缩小了文件但是当我今天运行查询时,我无法再次运行查询。
我检查了交易日志的大小,即使没有做任何事情,它也会重新开始增长。我想知道是不是因为我的查询中有很多临时表(#)?或者我们的DBA应该保持这个?谢谢
答案 0 :(得分:0)
临时表在TEMPDB上记录它的活动,因此日志增长仅在TEMPDB上进行..
您可以使用Adam Machanic中的sp_whoisactive来为tempdb
添加更多会话分配这是我系统的查询输出
如果这是普通的数据库,如果你想知道什么会话可以导致更多的日志增长,你可以使用这个查询
select DB_NAME(tr.database_id) as dbname,
(database_transaction_log_bytes_used+ database_transaction_log_bytes_reserved)*1.0/1024 as 'Tlog_used_KB',
ec.session_id,
txt.text
from sys.dm_tran_database_transactions tr
join
sys.dm_exec_requests ec
on ec.transaction_id=tr.transaction_id
cross apply
sys.dm_exec_sql_text(Ec.sql_handle) txt
通常情况下,TLOG Space会被重复使用,但是如果您没有看到发生这种情况,可能是由于listed here
的任何原因造成的。