RGO*_*RGO 1 express-edition sql-server-2016
昨天报了以下错误:
无法为数据库 'Z' 中的对象 'dbo.X'.'Y' 分配空间,因为 'PRIMARY' 文件组已满
工程师从表中删除了一些记录后,错误被清除。我昨天无法检查详细信息,因为我实际上没有管理员访问权限。我的访问后来被排序。当我今天检查数据库大小时,我观察到以下情况:
有 312.63 MB 可用空间,这意味着有 312.63 MB 空间分配给数据库但尚未分配给任何页面或对象(如果我错了,请纠正我)。我不希望昨天的删除操作释放任何页面/空间。那么为什么数据库不能使用这个随时可用并分配给数据库的空间呢?
我忽略了文件自昨天以来进一步增长的可能性,因为在事件发生时已经有足够的磁盘空间可用。这是一个 SQL Server 2016 SP1 Express Edition,它已启用自动增长设置,文件增长大小为 64 MB,最大大小设置为Unlimited。考虑:
10184 MB + 64 MB = 10248 MB > 10240 MB (= 10 GB = maximum allowed DB size in Express Edition)
Run Code Online (Sandbox Code Playgroud)
很明显,该文件不能(也不能)进一步增长。
虽然数据库无法调整文件大小,但它仍然可以使用任何可用空间。那为什么没有发生呢?
会不会是昨天delete后有对象被drop掉了?
您提到您不希望删除操作释放空间,但事实并非如此。由于删除而被清空的页面成为未使用的空间(可以为同一对象重用),而被清空的范围成为未分配的空间(可以用于任何对象)。
因此,DELETE
看起来已经在数据文件中释放了足够的空间以避免空间问题。考虑重新组织索引以进一步从部分填充的页面中回收空间,因为您的数据库仍然超过 95% 已满。
归档时间: |
|
查看次数: |
59 次 |
最近记录: |