sys.dm_db_file_space_usage (Transact-SQL)
适用于:SQL Server
Azure SQL 数据库
Azure SQL 托管实例
Azure Synapse Analytics
Analytics Platform System (PDW)
返回数据库中每个数据文件的空间使用情况信息。
注意
若要从 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 (Transact-SQL) 、 sys.dm_os_wait_stats (Transact-SQL) 和 sys.dm_os_latch_stats (Transact-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 数据库“基本”、“S0”和“S1”服务目标中,对于“弹性池”中的数据库,服务器管理员帐户、Azure Active Directory 管理员帐户或##MS_ServerStateReader##
服务器角色中的成员身份是必需的。 对于所有其他 SQL 数据库服务目标,需要数据库的 VIEW DATABASE STATE
权限或 ##MS_ServerStateReader##
服务器角色中的成员身份。
SQL Server 2022 及更高版本的权限
需要对服务器具有 VIEW SERVER PERFORMANCE STATE 权限。
示例
确定 tempdb 中的可用空间量
以下查询返回可用页总数和总可用空间(以 MB (MB 为单位),) tempdb 中的所有数据文件中可用。
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;