首页 > 数据库 >openGauss 慢SQL诊断

openGauss 慢SQL诊断

时间:2024-03-30 09:56:43浏览次数:32  
标签:name 19 诊断 statement SQL query openGauss id

慢SQL诊断

可获得性

本特性自openGauss 1.1.0 版本开始引入。

重构前慢SQL相关视图已废弃,包括dbe_perf. gs_slow_query_info、dbe_perf.gs_slow_query_history、dbe_perf.global_slow_query_hisotry、dbe_perf.global_slow_query_info。

本特性自openGauss 3.1.0 版本支持备机。

特性简介

慢SQL诊断提供诊断慢SQL所需要的必要信息,帮助开发者回溯执行时间超过阈值的SQL,诊断SQL性能瓶颈。

客户价值

慢SQL诊断提供给用户对于慢SQL所需的详细信息,用户无需通过复现就能离线诊断特定慢SQL的性能问题。表和函数接口方便用户统计慢SQL指标,对接第三方平台。

特性描述

慢SQL能根据用户提供的执行时间阈值(log_min_duration_statement),记录所有超过阈值的执行完毕的作业信息。

在主机中,慢SQL提供表和函数两种维度的查询接口。用户从接口中能查询到作业的执行计划,开始、结束执行时间,执行查询的语句,行活动,内核时间,CPU时间,执行时间,解析时间,编译时间,查询重写时间,计划生成时间,网络时间,IO时间,网络开销,锁开销,等待事件等。以上所有信息都是脱敏的。

在备机中,慢SQL提供一个专用的函数作为查询接口。由于备机无法往表(statement_history)中写入性能诊断数据,因此备机使用了新的方式来记录数据,并通过函数接口查询,用户在接口中查询到的各类信息,与主机的表(statement_history)完全一致。

特性增强

增加对慢SQL指标信息、安全性(脱敏)、执行计划、查询接口的增强。

主机:执行命令查看数据库实例中SQL语句执行信息
gsql> select * from dbe_perf.get_global_full_sql_by_timestamp(start_timestamp, end_timestamp); 
例如:
openGauss=# select * from DBE_PERF.get_global_full_sql_by_timestamp('2020-12-01 09:25:22', '2020-12-31 23:54:41');
-[ RECORD 1 ]--------+---------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------
node_name            | dn_6001_6002_6003
db_name              | postgres
schema_name          | "$user",public
origin_node          | 1938253334
user_name            | user_dj
application_name     | gsql
client_addr          |
client_port          | -1
unique_query_id      | 3671179229
debug_query_id       | 72339069014839210
query                | select name, setting from pg_settings where name in (?)
start_time           | 2020-12-19 16:19:51.216818+08
finish_time          | 2020-12-19 16:19:51.224513+08
slow_sql_threshold   | 1800000000
transaction_id       | 0
thread_id            | 139884662093568
session_id           | 139884662093568
n_soft_parse         | 0
n_hard_parse         | 1
query_plan           | Datanode Name: dn_6001_6002_6003
                     | Function Scan on pg_show_all_settings a  (cost=0.00..12.50 rows=5 width=64)
                     |   Filter: (name = '***'::text)
...

主机:执行命令查看数据库实例中慢SQL语句执行信息
gsql> select * from dbe_perf.get_global_slow_sql_by_timestamp(start_timestamp, end_timestamp);
openGauss=# select * from DBE_PERF.get_global_slow_sql_by_timestamp('2020-12-01 09:25:22', '2020-12-31 23:54:41');
-[ RECORD 1 ]--------+---------------------------------------------------------------------------------------------------
node_name            | dn_6001_6002_6003
db_name              | postgres
schema_name          | "$user",public
origin_node          | 1938253334
user_name            | user_dj
application_name     | gsql
client_addr          |
client_port          | -1
unique_query_id      | 2165004317
debug_query_id       | 72339069014839319
query                | select * from DBE_PERF.get_global_slow_sql_by_timestamp(?, ?);
start_time           | 2020-12-19 16:23:20.738491+08
finish_time          | 2020-12-19 16:23:20.773714+08
slow_sql_threshold   | 10000
transaction_id       | 0
thread_id            | 139884662093568
session_id           | 139884662093568
n_soft_parse         | 10
n_hard_parse         | 8
query_plan           | Datanode Name: dn_6001_6002_6003
                     | Result  (cost=1.01..1.02 rows=1 width=0)
                     |   InitPlan 1 (returns $0)
                     |     ->  Seq Scan on pgxc_node  (cost=0.00..1.01 rows=1 width=64)
                     |           Filter: (nodeis_active AND ((node_type = '***'::"char") OR (node_type = '***'::"char")))
...

主机:查看当前节点SQL语句执行信息
gsql> select * from statement_history;
例如:
openGauss=# select * from statement_history;
-[ RECORD 1 ]--------+---------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------
db_name              | postgres
schema_name          | "$user",public
origin_node          | 1938253334
user_name            | user_dj
application_name     | gsql
client_addr          |
client_port          | -1
unique_query_id      | 3671179229
debug_query_id       | 72339069014839210
query                | select name, setting from pg_settings where name in (?)
start_time           | 2020-12-19 16:19:51.216818+08
finish_time          | 2020-12-19 16:19:51.224513+08
slow_sql_threshold   | 1800000000
transaction_id       | 0
thread_id            | 139884662093568
session_id           | 139884662093568
n_soft_parse         | 0
n_hard_parse         | 1
query_plan           | Datanode Name: dn_6001_6002_6003
                     | Function Scan on pg_show_all_settings a  (cost=0.00..12.50 rows=5 width=64)
                     |   Filter: (name = '***'::text)
                     
备机:查看当前节点SQL语句执行信息
gsql> select * from dbe_perf.standby_statement_history(only_slow, start_time, end_time);
例如:
openGauss=# select * from dbe_perf.standby_statement_history(false);
-[ RECORD 1 ]--------+---------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------
db_name              | postgres
schema_name          | "$user",public
origin_node          | 1938253334
user_name            | user_dj
application_name     | gsql
client_addr          |
client_port          | -1
unique_query_id      | 3671179229
debug_query_id       | 72339069014839210
query                | select name, setting from pg_settings where name in (?)
start_time           | 2020-12-19 16:19:51.216818+08
finish_time          | 2020-12-19 16:19:51.224513+08
slow_sql_threshold   | 1800000000
transaction_id       | 0
thread_id            | 139884662093568
session_id           | 139884662093568
n_soft_parse         | 0
n_hard_parse         | 1
query_plan           | Datanode Name: dn_6001_6002_6003
                     | Function Scan on pg_show_all_settings a  (cost=0.00..12.50 rows=5 width=64)
                     |   Filter: (name = '***'::text)

特性约束

  • 目前的SQL跟踪信息,基于正常的执行逻辑。执行失败的SQL,其跟踪信息不具有准确的参考价值。
  • 节点重启,可能导致该节点的数据丢失。
  • SQL语句执行完立即退出会话,可能会丢失该会话未刷新到系统表中的数据。
  • 通过GUC参数设置收集SQL语句的数量,如果超过阈值,新的SQL语句执行信息不会被收集。
  • 通过GUC参数设置单条SQL语句收集的锁事件详细信息的最大字节数,如果超过阈值,新的锁事件详细信息不会被收集。
  • 通过异步刷新方式刷新用户执行中的SQL信息,所以用户Query执行结束后,存在查询相关视图函数结果短暂时延。
  • 当track_stmt_parameter为off时,query字段最大长度受track_activity_query_size控制。
  • 部分指标信息(行活动、Cache/IO、时间分布等)依赖于dbe_perf.statement视图收集,如果该视图对应记录数超过预定大小(依赖GUC:instr_unique_sql_count),则本特性可能不收集相关指标。
  • statement_history表相关函数以及视图、备机dbe_perf.standby_statement_history中的details字段为二进制格式,如果需要解析详细内容,请使用对应函数pg_catalog.statement_detail_decode(details, 'plaintext', true)。
  • statement_history表查询需要切换至postgres库,其他库中数据为空。
  • 备机dbe_perf.standby_statement_history函数查询需要切换至postgres库,其他库中查询会提示不可用。
  • 备机通过参数track_stmt_standby_chain_size进行记录数据所占用内存、磁盘空间的大小限制。
  • statement_history表以及备机dbe_perf.standby_statement_history函数的内容受track_stmt_stat_level控制,默认为'OFF,L0',参数第一部分代表Full SQL,第二部分是慢SQL;对于慢SQL,只有SQL运行时间超过log_min_duration_statement时才会被记录。

依赖关系

无。

标签:name,19,诊断,statement,SQL,query,openGauss,id
From: https://www.cnblogs.com/renxyz/p/18105102

相关文章

  • openGauss 内置stack工具
    内置stack工具可获得性本特性自3.0.0版本开始引入。特性简介stack工具是获取数据库中各线程的调用栈的工具,用于辅助数据库运维人员定位死锁、hang等问题。客户价值提供函数级别的调用栈信息,提升数据库内核运维人员分析、定位死锁、hang等问题的效率。特性描述可以通过函数......
  • openGauss 慢SQL发现
    慢SQL发现可获得性本特性自openGauss1.1.0版本开始引入。特性简介本功能是一个SQL语句执行时间预测工具,通过模板化方法,实现在不获取SQL语句执行计划的前提下,依据语句逻辑相似度与历史执行记录,预测SQL语句的执行时间。客户价值工具不需要用户提供SQL执行计划,对数据库性能不......
  • openGauss 慢SQL根因分析
    慢SQL根因分析可获得性本特性自openGauss3.0.0开始引入。特性简介慢SQL一直是数据运维中的痛点问题,如何有效诊断慢SQL根因是当前一大难题,工具结合openGauss自身特点融合了现网DBA慢SQL诊断经验,该工具可以支持慢SQL根因15+,能同时按照可能性大小输出多个根因并提供针对性的建议......
  • openGauss 逻辑复制
    逻辑复制可获得性本特性自openGauss1.0.0版本开始引入。特性简介openGauss提供逻辑解码功能,将物理日志反解析为逻辑日志。通过DRS等逻辑复制工具将逻辑日志转化为SQL语句,到对端数据库回放,达到异构数据库同步数据的功能。目前支持openGauss数据库与MySQL数据库、Oracle数据库......
  • openGauss 访问控制模型
    访问控制模型可获得性本特性自openGauss1.1.0版本开始引入。特性简介管理用户访问权限,为用户分配完成任务所需要的最小权限。客户价值客户依据自身需求创建对应的数据库用户并赋予相应的权限给操作人员,将数据库使用风险降到最低。特性描述数据库提供了基于角色的访问控制......
  • openGauss 堆表支持预读
    堆表支持预读可获得性本特性自openGauss6.0.0版本开始引入。特性简介在对堆表进行扫描进行顺序页面读取时,通过一次行读入多个页面,来减少因频繁读单页的IO损耗,提升对堆表进行线性扫描的性能表现。客户价值提升客户在频繁进行全表线性扫描场景下的性能表现。特性描述在对数......
  • openGauss 发布订阅
    发布订阅可获得性本特性自openGauss3.0.0版本开始引入。特性简介发布订阅基于逻辑复制实现,其中有一个或者更多订阅者订阅一个发布者节点上的一个或者更多发布。订阅者从它们所订阅的发布拉取数据。实现集群间的数据实时同步。客户价值发布订阅的典型使用场景是:在一个数......
  • openGauss 反向迁移gs_replicate
    反向迁移gs_replicate特性简介支持openGauss的增量数据在线迁移至MySQL。客户价值反向迁移是指用户将源端数据库迁移到目标数据库,应用切到目标数据库后,再将目标端新产生的数据迁移回源端。反向迁移可满足用户业务迁移逃生的诉求,保持源端、目标端两个库并行运行,在目标端数据库......
  • openGauss 备机增加删除
    备机增加删除可获得性本特性自openGauss2.0.0版本开始引入。特性简介支持新增和删除备节点。客户价值当主库的读取压力较大,或者用户想要提升数据库灾难恢复能力,需要新增备节点。当集群中的某些备节点发生故障无法短时间内进行修复时,为保证集群状态正常,用户可以先将故障节点......
  • openGauss 动态数据脱敏机制
    动态数据脱敏机制可获得性本特性自openGauss1.1.0版本开始引入。特性简介数据脱敏是行之有效的数据库隐私保护方案之一,可以在一定程度上限制非授权用户对隐私数据的窥探。动态数据脱敏机制是一种通过定制化制定脱敏策略从而实现对隐私数据保护的一种技术,可以有效地在保留原始......