查询Synapse Analytics中所有表的大小

问题描述

我希望能够根据其大小查询和过滤表

我已经知道sp_spaceused,但是它一次显示一张表的大小

解决方法

documented DMV queries允许您获取所有表大小的报告。

,

根据Synapse建议,此处that view已调整为使用sys.pdw_permanent_table_mappings

SELECT two_part_name,SUM( row_count ) AS row_count,SUM( reserved_space_GB ) AS reserved_space_GB
FROM dbo.vTableSizes
GROUP BY two_part_name
ORDER BY reserved_space_GB DESC;

视图:

ALTER VIEW dbo.vTableSizes
AS
WITH base
AS
(
SELECT
 GETDATE()                                                             AS  [execution_time],DB_NAME()                                                            AS  [database_name],s.name                                                               AS  [schema_name],t.name                                                               AS  [table_name],QUOTENAME(s.name)+'.'+QUOTENAME(t.name)                              AS  [two_part_name],nt.[name]                                                            AS  [node_table_name],ROW_NUMBER() OVER(PARTITION BY nt.[name] ORDER BY (SELECT NULL))     AS  [node_table_name_seq],tp.[distribution_policy_desc]                                        AS  [distribution_policy_name],c.[name]                                                             AS  [distribution_column],nt.[distribution_id]                                                 AS  [distribution_id],i.[type]                                                             AS  [index_type],i.[type_desc]                                                        AS  [index_type_desc],nt.[pdw_node_id]                                                     AS  [pdw_node_id],pn.[type]                                                            AS  [pdw_node_type],pn.[name]                                                            AS  [pdw_node_name],di.name                                                              AS  [dist_name],di.position                                                          AS  [dist_position],nps.[partition_number]                                               AS  [partition_nmbr],nps.[reserved_page_count]                                            AS  [reserved_space_page_count],nps.[reserved_page_count] - nps.[used_page_count]                    AS  [unused_space_page_count],nps.[in_row_data_page_count]
    + nps.[row_overflow_used_page_count]
    + nps.[lob_used_page_count]                                        AS  [data_space_page_count],nps.[reserved_page_count]
 - (nps.[reserved_page_count] - nps.[used_page_count])
 - ([in_row_data_page_count]
         + [row_overflow_used_page_count]+[lob_used_page_count])       AS  [index_space_page_count],nps.[row_count]                                                      AS  [row_count]
from
    sys.schemas s
INNER JOIN sys.tables t
    ON s.[schema_id] = t.[schema_id]
INNER JOIN sys.indexes i
    ON  t.[object_id] = i.[object_id]
    AND i.[index_id] <= 1
INNER JOIN sys.pdw_table_distribution_properties tp
    ON t.[object_id] = tp.[object_id]
INNER JOIN sys.pdw_permanent_table_mappings tm
    ON t.[object_id] = tm.[object_id]
INNER JOIN sys.pdw_nodes_tables nt
    ON tm.[physical_name] = nt.[name]
INNER JOIN sys.dm_pdw_nodes pn
    ON  nt.[pdw_node_id] = pn.[pdw_node_id]
INNER JOIN sys.pdw_distributions di
    ON  nt.[distribution_id] = di.[distribution_id]
INNER JOIN sys.dm_pdw_nodes_db_partition_stats nps
    ON nt.[object_id] = nps.[object_id]
    AND nt.[pdw_node_id] = nps.[pdw_node_id]
    AND nt.[distribution_id] = nps.[distribution_id]
LEFT OUTER JOIN (select * from sys.pdw_column_distribution_properties where distribution_ordinal = 1) cdp
    ON t.[object_id] = cdp.[object_id]
LEFT OUTER JOIN sys.columns c
    ON cdp.[object_id] = c.[object_id]
    AND cdp.[column_id] = c.[column_id]
WHERE pn.[type] = 'COMPUTE'
),size
AS
(
SELECT
   [execution_time],[database_name],[schema_name],[table_name],[two_part_name],[node_table_name],[node_table_name_seq],[distribution_policy_name],[distribution_column],[distribution_id],[index_type],[index_type_desc],[pdw_node_id],[pdw_node_type],[pdw_node_name],[dist_name],[dist_position],[partition_nmbr],[reserved_space_page_count],[unused_space_page_count],[data_space_page_count],[index_space_page_count],[row_count],([reserved_space_page_count] * 8.0)                                 AS [reserved_space_KB],([reserved_space_page_count] * 8.0)/1000                            AS [reserved_space_MB],([reserved_space_page_count] * 8.0)/1000000                         AS [reserved_space_GB],([reserved_space_page_count] * 8.0)/1000000000                      AS [reserved_space_TB],([unused_space_page_count]   * 8.0)                                 AS [unused_space_KB],([unused_space_page_count]   * 8.0)/1000                            AS [unused_space_MB],([unused_space_page_count]   * 8.0)/1000000                         AS [unused_space_GB],([unused_space_page_count]   * 8.0)/1000000000                      AS [unused_space_TB],([data_space_page_count]     * 8.0)                                 AS [data_space_KB],([data_space_page_count]     * 8.0)/1000                            AS [data_space_MB],([data_space_page_count]     * 8.0)/1000000                         AS [data_space_GB],([data_space_page_count]     * 8.0)/1000000000                      AS [data_space_TB],([index_space_page_count]  * 8.0)                                   AS [index_space_KB],([index_space_page_count]  * 8.0)/1000                              AS [index_space_MB],([index_space_page_count]  * 8.0)/1000000                           AS [index_space_GB],([index_space_page_count]  * 8.0)/1000000000                        AS [index_space_TB]
FROM base
)
SELECT *
FROM size
;