Query洞察

Query洞察旨在结合慢Query日志和表统计信息日志系统表hg_table_info,快速获取当前Query的执行信息,例如Query进程的资源消耗、Query所涉及的表的元数据,以及Query对应的执行计划(plan)。同时可以通过Query洞察快速判断当前Query是否产生了DDL冲突,以及表锁情况,辅助业务进一步排查问题和处理问题。

前提条件

存在已登录实例,请参见登录实例

进入Query洞察

您可从HoloWeb的诊断与优化页面直接进入Query洞察,也可通过HoloWeb的SQL编辑器历史慢 Query跳转至Query洞察页面。

  1. 登录Hologres管理控制台

  2. 在顶部菜单栏左侧,选择相应的地域。

  3. 单击前往HoloWeb,进入HoloWeb开发页面。

  4. 进入Query洞察页面。

    直接进入Query洞察

    在顶部选择诊断与优化,单击左侧的元仓分析 > Query洞察,进入Query洞察页面。image

    跳转Query洞察

    在HoloWeb中,SQL编辑器历史慢 Query也可以跳转至Query洞察。跳转方式如下:

    • SQL编辑器:如果SQL在HoloWeb的SQL编辑器中运行,则执行时间大于1 s、且含有Query ID的SQL可以直接跳转至Query洞察。image

    • 历史慢 Query:在Query列表中,单击目标SQL操作列的image图标可以跳转至Query洞察。image

    在Query洞察页面,您可以查看Query元数据Table元数据,及进行Plan可视化表锁分析

Query元数据

Query元数据来源于Hologres慢Query日志,默认只采集执行时间大于100 ms的DML和所有的DDL(查询时仅能展示执行时间大于1 s的DDL),且慢Query日志需要一定的权限才能查询,详情请参见慢Query日志查看与分析。您需要在Query元数据页签选择对应的实例名Query ID,单击查询即可展示Query元数据。

  • 基本信息

    展示Query所属的实例ID、DB以及实例版本。

  • Query信息

    展示Query的基本信息,采集自慢Query日志,包括执行的用户、执行状态、所用的执行引擎等。

  • 资源消耗

    展示Query运行过程中的资源消耗情况,采集自慢Query日志,包括扫描函数、CPU消耗等。

  • 其他信息

    Query的额外扩展信息,采集自慢Query日志,包括Client IP等。

  • SQL

    当前的Query具体内容,可以对Query进行格式化(更加直观友好的展示Query)以及复制Query。

  • Query Detail

    Query如果是传参数形式执行,Query Detail将会采集出具体的参数值。可以选择将参数合并到SQL里。

  • 执行计划

    当前Query的Plan,采集自慢Query日志的Plan字段,需要注意的是,仅执行时间大于10 s的Query才会采集Plan。可以使用可视化功能跳转至Plan可视化,通过图形化的能力分析Plan,以便进一步对Query调优。Plan详情请参见EXPLAIN和EXPLAIN ANALYZE

  • Statistics

    当前Query的运行信息,采集自慢Query日志的Statistics字段。会展示每个算子的详细消耗信息,包括扫描的行数、算子耗时等。可以根据Statistics进一步分析算子的消耗,以便进一步对Query调优。

  • 读写表信息

    展示当前Query涉及的表(读或写),可以单击:

    • 表元数据:跳转至表元数据页面,查看当前表的相关元数据。但需要注意表的元数据采集自hg_table_info表,默认T+1日更新数据,如果表是当天创建的,会查询不到。

    • 表锁分析:跳转至表锁分析页面,可以查看当前Query是否有锁,仅会检测DML相关的锁。例如走Fixed Plan的SQL查询变慢,可以使用表锁分析查看表是否同时存在HQE(Hologres自研执行引擎)的DML,导致Query耗时增加。

  • DDL冲突分析

    展示当前Query执行的前后1min时间内,涉及到的表是否产生了DDL操作,用于辅助判断是否存在DDL冲突,导致Query失败报错:Query is canceled

  • 错误信息

    如果是失败的Query,将显示失败原因的详细信息。同时HoloWebQuery洞察上线SQL智能诊断功能,会将新增的失败原因和解决方案自动返回错误信息中,以方便您更好地处理错误SQL。更多常见的失败SQL和解决方法可以参考Hologres SQL语句的常见问题

Table元数据

Table元数据来源于Hologres的表统计信息日志系统表hg_table_info,每天凌晨采集汇报一次,T-1更新,因此当天的Table元数据只能在第二天查询。

使用Table元数据可以直接从Query元数据的表信息跳转,即可查看表对应的元数据。同时也可以手动输入表的相关信息(所在实例名、数据库、Schema)以及表的元数据收集时间,即可查看表对应的元数据信息。

  • 基本信息

    包含表名、是否分区,以及分区对应的信息。

  • 表元数据信息

    包含表的创建时间,收集时间,存储量等信息。

  • 表属性信息

    展示当前表设置的索引,包括PK、Distribution Key等。

  • 表结构信息

    展示当前表的结构,包含字段及字段类型、是否可空、有无Default值。

Plan可视化

Plan可视化用于将慢Query日志中的plan字段进行可视化展示,但需要注意,仅运行耗时超过10 s的Query才会采集plan信息。plan详情请参见EXPLAIN和EXPLAIN ANALYZE

表锁分析

表锁分析可以查询当前SQL是否产生HQE的DML(INSERT、UPDATE、DELETE)操作,用于辅助诊断SDK的SQL因为锁而导致执行慢的问题。如果同一时间内,一个表同时存在SDK或HQE的Query和HQE的DML Query,则说明有锁。建议尽量避免同一时间执行两种操作。

使用Query洞察排查常见问题

  • 报错:relation with OID xxx does not exist

    排查方法:通常是由于Query涉及到的表发生了TRUNCATE或DROP等操作,导致表的oid发生了变化。可以使用Query洞察查看报错的Query ID,确认同一时间是否存在DDL锁。image

  • 报错:query is canceled

    排查方法:当前Query执行的同一时间,涉及到的表执行了TRUNCATE或DROP等DDL操作,导致报错。可以将报错的Query ID输入到Query洞察中进行查询,在Query元数据页签的DDL冲突分析区域可以看到表的DDL操作。image

  • SDK的SQL延迟高

    排查方法:如果SDK的SQL延迟较高,可以通过Query洞察查看是否同一时间表有HQE的SQL抢锁,如下示例,一个SDK的SQL耗时18s,在读写表信息区域单击表锁分析。image可查看到同一时间存在HQE的DML。HQE的DML是表锁,会导致SDK的Query等锁,从而出现耗时增加。若是不存在HQE的DML,则说明没有表锁,请前往优化写入和更新性能进一步排查原因。image