我们有一个 SQL Server 2016 (v13 SP3) 企业版服务器托管在 Windows 故障转移群集/SQL 可用性组中,具有两个节点(主节点和辅助节点)。这两个节点在运行 Windows Server 2012 R2 64 位 (NT 6.3) 的 AWS EC2 实例内运行。
本周早些时候,服务器开始响应此错误:
Could not allocate space for object 'dbo.Batches'.'pk_Batches_BatchID' in database 'XXX' because the 'PRIMARY' filegroup is full. Create disk space by deleting unneeded files, dropping objects in the filegroup, adding additional files to the filegroup, or setting autogrowth on for existing files in the filegroup.
起初,这似乎非常简单:我们认为我们粗心并允许数据和/或日志文件变得太大。这些文件肯定已满,其中没有任何未分配的空间。我们认为我们只需要扩展 Windows (NTFS) 驱动器(由 AWS EBS 在后台支持)。“XXX”数据库有一个日志文件和两个数据文件 - 数据文件设置为无限增长(尽管一次只能增长 64MB),并且数据库只有默认的“PRIMARY”文件组,不涉及其他文件组。数据文件位于“D:”驱动器上。
但“D:”驱动器有超过 400 GB 的可用空间,那么为什么数据文件没有增长呢?
我们花了很多时间查看 Windows 集群和 SQL 可用性组,因为我们还看到大量有关 AG 状态进入“正在恢复”状态以及集群角色未正确应用/同步的错误。一些更改允许主节点恢复几分钟,但随后它会再次崩溃。(因此,我们检查“XXX”数据库本身的能力受到限制。)我们查看了 EBS 是否存在某种问题或中断,但没有发现任何错误。
我们意识到服务器已经过时且陈旧。我们意识到有些人会说使用/依赖自动增长是一种不好的做法。但这个问题与最佳实践无关——而是我们如何让这个当前关闭的生产服务器恢复正常运行?