You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Synapse Studio查询索引碎片报错:DB_ID附近语法不正确

解决Azure Synapse Studio中索引碎片查询报错的问题

报错原因

你使用的sys.dm_db_index_physical_stats是SQL Server原生动态管理视图,Azure Synapse SQL池(专用/无服务器)均不支持该视图,且参数中的DB_ID()调用方式在Synapse架构下不兼容,这是触发语法错误的核心原因。

针对不同Synapse SQL池的解决方案

1. 专用SQL池(原数据仓库)

专用SQL池采用分布式架构,需使用节点级动态管理视图查询索引碎片,可用语句如下:

SELECT 
    DB_NAME() AS DatabaseName,
    OBJECT_NAME(p.object_id) AS TableName,
    i.name AS IndexName,
    ips.avg_fragmentation_in_percent,
    ips.pdw_node_id
FROM 
    sys.dm_pdw_nodes_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, 'LIMITED') ips
INNER JOIN 
    sys.pdw_nodes_indexes i 
        ON ips.object_id = i.object_id 
        AND ips.index_id = i.index_id 
        AND ips.pdw_node_id = i.pdw_node_id
INNER JOIN 
    sys.pdw_index_mappings pm 
        ON i.object_id = pm.object_id 
        AND i.index_id = pm.index_id
INNER JOIN 
    sys.tables p 
        ON pm.physical_name = p.name
WHERE 
    OBJECT_NAME(p.object_id) NOT LIKE '%.%'
ORDER BY 
    TableName, IndexName, ips.pdw_node_id;
  • 说明:专用池数据分散在多节点,需通过sys.pdw_nodes_db_index_physical_stats获取各节点索引碎片,再通过sys.pdw_index_mappings关联逻辑表与节点物理表。

2. 无服务器SQL池

无服务器SQL池不支持用户创建自定义索引(外部表的聚集列存储索引由系统自动管理,无需手动维护碎片),因此查询索引碎片的操作无实际意义,无需执行此类语句。

额外注意事项

  • 在Synapse Studio执行查询前,需确认当前连接的是专用SQL池还是无服务器SQL池,两者系统视图集差异极大。
  • 专用SQL池的索引碎片维护逻辑与SQL Server不同,仅需针对高频查询的大表整理碎片,推荐使用ALTER INDEX REORGANIZE(部分场景不支持REBUILD)。

内容的提问来源于stack exchange,提问作者JaniH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 15:09:58