查看 Analytics Platform System 中的容量利用率
本文介绍如何在 SQL Server Parallel Data Warehouse (PDW) 设备中查看容量利用率。
使用管理员主机查看容量利用率
若要查看已用空间,请打开管理员主机,然后选择存储选项卡。PDW 区域有一个存储选项卡。
使用查询查看容量利用率
若要了解节点是否空间不足,SQL Server PDW 运行状况监视系统已监视每个节点内所有卷的可用空间。
如果卷中的可用空间低于 30%,SQL Server PDW 会在 sys.dm_pdw_component_health_active_alerts 中生成警告性警报。 警报将一直保留,直到有可用空间可用。
如果卷中的可用空间降到不到 10%,SQL Server PDW 会生成关键警报。 这种情况被视为关键,因为如果查询导致数据库扩展,查询可能会失败。
若要检索卷使用情况,请参阅以下示例。
SELECT
space.[pdw_node_id] ,
space.[node_name] ,
MAX(space.[volume_name]) AS 'volume_name' ,
MAX(space.[volume_size_mb]) AS 'volume_size_mb' ,
MAX(space.[free_space_mb]) AS 'free_space_mb' ,
(MAX(space.[volume_size_mb]) - MAX(space.[free_space_mb])) AS 'space_utilized'
FROM (
SELECT
s.[pdw_node_id],
n.[name] AS [node_name],
(CASE WHEN p.property_name = 'volume_name'
THEN s.[property_value] ELSE NULL END) AS 'volume_name' ,
(CASE WHEN p.property_name = 'volume_size'
THEN (CAST(ISNULL(s.[property_value], '0') AS BIGINT)/1024/1024)
ELSE 0 END) AS 'volume_size_mb' ,
(CASE WHEN p.property_name = 'volume_free_space'
THEN (CAST(ISNULL(s.[property_value], '0') AS BIGINT)/1024/1024)
ELSE 0 END) AS 'free_space_mb' , s.[component_instance_id]
FROM [sys].[dm_pdw_component_health_status] AS s
JOIN sys.dm_pdw_nodes AS n
ON s.[pdw_node_id] = n.[pdw_node_id]
JOIN [sys].[pdw_health_components] AS c
ON s.[component_id] = c.[component_id]
JOIN [sys].[pdw_health_component_properties] AS p
ON s.[property_id] = p.[property_id] AND s.[component_id] = p.[component_id]
WHERE
c.[Component_name] = 'Volume'
AND p.[property_name] IN ('volume_name', 'volume_free_space', 'volume_size')
) AS space
GROUP BY space.[pdw_node_id] , space.[node_name] , space.[component_instance_id]
ORDER BY space.[pdw_node_id], MAX(space.[volume_name]);
若要检索跨设备节点的数据库使用的空间,请参阅以下示例。
SELECT
[pdw_node_id],
[db_name],
SUM(CASE WHEN [file_type] = 'DATA' THEN [value_MB] ELSE 0 END) AS [DataSizeMB],
SUM(CASE WHEN [file_type] = 'LOG' THEN [value_MB] ELSE 0 END) AS [LogSizeMB],
SUM([value_MB]) AS [TotalMB]
FROM (
SELECT
pc.[pdw_node_id],
RTRIM(pc.[counter_name]) AS [counter_name],
ISNULL(d.[name], pc.[instance_name]) AS [db_name],
pc.[cntr_value]/1024 AS [value_MB],
CASE
WHEN [counter_name] LIKE 'Data File(s) Size%'
THEN 'DATA'
ELSE 'LOG'
END AS [file_type]
FROM sys.dm_pdw_nodes_os_performance_counters AS pc
LEFT JOIN sys.pdw_database_mappings AS dm
ON pc.instance_name = dm.physical_name
INNER JOIN sys.databases AS d
ON d.database_id = dm.database_id
WHERE
([counter_name] LIKE 'Log File(s) Size%'
OR [counter_name] LIKE 'Data File(s) Size%')
AND (d.[name] <> dm.[physical_name]
OR pc.[instance_name] = 'tempdb')
) AS db
GROUP BY [pdw_node_id], [db_name]
ORDER BY [db_name], [pdw_node_id];