我最初是一名 IT 经理,我的职责涉及 MSSQL 服务器。我继承的一个数据库在一周内占用了大约 100GB 的硬盘空间(以 LDF 文件的形式)。这又占用了 C 盘上所有可用的磁盘空间,导致服务器崩溃。
因此,我可以使用 LDF 文件上的“限制文件增长”选项来阻止它使用整个驱动器吗?如果可以,那么当此文件已满时会发生什么?
另外,什么会导致这种类型的活动?这会是由于 SQL 查询写得不好吗?
答案1
检查数据库是否处于完全恢复模式。如果是,您是否有任务在运行,以便以足够频繁的时间表实际备份事务日志,从而将其保持在可管理的大小?
编辑:
当文件因限制增长而满时,您的数据库将停止处理交易,因为它无处记录它们。您需要找出文件增长如此之快的原因,而不是限制文件。
答案2
如果数据库非常繁忙(并且非常庞大),那么每周 100GB 的日志量可能不算过分。如果没有更多关于数据库大小、交易量、记录大小等的信息,我们很难判断。
更重要的问题是:如果这个数据库每晚都要备份,为什么不修剪日志?通常情况下,我们不需要担心事务日志的容量每个星期。
背景信息:
- 在正确配置的 MSSQL 服务器上,事务日志与数据在物理上是分开的:它们不仅驻留在单独的卷上,而且驻留在完全单独的 RAID 阵列上。
- 如果数据库(或存储数据库的物理卷)丢失,您可以从最近的备份中恢复,然后重播事务日志可以恢复故障发生时刻的数据。
- 创建的任何交易日志条目前您最近的备份可以是修剪来自 LDF 文件。通常,日志本身会在被修剪之前进行备份;如果保留了较旧的备份,这就保留了恢复到最近备份之前的任意时间点的可能性。
因此,更大的问题是:这个 SQL 服务器是如何备份的?每次备份时事务日志是否都会被删减?夜间备份过程是否突然停止了?
如果前任管理员懒得使用正确的服务帐户——这种情况并不罕见——当他/她的帐户被禁用并且内置域管理员帐户密码被更改时,包括备份在内的很多事情可能都停止工作。
答案3
此外,数据和日志与 C 盘无关。在繁忙的数据库上利用 IO 是提高性能的关键。
答案4
另外,将它们移出 C 盘。该驱动器上的内存不足会导致数据库崩溃,并可能导致损坏