在立即标记为重复之前,我已阅读 Mike Walsh 的《为什么事务日志不断增长或空间不足?,但我认为它没有回答我的情况。我浏览了十几个类似的问题,但相关的问题大多只是说“重复”并指向迈克的问题。
详细信息:我在 SQL Server 2008 R2 上有一堆约 500MB 的数据库,都处于简单恢复模式(不是我的选择),每晚完整备份,包含约 200MB 的数据文件和约 300MB 的日志文件。日志不会立即增长到 300MB,而是在几个月的过程中缓慢增长。至少根据 sp_who2 和活动监视器,它们中的任何一个都没有打开的事务。如果我右键单击数据库并选择属性,它会告诉我有大约 50MB 可用空间。特别是在备份之后,整个日志不应该是免费的吗?在 SIMPLE 模式下,只要没有打开的事务,日志就不应该是免费的吗?
log_reuse_wait_descfromsys.databases说“NOTHING”,根据上面引用的问题和答案说它不应该等待任何东西来重用空间。
如果我做'DBCC SHRINKFILE',日志文件缩小到1MB,所以它愿意回收空间。我可以设置一些每周缩小日志并防止事情失控的东西,但我很困惑为什么 SQL Server 会让我这样做。
我可以理解是否有一些疯狂的事务需要 300MB 来记录它,但我们没有做任何极端的事情,只是基本的 OLTP。来自迈克的问题/答案:
简单恢复模型 - 有了上面的介绍,最容易先讨论简单恢复模型。在此模型中,您是在告诉 SQL Server - 我对您使用您的事务日志文件进行崩溃和重新启动恢复感到满意(您在那里确实别无选择。查找 ACID 属性,这应该很快就有意义),但是一旦您没有不再需要它用于崩溃/重启恢复目的,继续并重用日志文件。
SQL Server 在 Simple Recovery 中侦听此请求,并且仅保留执行崩溃/重新启动恢复所需的信息。一旦 SQL Server 确定它可以恢复,因为数据已加固到数据文件(或多或少),已加固的数据在日志中不再需要并被标记为截断 - 这意味着它会被重新使用。
它一直说日志空间应该被重用,但是随着几个月的缓慢增长,它似乎不是。
我错过了什么?是否有什么原因使 SQL Server 无法将数据识别为“硬化”并释放日志?
(编辑) 行动后报告 - AKA 一点点知识是危险的
在发现这是一个“热门问题”后,我觉得我欠了一个解释 7 个月前发生的事情以及我学到的东西,希望能挽救一些其他人的悲伤。
首先,当您查看数据库的属性时,您在 SSMS 中看到的可用空间是数据文件中的可用空间。您可以通过在数据库上运行以下命令来查看这一点,您会发现 SSMS 报告的可用空间是 FileSizeMB 和 UsedSpaceMB …
我知道我可以通过运行 sp_cycle_errorlog 轻松循环当前错误日志,但我想知道 SQL Server 是否会删除旧的/存档的错误日志文件。似乎无法在任何地方找到答案...
有没有办法列出谁在 SQL Server 2008 中创建了某些采购?
在这个 SO 链接中有一些答案,但来自 6 年前。
我知道最好的做法是写下您的姓名和日期,然后开始创建程序,但我在我工作的地方看不到这一点。
如果没有办法做到这一点,这个任务可以用触发器来完成吗?
还有一个奖励问题。这是 dba 的工作吗?知道是谁创造的吗?
非常感谢。
我试图找到一种方法来弄清楚我的几个 sql 数据库何时脱机。
我检查了日志,但找不到任何此类信息,而且没有启用默认跟踪。
我只是有一个信息,之前有一位 DBA 将其离线,但没有电子邮件或书面通信等。
我们能找到这方面的信息吗?
请推荐,谢谢!
有没有办法查看过去的会议细节(我完全希望答案是“否”)。我试图找出某个应用程序在哪个服务器上运行,该应用程序访问某个数据库。我知道该应用程序在周五晚上的某个时间运行,所以我希望 SQL Server 维护会话历史记录,以便我可以查找相关时间sp_who的详细信息。
就像我说的,我不希望这是可能的,但现在我绝对是在抓着稻草。
提前致谢。
编辑:我最终通过其他方式找到了有问题的服务器;该作业执行了一条 SQL 语句来创建一个文件,然后将该文件通过 FTPd 传输到另一个站点 - 该站点具有 FTP 日志记录,可以为我提供源服务器的名称和 IP 地址。感谢您的回答 - 我只希望我能接受他们,因为他们都提出了很好的观点并提供了很好的建议。
我需要确认我们的 SQL Server 中是否曾经存在过一个特定的表。是否存在可用于列出 SQL Server 实例中所有删除的数据库的现有脚本或方法?
在最近对默认跟踪输出的分析中注意到 100 个 sort_warning 错误后,我正在尝试获取导致这些警告的查询文本。

SQL Server Profiler 有一个名为 Sort Warnings 的事件,但它没有 TextData 列。
2008 R2 无法使用扩展事件,因为 sort_warning 事件在 2008 R2 的扩展事件中不可用。
我想在我用来存储分析器结果的表上放置一个触发器,以捕获来自 DBCC INPUTBUFFER 的输出。
-- table to store the results of dbcc inputbuffer
CREATE TABLE Trace_Results(EventType NVARCHAR(30), Parameters INT, EventInfo NVARCHAR(255))
CREATE TRIGGER [dbo].[Trace_Trigger]
ON [dbo].Trace_Table
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
DECLARE @SQL VARCHAR(MAX)
SELECT @SQL = 'DBCC INPUTBUFFER(' + CONVERT(VARCHAR(10), ins.SPID) + ')'
FROM inserted ins
--PRINT @SQL
INSERT INTO Trace_Results (EventType, Parameters, EventInfo)
EXEC(@SQL) …Run Code Online (Sandbox Code Playgroud) 我知道AUTO_SHRINK在 SQL Server 数据库上配置的缺点。最近,在一个新环境中,我发现了几台启用了 Auto Shrink 选项的生产服务器。
现在,在更改此配置之前,我想知道:由于 auto_shrink 事件从 25% 的未使用空间开始,我想知道这是否和/或何时在 SQL Server 上实际发生。我试图找到相关的 SQL-Event-Logfile 条目。我开始手动缩小测试数据库,但没有显示事件日志条目。
有谁知道如何找出最近几天或几周内 SQL Server 发生收缩的时间?
是否可以查看为数据库创建第二个日志文件的时间以及由谁创建?我发现了一个额外的日志文件,它是为我们环境中的一个数据库创建的,我正在尝试查看它的创建者和创建时间。我们使用的是 SQL Server 2012 SP2 企业版。
我试图找出谁以及何时为数据库创建了第二个 ldf 文件。
我注意到我有一个不断重置范围配置的数据库,即 maxdop。
是否有任何日志显示谁或什么进程导致这些配置更改?我使用的是 Microsoft SQL Server 2016 (SP1-CU7-GDR) (KB4057119) - 13.0.4466.4