gpt4 book ai didi

sql - 用户表在 tempdb 中?

转载 作者:搜寻专家 更新时间:2023-10-30 21:41:32 24 4
gpt4 key购买 nike

我在使用 SQL Server 2008 R2 的生产数据库服务器上发现磁盘空间不足。 tempdb 大小已增加到 51G。它包含静态表,我的意思是当我查看 tempdb 中的表时,它有多个表。大多数这些表有 0 条记录,但在其中两个表中

select COUNT(*) from t102523_2E2CF266AB2F457E888427A000F5D2F3; --820310

select COUNT(*) from t102523_BB4717747002489CBD001E91669C3967; --1051323

我想知道为什么以及在什么情况下创建这些表。我知道如果我重新启动服务器磁盘空间将被释放。我还想跟踪发生这种情况的场景或操作。这个问题一个月一次就正常了。

最佳答案

我们无法告诉您这些表是如何创建的。您需要检查您正在运行的任何第三方或其他应用程序的代码,或者询问您的开发人员/DBA 同事是否出于某种原因创建了这些特定对象。 SQL Server 不会自动在 tempdb 中创建用户表,除非您告诉它。

如果这些表是最近创建的,您可能能够在默认跟踪中找到谁创建了这些表:

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;

没有运气? Try reading the log directly .

还是没有运气?您可能想检查 model 数据库中是否存在任何用户表,并追查那些罪魁祸首,因为您在 model 中创建的任何内容最终都会在 tempdb 以及随后的重新启动。

如果找不到原因,可以run a server-side trace (未在 Profiler 中主动运行跟踪),捕获 object:created 并过滤到 tempdb 和 where name not like '#%';。你也可以考虑 Extended Events 、DDL触发器、Audit等

关于sql - 用户表在 tempdb 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19978145/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com