GBase_David
作者GBase_David·2017-07-20 15:25
DBA·GBase

利用PDQ来提高数据库的性能

字数 1882阅读 1795评论 0赞 2

大家都知道GBase8t是基于Informix为原型的OLTP数据库,Informix是一款多线程的数据库,支持高度并行的任务处理。类似如下图。
捕获.JPG

捕获.JPG

如何能够实现并行扫描、并行join、并行 sort呢?就需要考虑到PDQ(parallel database queries)的使用。
首先介绍PDQ能够解决的问题和实现的功能:
Informix的PDQ资源包括内存、CPU、磁盘IO和scan thread。
Informix可以支持的操作有scan、sort、aggregation,依赖于表的数量、查询需要扫描的分片数。

怎么来理解PDQ呢?
我对于PDQ的理解其实是两部分,一部分是内存资源;另外一部分的线程资源。需要两部分的资源全部满足,才可能对查询语句启用PDQ。

那么如何实现上述功能的并行执行呢?数据库提供了几个关键参数来支持,具体如下:
MAX_PDQPRIORITY 40
DS_MAX_QUERIES 10
DS_TOTAL_MEMORY 200000
DS_MAX_SCANS 1048576

MAX_PDQPRIORITY
限制数据库服务器可以分配给任何一个DSS查询的PDQ资源。
捕获.JPG

捕获.JPG

DS_MAX_QUERIES
指定并行数据库中同时运行的查询的最大数目

DS_TOTAL_MEMORY
指定用于PDQ查询的内存总量

DS_MAX_SCANS
限制数据库可以并发运行的PDQ扫描线程数

PDQ是由MGM来管理的,MGM是数据库的一个内存组件,负责协调内存、CPU VPs、disk IO、scan thread的使用在决策支持查询中。
通过onstat -g mgm可以查看MGM的的相关信息。

PDQ的内存管理:
MGM给查询分配内存的最小单元是quantum unit。quantum unit:是分配和查询的最小的内存增量。
内存分配的原则是取round(),按照接近最低的quantum的倍数为准,后面有示例。
quantum = DS_TOTAL_MEMORY/DS_MAX_QUERIES
其中DS_TOTAL_MEMORY在V段中,在64位的数据库上,最大到4GB(需要查资料再确认一下)。

示例如下:
DBA 设置
DS_TOTAL_MEMORY = 20000 (KB)
DS_MAX_QUERIES = 4
MAX_PDQPRIORITY = 75

User1 设置 PDQPRIORITY 环境变量为 100
User2 运行下面SQL语句SET PDQPRIORITY 75

问题 (假设两个用户都运行了一次查询)
User1获得多少内存?
(20000/4) =5000 Quantum; 2000075/100100/100 = 15000 KB
15000=5000*3 所以刚好分配。
User1的优先级为多少 ?
75(max) * 100 (user) = 75
User2获得多少内存?
(20000/4)=5000 Quantum;
2000075/10075/100=11250
最接近Quantum*N倍的值是10000KB,所以应该分配10000KB,而不是分配11250KB。
User2的优先级为多少 ?
75(max) * 75(user) rounded down = 56
两个用户的查询会同时运行吗?
不能。第二个会话明显获取不到期望的内存。

PDQ的线程管理:
MGM的保留线程数为:
reserved_threads= min(nfrags (DS_MAX_SCANSPDQPRIORITY/100MAX_PDQPRIORITY/100))
每个会话能用拥有的会话的道理和内存的道理一致。

在实际应用中还有跟客户端的设置有非常大的关系,客户端的设置有两个方法:
1、环境变量 export PDQPRIORITY=1
2、会话中设置 Set PDQPRIORITY 50;
每个PDQ查询或会话能够获取到的PDQ资源都是以PDQPRIORITY*MAX_PDQPRIORITY为基础的。

PDQ可以影响到的操作:
1、update|delete
2、insert
3、create index
4、update statistics
不可用使用PDQ的操作:
1、子查询
2、SPL TRIGER
3、for each row游标操作;
4、远程表 可以PDQ,但是通信部分无法实现并行传输,所以整体上还是无法并行处理。

监控是否启用PDQ:
onstat -g mgm
onstat -g ath
onstat -g ses
onstat -u

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

2

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

X社区推广