【发布时间】:2021-04-23 00:20:21
【问题描述】:
我们有 3 亿行并不断增加的突触表之一。每行作为状态列,即 active_row 0 或 1。 Active_row 是 int 数据类型。用户仅查询基于 active_row = 1 的只有 2800 万行和其余数据,即 2.7 亿是非活动的。 为了提高性能并避免对 active_row 进行全表扫描,我将 active_row 分区表中的表转换如下
CREATE TABLE [repo].[STXXXXX]
WITH
(
DISTRIBUTION = ROUND_ROBIN,
CLUSTERED INDEX (
[ID] ASC
),
PARTITION
(
active_Row RANGE LEFT FOR VALUES (0,1)
)
)
as
select * from repo.nonptxx;
用户报告移动到分区表后没有性能提升。当我检查以下查询时,即分区与非分区时,我看不到查询中有任何差异,可以简单地解释估计的子树、操作等,并且所有统计信息都保持不变。从 sys.dm_pdw_nodes_db_partition_stats 我可以看到在分区 1 上创建的 3 个分区有 2.7 亿个数据溢出到 60 个节点中,60 个节点的分区 2 溢出了 3000 万个数据,60 个节点的分区 3 是空的。
select * from [repo].[STXXXXX] where active_row =1
对
select * from repo.nonptxx where active_row =1
请指教出了什么问题,为什么移入分区表后没有改善,如何调优?
【问题讨论】:
标签: sql azure-synapse azure-sql-data-warehouse