返回首页

gbase数据、南大通用产品文档:GBase8c慢SQL 诊断

更新日期:2024年09月11日

背景信息
在SQL 语句执行性能不符合预期时,
可以查看SQL 语句执行信息,
便于事后分析SQL
语句执行时的行为,从而诊断SQL 语句执行出现的相关问题。
前提条件
数据库实例运行正常。
查询SQL 语句信息,需要正确设置GUC 参数track_stmt_stat_level。
只能用系统管理员和监控管理员权限进行操作。
应用场景

查看数据库实例中慢SQL 语句执行信息,语法格式:
select * from dbe_perf.get_global_slow_sql_by_timestamp(start_timestamp,
end_timestamp);

查看数据库实例中SQL 语句执行信息,语法格式:
select * from dbe_perf.get_global_full_sql_by_timestamp(start_timestamp,
end_timestamp);

GBase 8c 管理员指南
南大通用数据技术股份有限公司
50
例如:
postgres=# 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 语句执行信息,语法格式:
select * from statement_history;
例如:
postgres=# select * from statement_history;
-[ RECORD
1 ]--------+-----------------------------------------------------------------
----------------------------------------------

GBase 8c 管理员指南
南大通用数据技术股份有限公司
51
---------------------------------------------------------------
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 语句执行信息
select * from dbe_perf.standby_statement_history(is_only_slow, start_timestamp,
end_timestamp);
例如:
postgres=# select * from dbe_perf.standby_statement_history(true, '2022-08-01
09:25:22', '2022-08-31 23:54:41');
db_name
| postgres
schema_name
| "$user",public
origin_node
| 0
user_name
| user_dj
application_name
| gsql
client_addr
|
client_port
| -1
unique_query_id
| 1660376009
debug_query_id
| 281474976710740

GBase 8c 管理员指南
南大通用数据技术股份有限公司
52
query
| select name, setting from pg_settings where name in (?)
start_time
| 2022-08-19 16:19:51.216818+08
finish_time
| 2022-08-19 16:19:51.224513+08
slow_sql_threshold
| 1800000000
transaction_id
| 0
thread_id
| 140058747205376
session_id
| 140058747205376
n_soft_parse
| 0
n_hard_parse
| 1
query_plan
| Datanode Name: sgnode
| Function Scan on pg_show_all_settings a
(cost=0.00..12.50 rows=5 width=64)
|
Filter: (name = '***'::text)
...

GBase 8c 管理员指南
南大通用数据技术股份有限公司
53
5
备份与恢复

GBase JDBC 是一种兼容JDBC 规范3.0、4.0(类型4)的驱动,这意味着
它是符合JDBC 3.0、4.0 版本规范的一种纯Java 程序,并能使用GBase 协议直
接和GBase 服务器通信。
GBase JDBC 为使用JAVA 程序语言的客户端应用提供
访问GBase 8s 接口。

获得当前节点的执行语句的信息。查询系统表必须具有sysadmin 权限。只可在系统库
中查询到结果,用户库中无法查询。
对于此系统表查询有如下约束:
必须在postgres 库内查询,其它库中不存数据。
此系统表受track_stmt_stat_level 控制,
默认为“OFF,L0”,
第一部分控制Full SQL,
第二
部分控制Slow SQL,具体字段记录级别见下表。
对于Slow SQL,当track_stmt_stat_level 的值为非OFF 时,且SQL 执行时间超过

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
1037
log_min_duration_statement,会记录为慢SQL。
名称
类型
描述
记录
级别
db_name
name
数据库名称。
L0
schema_name
name
schema 名称。
L0
origin_node
integer
节点名称。
L0
user_name
name
用户名。
L0
application_nam
e
text
用户发起的请求的应用程序名称。
L0
client_addr
text
用户发起的请求的客户端地址。
L0
client_port
integer
用户发起的请求的客户端端口。
L0
unique_query_i
d
bigint
归一化SQL ID。
L0
debug_query_id
bigint
唯一SQL ID。
L0
query
text
归一化SQL。
L0
start_time
timestamp with
time zone
语句启动的时间。
L0
finish_time
timestamp with
time zone
语句结束的时间。
L0
slow_sql_thresh
old
bigint
语句执行时慢SQL 的标准。
L0
transaction_id
bigint
事务ID。
L0
thread_id
bigint
执行线程ID。
L0
session_id
bigint
用户session id。
L0
n_soft_parse
bigint
软解析次数,n_soft_parse + n_hard_parse
可能大于n_calls,因为子查询未计入n_cal
ls。
L0

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
1038
名称
类型
描述
记录
级别
n_hard_parse
bigint
硬解析次数,n_soft_parse + n_hard_parse
可能大于n_calls,因为子查询未计入n_cal
ls。
L0
query_plan
text
语句执行计划。
L1
n_returned_row
s
bigint
SELECT 返回的结果集行数。
L0
n_tuples_fetche
d
bigint
随机扫描行。
L0
n_tuples_returne
d
bigint
顺序扫描行。
L0
n_tuples_inserte
d
bigint
插入行。
L0
n_tuples_update
d
bigint
更新行。
L0
n_tuples_delete
d
bigint
删除行。
L0
n_blocks_fetche
d
bigint
buffer 的块访问次数。
L0
n_blocks_hit
bigint
buffer 的块命中次数。
L0
db_time
bigint
有效的DB 时间花费,
多线程将累加
(单位:
微秒)。
L0
cpu_time
bigint
CPU 时间(单位:微秒)。
L0
execution_time
bigint
执行器内执行时间(单位:微秒)。
L0
parse_time
bigint
SQL 解析时间(单位:微秒)。
L0
plan_time
bigint
SQL 生成计划时间(单位:微秒)。
L0
rewrite_time
bigint
SQL 重写时间(单位:微秒)。
L0

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
1039
名称
类型
描述
记录
级别
pl_execution_ti
me
bigint
plpgsql 上的执行时间(单位:微秒)。
L0
pl_compilation_
time
bigint
plpgsql 上的编译时间(单位:微秒)。
L0
data_io_time
bigint
IO 上的时间花费(单位:微秒)。
L0
net_send_info
text
通过物理连接发送消息的网络状态,
包含时
间(微秒)、调用次数、吞吐量(字节)。
通过该字段可以分析SQL 在分布式系统下
的网络开销,
单机模式下不支持该字段。

如:{“time”:xxx, “n_calls”:xxx, “size”:xx
x}。
L0
net_recv_info
text
通过物理连接接收消息的网络状态,
包含时
间(微秒)、调用次数、吞吐量(字节)。
通过该字段可以分析SQL 在分布式系统下
的网络开销,
单机模式下不支持该字段。

如:{“time”:xxx, “n_calls”:xxx, “size”:xx
x}。
L0
net_stream_send
_info
text
通过逻辑连接发送消息的网络状态,
包含时
间(微秒)、调用次数、吞吐量(字节)。
通过该字段可以分析SQL 在分布式系统下
的网络开销,
单机模式下不支持该字段。

如:{“time”:xxx, “n_calls”:xxx, “size”:xx
x}。
L0
net_stream_recv
_info
text
通过逻辑连接接收消息的网络状态,
包含时
间(微秒)、调用次数、吞吐量(字节)。
通过该字段可以分析SQL 在分布式系统下
的网络开销,
单机模式下不支持该字段。

如:{“time”:xxx, “n_calls”:xxx, “size”:xx
x}。
L0
lock_count
bigint
加锁次数。
L0
lock_time
bigint
加锁耗时。
L1

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
1040
名称
类型
描述
记录
级别
lock_wait_count
bigint
加锁等待次数。
L0
lock_wait_time
bigint
加锁等待耗时。
L1
lock_max_count
bigint
最大持锁数量。
L0
lwlock_count
bigint
轻量级加锁次数(预留)。
L0
lwlock_wait_co
unt
bigint
轻量级等锁次数。
L0
lwlock_time
bigint
轻量级加锁时间(预留)。
L1
lwlock_wait_ti
me
bigint
轻量级等锁时间。
L1
details
bytea
语句锁事件的列表,
该列表按时间书序记录
事件,记录的数量受参数track_stmt_details
_size 的影响。该字段为二进制,需要借助
解析函数pg_catalog.statement_detail_decod
e 读取。
事件包括:
加锁开始
加锁结束
等锁开始
等锁结束
放锁开始
放锁结束
轻量级等锁开始
轻量级等锁结束
L2
is_slow_sql
boolean
该SQL 是否为slow SQL。
t(true):表示是。
f(false):表示不是。
L0
trace_id
text
驱动传入的trace id,与应用的一次请求相
关联。
L0

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
1041