DM数据库并行查询入门

Posted 小子宝丁

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DM数据库并行查询入门相关的知识,希望对你有一定的参考价值。


并行查询


记得小学时,学习完新的课文,老师总是要求同学们把课后生词写 n 遍,刚开始总是老老实实地写,花费很多时间,后来同学们之间有一个很好的操作——写这类作业时手握两三支笔,就如两三个人同时在写,花费的时间减少了一半以上。
一般的数据库查询都是串行查询,达梦提供了并行查询的方法。一个串行执行的查询语句只能利用 CPU 或者磁盘设备中的一 个,而不能利用整个计算机的处理能力。并行查询技术的出现,使得单个 SQL 语句能利用多个 CPU 和磁盘设备的处理能力。其优势在于可以通过多个线程来处理查询任务,从而提 高查询的效率。


并行查询相关参数


DM默认不支持并行查询,需要数据库管理员手动开启。下面是DM数据库并行查询相关的三个参数。


开启并行查询

开启并行查询需要修改 PARALLEL_POLICY 参数。它有三个可选值,默认是 0 ,表示不支持并行查询。1 表示自动并行模式,即所有的查询默认都使用并行查询,这种方式其实是不推荐的,因为不是所有的查询都适合并行查询。因此一般情况下都使用手动并行模式,即设置这个参数的值为 2 。


开启并行查询

注意:并行查询参数 PARALLEL_POLICY 是静态属性,修改后要重启数据库服务。

使用手动并行模式时,只需要在 INI 参数中设置好如下 2 个参数,然后执行并行 SQL 查询语句时,需手动指定当前并行任务个数。若不指定,将不使用并行。设置的 2 个参数 如下:

PARALLEL_POLICY 2
PARALLEL_THRD_NUM 4

使用自动并行模式时,一般指定三个参数,如下:

MAX_PARALLEL_DEGREE 3
PARALLEL_POLICY 1
PARALLEL_THRD_NUM 10

   当开启自动并行(PARALLEL_POLICY=1)时,参数 MAX_PARALLEL_DEGREE 生效,

控制并行查询最多使用的线程数。MAX_PARALLEL_DEGREE 缺省值为 1,表示不并行。此时若指定参数对应的 HINT “PARALLEL”,则使用 HINT 值;

    当开启手动并行(PARALLEL_POLICY=2)时,参数 MAX_PARALLEL_DEGREE 失效,

用户需要在语句中使用此参数对应的 HINT “PARALLEL”指定语句的并行度,否则不并行。


Linux 下操作DM服务的相关命令


# 查看数据库状态
service DmServiceDMSERVER status

# 重启DM数据库服务
service DmServiceDMSERVER restart

# 停、启用数据库服务
service DmServiceDMSERVER stop
service DmServiceDMSERVER start


检查并行查询参数是否生效

修改完并行查询参数,保证数据库服务重启以后,我们可以查看修改的参数是否生效,SQL语句如下:
-- 查看 PARALLEL_POLICY
select para_name,para_value,para_type from v$dm_ini where = para_name 'PARALLEL_POLICY';

-- 查看 PARALLEL_THRD_NUM
select para_name,para_value,para_type from v$dm_ini where para_name = 'PARALLEL_THRD_NUM';

-- 查看 MAX_PARALLEL_DEGREE
select para_name,para_value,para_type from v$dm_ini where para_name = 'MAX_PARALLEL_DEGREE';


使用并行查询


前面我们选择开启手动并行模式,一般情况下配置两个参数就可以了,剩下的并行任务数可以在查询语句中指定。手动并行模式下并行查询的语法为:
/*+ PARALLEL([<表名>] <并行任务个数>) */

示例,当前表 test_01 的中数据量为1100000,聚集索引是 rowid 。

-- 不使用并行查询:耗时12.539
select * from test_01
order by rowid desc limit 10;

-- 使用并行查询,启用四个线程查询:耗时:8.348
select /*+ PARALLEL(4) */ * from test_01
order by rowid desc limit 10


使用场景



   当然,并非所有的查询都适合使用并行查询。大量占用 CPU 周期的查询最适合采用并 行查询的功能。例如,大型表的连接查询、大量数据的聚合和大型结果集的排序等都很适合 采用并行查询。对于简单查询(常用于事务处理应用程序)而言,执行并行查询所需的额外 协调工作会大于潜在的性能提升。所以,数据库管理员在确定是否需要使用并行策略的时候, 需要慎重。

DM数据库文档


以上是关于DM数据库并行查询入门的主要内容,如果未能解决你的问题,请参考以下文章

如何在 python 中并行化以下代码片段?

STM32入门开发: LWIP网络协议栈移植(网卡采用DM9000)

Python入门-4控制语句:09循环代码优化技巧(重要)-zip()并行迭代

Android 实用代码片段

Android 实用代码片段

[工作积累] UE4 并行渲染的同步 - Sync between FParallelCommandListSet & FRHICommandListImmediate calls(代码片段