Nit*_*mar 1 sql database sql-server database-administration
我使用SQL Server 2008 R2在生产数据库服务器上获得的磁盘空间不足.该tempdb规模已经扩大到51G.它包含静态表,我的意思是当我查看表中tempdb有多个表时.这些表中的大多数都有0条记录,但在两个表中
select COUNT(*) from t102523_2E2CF266AB2F457E888427A000F5D2F3; --820310
select COUNT(*) from t102523_BB4717747002489CBD001E91669C3967; --1051323
Run Code Online (Sandbox Code Playgroud)
我想知道为什么以及在哪种情况下创建这些表.我知道如果我重新启动服务器磁盘空间将被释放.我还想跟踪发生了哪种情况或行动.这个问题在一个月内变得正常.
我们无法告诉您这些表是如何创建的.您需要检查您正在运行的任何第三方或其他应用程序的代码,或者询问您的开发人员/ DBA是否出于某种原因创建了这些特定对象.tempdb除非您告诉它,否则SQL Server不仅会自动创建用户表.
您可以在默认跟踪中找到谁创建了这些表,如果它们是最近创建的:
DECLARE @path NVARCHAR(260);
SELECT
@path = REVERSE(SUBSTRING(REVERSE([path]),
CHARINDEX(CHAR(92), REVERSE([path])), 260)) + N'log.trc'
FROM sys.traces
WHERE is_default = 1;
SELECT ObjectName, HostName, ApplicationName, LoginName, StartTime
FROM sys.fn_trace_gettable(@path, DEFAULT) AS t
WHERE DatabaseName = N'tempdb'
AND ObjectName LIKE N't102523[_]%'
AND EventClass = 46 AND EventSubClass = 0
--AND EXISTS (SELECT 1 FROM tempdb.sys.tables WHERE name = t.ObjectName)
ORDER BY StartTime DESC;
Run Code Online (Sandbox Code Playgroud)
没运气?尝试直接阅读日志.
仍然没有运气?您可能想要检查model数据库中是否存在任何用户表,并追踪那些罪魁祸首,因为您创建的任何内容也model将tempdb在后续重新启动时结束.
如果找不到原因,可以运行服务器端跟踪(不在Profiler中主动运行跟踪),捕获object:created并过滤到tempdb和where name not like '#%';.您还可以考虑扩展事件,DDL触发器,审计等.