sys.dm_db_file_space_usage (Transact-SQL)

返回数据库中每个文件的空间使用信息。

注意注意

该视图只适用于 tempdb 数据库

列名

数据类型

说明

database_id

smallint

数据库 ID。

file_id

smallint

文件 ID。

file_id 映射到 sys.dm_io_virtual_file_stats 中的 file_id,并映射到 sys.sysfiles 中的 fileid。

unallocated_extent_page_count

bigint

文件的未分配区中的总页数。有关详细信息,请参阅页和区

不包括已分配区中的未使用页。

version_store_reserved_page_count

bigint

为版本存储分配的统一区中的总页数。永远不会从混合区分配版本存储页。

不包括 IAM 页,因为 IAM 页始终从混合区进行分配。如果 PFS 页是从统一区分配的,则包括 PFS 页。

有关详细信息,请参阅 sys.dm_tran_version_store

user_object_reserved_page_count

bigint

从统一区为数据库中的用户对象分配的总页数。计数中包括已分配区中未使用的页。

不包括 IAM 页,因为 IAM 页始终从混合区进行分配。如果 PFS 页是从统一区分配的,则包括 PFS 页。

可使用 sys.allocation_units 目录视图中的 total_pages 列来返回用户对象中每个分配单元的保留页计数。但请注意,total_pages 列包括 IAM 页。

internal_object_reserved_page_count

bigint

从统一区为文件中的内部对象分配的总页数。计数中包括已分配区中未使用的页。

不包括 IAM 页,因为 IAM 页始终从混合区进行分配。如果 PFS 页是从统一区分配的,则包括 PFS 页。

不存在可返回每个内部对象的页计数的目录视图或动态管理对象。

mixed_extent_page_count

bigint

文件的已分配混合区中的已分配和未分配总页数。混合区包含分配给不同对象的页。此计数包含文件中的所有 IAM 页。

注释

页计数始终为区级计数。所以,页计数的值始终为八的倍数。包含全局分配映射表 (GAM) 和共享全局分配映射表 (SGAM) 分配页的区是已分配的统一区。它们不包含在上文所述的页计数中。

当前版本存储的内容位于 sys.dm_tran_version_store 中。在文件级而不是会话级和任务级跟踪版本存储页,因为它们是全局资源。会话会生成版本,但在会话结束时不能删除版本。版本存储清除必须考虑需要访问特定版本的运行时间最长的事务。可通过查看 sys.dm_tran_active_snapshot_database_transactions 中的 elapsed_time_seconds 列来发现与版本存储清除相关的运行时间最长的事务。

mixed_extent_page_count 列频繁更改可能指示大量使用 SGAM 页。如出现此情况,您会看到多个 PAGELATCH_UP 等待,且正在等待 SGAM 页资源。有关详细信息,请参阅 sys.dm_os_waiting_tasks (Transact-SQL)sys.dm_os_wait_stats (Transact-SQL)sys.dm_os_latch_stats (Transact-SQL)。有关 SGAM 页的详细信息,请参阅管理区分配和可用空间

用户对象

用户对象页计数器中包括下列对象:

  • 用户定义的表和索引

  • 系统表和索引

  • 全局临时表和索引

  • 局部临时表和索引

  • 表变量

  • 表值函数中返回的表

内部对象

内部对象只包含在 tempdb 中。内部对象页计数器中包括下列对象:

  • 用于游标或假脱机操作以及临时大型对象 (LOB) 存储的工作表

  • 用于哈希联接等操作的工作文件

  • 排序段

关系基数

关系

sys.dm_db_file_space_usage.database_id、file_id

sys.dm_io_virtual_file_stats.database_id、file_id

一对一

权限

需要对服务器拥有 VIEW SERVER STATE 权限。

示例

有关使用 sys.dm_db_file_space_usage 视图的示例,请参阅解决 tempdb 中磁盘空间不足的问题