sys.dm_db_file_space_usage (Transact-SQL)

适用于: 是SQL Server(所有支持的版本) 是Azure SQL 数据库 是Azure SQL 托管实例 是Azure Synapse Analytics 是并行数据仓库

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

备注

若要从或调用此 Azure Synapse Analytics Analytics Platform System (PDW) ,请使用名称 sys.dm_pdw_nodes_db_file_space_usage。 Azure Synapse Analytics 中的无服务器 SQL 池不支持此语法。

列名称 数据类型 说明
database_id smallint 数据库 ID。
file_id smallint 文件 ID。

file_id 映射到 sys.dm_io_virtual_file_stats 中的 file_id 和 sys.sysfiles中的 fileid。
filegroup_id smallint 适用于:SQL Server 2012 (11.x) 及更高版本。

文件组 ID。
total_page_count bigint 适用于:SQL Server 2012 (11.x) 及更高版本。

数据文件中的总页数。
allocated_extent_page_count bigint 适用于:SQL Server 2012 (11.x) 及更高版本。

数据文件的已分配区中的总页数。
unallocated_extent_page_count bigint 数据文件的未分配区中的总页数。

不包括已分配区中的未使用页。
version_store_reserved_page_count bigint 为版本存储分配的统一区中的总页数。 永远不会从混合区分配版本存储页。

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

有关详细信息,请参阅 sys.dm_tran_version_store (Transact-SQL)
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 页。
modified_extent_page_count bigint 适用对象:SQL Server 2016 (13.x) SP2 和更高版本。

自上次完整数据库备份以来,在文件分配的范围内修改的总页数。 修改后的页计数可用于跟踪自上次完整备份以来数据库的差异变化量,以确定是否需要进行差异备份。
pdw_node_id int 适用 于: Azure Synapse Analytics 、 Analytics Platform System (PDW)

此分发所在的节点的标识符。
distribution_id int 适用 于: Azure Synapse Analytics 、 Analytics Platform System (PDW)

与分布关联的唯一数字 id。

备注

页计数始终为区级计数。 所以,页计数的值始终为八的倍数。 包含全局分配映射表 (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 (SQL transact-sql)sys.dm_os_wait_stats (SQL )sys.dm_os_latch_stats (SQL)

用户对象

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

  • 用户定义的表和索引

  • 系统表和索引

  • 全局临时表和索引

  • 局部临时表和索引

  • 表变量

  • 表值函数中返回的表

内部对象

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

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

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

  • 排序段

关系基数

功能 关系
sys.dm_db_file_space_usage.database_id、file_id sys.dm_io_virtual_file_stats.database_id、file_id 一对一

权限

在 SQL Server 和 SQL 托管实例上,需要 VIEW SERVER STATE 权限。

在 SQL 数据库 基本S0S1 服务目标上,对于 弹性池中 的数据库,需要 服务器管理员帐户、 Azure Active Directory 管理员帐户或 ##MS_ServerStateReader## 服务器角色的成员身份。 对于所有其他 SQL 数据库服务目标,需要对 VIEW DATABASE STATE 数据库的权限,或者 ##MS_ServerStateReader## 需要服务器角色的成员身份。

示例

确定 tempdb 中的可用空间量

以下查询将返回 tempdb 中所有数据文件中可用的可用页总数和总可用空间(MB (mb)) 。

USE tempdb;  
GO  
SELECT SUM(unallocated_extent_page_count) AS [free pages],   
(SUM(unallocated_extent_page_count)*1.0/128) AS [free space in MB]  
FROM sys.dm_db_file_space_usage;  

确定用户对象使用的空间量

下面的查询将返回 tempdb 中用户对象使用的总页数和总空间量。

USE tempdb;  
GO  
SELECT SUM(user_object_reserved_page_count) AS [user object pages used],  
(SUM(user_object_reserved_page_count)*1.0/128) AS [user object space in MB]  
FROM sys.dm_db_file_space_usage;

另请参阅