查看数据库时,此查询:
SELECT * FROM sys.allocation_units a WHERE (a.total_pages - a.used_pages) < 0
令人惊讶地返回一行。这是结果:
+--------------------+------+-------------+-------------------+---------------+-------------+------------+------------+
| allocation_unit_id | type | type_desc | container_id | data_space_id | total_pages | used_pages | data_pages |
+--------------------+------+-------------+-------------------+---------------+-------------+------------+------------+
| 72057594058702848 | 1 | IN_ROW_DATA | 72057594047692800 | 1 | 105 | 111 | 93 |
+--------------------+------+-------------+-------------------+---------------+-------------+------------+------------+
我的理解是页面是磁盘上 8kb 的空间分组(这是正确的吗?)
我怎么能used_pages
比我拥有的更多total_pages
?
我怀疑这与这个DMV在幕后异步更新有关。根据sys.allocation_units BOL 页面:
虽然这意味着只有丢弃和/或截断不会被实时跟踪,但我只是针对我的一个环境运行了相同的查询,在该环境中没有任何东西被丢弃或删除,并且得到与您的结果类似的行为。我怀疑此视图只是在后台更新,而必须触发以生成更新的任何内容尚未发生。
希望其他人有更好的答案,因为我也有兴趣确定。