加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

[转载]达梦7的本地并行查询

(2014-02-24 12:20:22)
标签:

转载

这是去o的节奏啊http://www/uc/myshow/blog/misc/gif/E___0472ZH00SIGT.gif

达梦7的本地并行查询(LPQ)

现在CPU的核心越来越多,手机都是48核了,但是要利用这些计算资源却并不简单,很多流行的数据库,比如MySQLPostgreSQL至今都无法充分利用并行多核计算,每一个连接同时只能使用一个核。当CPU核的个数远小于并发连接数时,这不是一个问题;但是如果没有并发,把一个复杂查询发给服务器时,你还是只能用一个核,其他CPU都空闲着,无法分担工作。 

达梦7的设计要比MySQL等优越得多,一开始就考虑了多核计算问题。Oracle不同,达梦7采用的是对称并行技术。为了和多机并行(MPP)区别,达梦7称它为本地并行LPQ(Local Parallel Query)。在MPP环境下,可以同时打开LPQ以实现最大程度的秉性以提升复杂查询的性能。所谓对称并行,就是没一个执行流都执行同样的计划,其中0号线程称为主线程,它负责向并行工程线程分发计划,收集数据并向客户返回最终结果。不管是主线程,还是从线程它们所执行的计划都是相同的。

为了启用LPQ, 需要在dm.ini中配置3个参数:

PARALLEL_POLICY = 2

参数有3个值可选, 1表示禁止LPQ, 1表示自动并行,2表示手动;所谓自动,就是系统对任何一个SQL都试图并行执行,除非使用了HINT限制并行度;手动则正好相反,除非用HINT指定了并行度,否则不并行。考虑到并行查询可能的副作用,一般建议使用手动并行配置。HINT采用这样的形式, 其中t是可选的任意标识符。

MAX_PARALLEL_DREE = 16

    这个参数表示单个查询的最大的并行度,必须小于等于PARALLEL_THRD_NUM

PARALLEL_THRD_NUM = 64

    这个参数表示系统启动时,创建多少个并行线程资源,一般不大于CPU核的个数*2

 上例中,我们配置了手动最大16路并行,64个并行线程。在这个配置下,可以有4SQL16路并行。

 下面是一个简单的例子。这个查询求那些含有接收日期(receiptdate)大于提交日期(commitdate)且有不同供应商的定单的总数,用了一个相关子查询来的SQL来描述。先看看没有指定并行的查询及计划:

 http://s2/mw690/0022D0wOgy6GNgAvNEB21&690

达梦7的执行计划是一个严格平坦的二叉树,优化器选择了HASH 左半连接来消除了EXISTS这个嵌套子查询。上面的计划也很简单:使用HFSCN扫描L1, SLCT2过滤掉不符合receiptdate>commitdate的纪录,然后创建一个HASH表,再用下面这个HFSCN 扫描L2, 对每一条记录使用orderkeyHASH表探测,如果探测到匹配的且符合l2.suppkey<>l1.suppkey, 则打上标记,最后把HASH表中有标记的记录向上输送给AAGR汇总计算count(*),并最后传递给投影PRJT2获得最终结果。

 达梦7的并行计划是在普通计划的基础上,插入相应的通讯操作符号来实现的。下面是并行启用后的查询和计划:

 

 http://s16/mw690/0022D0wOgy6GNgE51gPaf&690

这个并行计划和原来的计划的差别在于,多了一个LGAT(LOCAL GATHER)和两个LDIS(LOCAL DISTRIBUTE)操作符。因为并行计划是多个线程并行执行的,它们需要在适当的时机进行通讯同步数据,或者组织自己的数据流,这就是LPQ操作符的工作。在上例中指定了并行度为4,因此HASH左半连接的运算是由4个线程做的,每个LPQ线程在运算前,需要用LDIS和其它线程交换数据,以保证HASH值相同的数据在相同的LPQ执行流上,否则会导致结果错误。连接完成后,再独自使用AAGR完成各自的count(*)计算,然后传递给LGAT, LGAT会把结果汇总到主线程,再次汇总后即可获得结果。

上面这个查询四路并行的时间在我的笔记本上大概需要900毫秒,其中lineitem600万行记录。

达梦7的本地并行技术极大提升了复杂查询对硬件计算资源的利用能力,有效提升了查询性能。这一技术得益于于达梦7强大的优化器,平坦化的计划可以很方便被转换为并行计划;也得益于达梦7高性能的HASH连接技术和批量计算技术。在复杂分析场景,结合列存和压缩,对于任何其他数据库,达梦7都是一个强有力的竞争对手。

0

  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有