返回首页

gbase数据、南大通用产品文档:GBase8c

更新日期:2024年09月11日

算子级调优
算子级调优介绍
一个查询语句要经过多个算子步骤才会输出最终的结果。
由于个别算子耗时过长导致整
体查询性能下降的情况比较常见。这些算子是整个查询的瓶颈算子。通用的优化手段是

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
558
EXPLAIN ANALYZE/PERFORMANCE 命令查看执行过程的瓶颈算子,
然后进行针对性优化。
如下面的执行过程信息中,Hashagg 算子的执行时间占总时间的:(51016-13535)/ 56476
≈66%,此处Hashagg 算子就是这个查询的瓶颈算子,在进行性能优化时应当优先考虑此算
子的优化。
算子级调优示例
示例1:
基表扫描时,
对于点查或者范围扫描等过滤大量数据的查询,
如果使用SeqScan
全表扫描会比较耗时,
可以在条件列上建立索引选择IndexScan 进行索引扫描提升扫描效率。
gsql=#
explain (analyze on, costs off) select * from store_sales where ss_sold_date_sk =
2450944;
id |
operation
|
A-time
| A-rows | Peak Memory
|
A-width
----+--------------------------------+---------------------+--------+--------------+---------
1 | ->
Streaming (type: GATHER)
| 3666.020
|
3360 | 195KB
|
2 |
->
Seq Scan on store_sales | [3594.611,3594.611] |
3360 | [34KB, 34KB] |
(2 rows)
Predicate Information (identified by plan id)
-----------------------------------------------
2 --Seq Scan on store_sales
Filter: (ss_sold_date_sk = 2450944)
Rows Removed by Filter: 4968936
gsql=#
create index idx on store_sales_row(ss_sold_date_sk);
CREATE INDEX
gsql=#
explain (analyze on, costs off) select * from store_sales_row where ss_sold_date_sk =
2450944;
id |
operation
|
A-time
| A-rows |
Peak Memory
| A-width
----+------------------------------------------------+-----------------+--------+--------------+----------
1 | ->
Streaming (type: GATHER)
| 81.524
|
3360 |
195KB
|
2 |
->
Index Scan using idx on store_sales_row | [13.352,13.352] |
3360 | [34KB,
34KB] |
(2 rows)
上述例子中,全表扫描返回3360 条数据,过滤掉大量数据,在ss_sold_date_sk 列上建
立索引后,使用IndexScan 扫描效率显著提高,从3.6 秒提升到13 毫秒。

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
559
示例2:
如果从执行计划中看,
两表join 选择了NestLoop,
而实际行数比较大时,
NestLoop
Join 可能执行比较慢。如下的例子中NestLoop 耗时181 秒,如果设置参数
enable_mergejoin=off 关掉Merge Join,同时设置参数enable_nestloop=off 关掉NestLoop,让
优化器选择HashJoin,则Join 耗时提升至200 多毫秒。
示例3:
通常情况下Agg 选择HashAgg 性能较好,
如果大结果集选择了Sort+GroupAgg,
则需要设置enable_sort=off,HashAgg 耗时明显优于Sort+GroupAgg。

使用 MAX_PDQPRIORITY 配置参数来限制 PDQ 资源,数据库服务器可将这些资源分配给任
一 DSS 查询。
onconfig.std 值
MAX_PDQPRIORITY 100

0 = 关闭 PDQ。DSS 查询不使用并行性。
1 = 从分片表并行取回数据(并行扫描),但不使用其他形式的并行性。
2 - 100 = 设置实际地分配给该查询的用户要求的 PDQ 资源百分率。100 使用所有可用资
源来并行处理查询。
生效

GBase 8s 管理员参考
南大通用数据技术股份有限公司 - 106 -
在所有用户会话上,编辑 onconfig 文件并重启数据库服务器之后。
当您通过运行 onmode -wf 命令在 onconfig 文件中动态地重置该值时。
当您通过运行 onmode -wm 命令重置内存中的该值时。
用法
MAX_PDQPRIORITY 是用来衡量用户设置的 PDQ 优先权的一个因素。例如,假定数据库管理
员设置 MAX_PDQPRIORITY 为 80。如果一个用户设置 PDQPRIORITY 环境变量 为 50 然后
发出一个查询,则数据库服务器自动地以 PDQ 优先权 40 处理该查询。
在数据库服务器 online 时,您可使用 onmode 实用程序来更改 MAX_PDQPRIORITY 的值。

在 GBase 8s 中,PDQ 资源包括内存、CPU、磁盘 I/O 和扫描线程。MAX_PDQPRIORITY 让
数据库管理员与 OLTP 并发地运行决策支持,未影响 OLTP 性能。 然而,如果
MAX_PDQPRIORITY 过低,可降低决策支持查询的性能。

操作系统配置推荐
下面配置命令主要是以海光服务器为例。
 修改电源管理器的配置文件,设置throughput-performance 可以设置
P-state 为Performance 状态。
 关闭NetworkManager,避免造成路由冲突。
操作示例:
# tuned-adm profile throughput-performance
# systemctl stop NetworkManager
# systemctl disable NetworkManager

 修改内核参数。示例如下:
vi /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.enp33s0f0.arp_ignore=1
net.ipv4.conf.enp113s0f0.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
net.ipv4.conf.enp33s0f0.arp_announce=2
net.ipv4.conf.enp113s0f0.arp_announce=2
说明:
内核参数arp_ignore 为1 代表响应目的IP 地址为接收网卡上的本地地址
的arp 请求
内核参数arp_announce 为2 代表只向该网卡回应与该网段匹配的ARP 报文
 时间同步。示例如下
ntpdate -d 22.188.116.80
chronyd sources





南大通用数据技术股份有限公司
35/44
4 多实例管理