Query洞察旨在结合慢Query日志和表统计信息日志系统表hg_table_info,快速获取当前Query的执行信息,例如Query进程的资源消耗、Query所涉及的表的元数据,以及Query对应的执行计划(plan)。同时可以通过Query洞察快速判断当前Query是否产生了DDL冲突,以及表锁情况,辅助业务进一步排查问题和处理问题。
前提条件
存在已登录实例,请参见登录实例。
进入Query洞察
您可从HoloWeb的诊断与优化页面直接进入Query洞察,也可通过HoloWeb的SQL编辑器或历史慢 Query跳转至Query洞察页面。
在顶部菜单栏左侧,选择相应的地域。
单击前往HoloWeb,进入HoloWeb开发页面。
进入Query洞察页面。
直接进入Query洞察
在顶部选择诊断与优化,单击左侧的元仓分析 > Query洞察,进入Query洞察页面。
跳转Query洞察
在HoloWeb中,SQL编辑器和历史慢 Query也可以跳转至Query洞察。跳转方式如下:
SQL编辑器:如果SQL在HoloWeb的SQL编辑器中运行,则执行时间大于1 s、且含有Query ID的SQL可以直接跳转至Query洞察。
历史慢 Query:在Query列表中,单击目标SQL操作列的图标可以跳转至Query洞察。
在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,将显示失败原因的详细信息。同时HoloWeb中Query洞察上线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锁。
报错:query is canceled
排查方法:当前Query执行的同一时间,涉及到的表执行了TRUNCATE或DROP等DDL操作,导致报错。可以将报错的Query ID输入到Query洞察中进行查询,在Query元数据页签的DDL冲突分析区域可以看到表的DDL操作。
SDK的SQL延迟高
排查方法:如果SDK的SQL延迟较高,可以通过Query洞察查看是否同一时间表有HQE的SQL抢锁,如下示例,一个SDK的SQL耗时18s,在读写表信息区域单击表锁分析。可查看到同一时间存在HQE的DML。HQE的DML是表锁,会导致SDK的Query等锁,从而出现耗时增加。若是不存在HQE的DML,则说明没有表锁,请前往优化写入和更新性能进一步排查原因。