DM并行查询相关参数
达梦数据库具有为多CPU的数据库服务器提供并行查询的功能,该功能使得单个SQL语句能利用多个CPU和磁盘设备以优化查询任务的性能。达梦数据库通过三个步骤来完成并行查询:
1、确定并行任务数;
2、确定并行工作线程数;
3、执行查询。
并行查询相关参数见下表:
参数名 |
缺省值 |
说明 |
MAX_PARALLEL_DEGREE |
1 |
用来设置默认并行任务个数。取值范围:1~128。缺省值1,表示无并行任务。当PARALLEL_POLICY值为1或2时该参数值才有效 |
PARALLEL_POLICY |
0 |
用来设置并行策略。取值范围:0、1 和2,缺省为0。其中,0表示不支持并行;1表示自动配置并行工作线程个数(与物理CPU核数相同);2表示手动设置并行工作线程数 |
PARALLEL_THRD_NUM |
10 |
用来设置并行工作线程个数。取值范围:1~1024。仅当PARALLEL_POLICY值为2时才启用此参数。 |
查查询并行策略参数
select * from v$dm_ini where para_name='PARALLEL_POLICY';
一、确定并行任务数
DM支持两种方式来指定并行查询的任务个数:
(1)在ini参数中,使用MAX_PARALLEL_DEGREE设置默认值,此方式指定的值全局有效;
(2)在sql语句中,使用HINT方式,通过“PARALLEL”关键字来特别指定,此方式指定的值只在本条sql语句中有效。只要出现HINT方式,则HINT方式指定的并行任务数就覆盖MAX_PARALLEL_DEGREE设置默认值。
1.1 在ini参数中设置默认值
在ini参数中将MAX_PARALLEL_DEGREE设置为并行任务个数。取值范围:1~128。缺省值1,表示无并行任务。
1.2 在SQL语句中使用“PARALLEL”关键字特别指定
HINT语法格式如下:
/*+ PARALLEL(表名并行任务个数) */
例如,下面的例子中,即使已经设置了MAX_PARALLEL_DEGREE= 3,但实际使用的为PARALLEL指定的任务个数4:
SELECT /*+ PARALLEL(SYSOBJECTS 4) */ * FROM SYSOBJECTS;
其中,表名不能省略,并行任务个数是可以省略的。若省略了并行任务个数,则表示使用默认并行任务个数3,例如:
SELECT /*+ PARALLEL(SYSOBJECTS ) */ * FROM SYSOBJECTS;
另外,每个语句中仅能设置一次并行任务个数,如果设置了多次,则以最后一次设置为准,而且任务个数在全语句中生效。
例如,下面的例子中,使用的并行任务个数为2。
SELECT /*+ PARALLEL(SYSOBJECTS 1) *//*+ PARALLEL(SYSOBJECTS 2) */ * FROM SYSOBJECTS;
这种方式能够为单条查询语句设置额外的并行任务个数,以此来提高某些特殊查询任务的性能。
二、确定并行工作线程数
在执行并行查询任务之前,需要指定完成该任务的并行工作线程数。值得注意的是实际使用的线程数并非总是等于并行工作线程数。并行工作线程数是在ini参数中设定的实际使用并行工作线程数是根据系统的实际状况确定的。
2.1 并行工作线程数,在ini参数中设定
首先,使用PARALLEL_POLICY参数来设置并行策略。取值范围:0、1 和2,默认值其中:
Ø 0 表示不支持并行;
Ø 1 表示自动配置并行线程个数(与物理CPU核数相同);
Ø 2 表示手动设置并行线程数。
若已设置了PARALLEL_POLICY为0或1,则不再需要PARALLEL_THRD_NUM参数。
其次,使用PARALLEL_THRD_NUM设置并行工作线程个数,取值范围:1~1024。仅当PARALLEL_POLICY值为2时才启用此参数。
2.2 实际使用的线程数,达梦数据库会根据每个并行查询操作自动检测
实际使用线程数是数据库在查询计划执行时初始化的时候确定的。也就是说,这不需要用户去干预,而是系统根据并行任务数和实际空闲的并行工作线程数来确定的。此操作所依据的条件如下:
首先,检测达梦数据库是否运行在具有多个CPU的计算机上。只有具有多个CPU 的计算机才能使用并行查询。这是一个硬性的限制条件。
其次,检测可用的空闲工作线程是否足够。并行查询到底采用多少线程数,除了跟操作的复杂程度相关外,还跟当时的服务器状态相关,如是否有足够的可用的空闲工作线程数量等。每个并行查询操作都要求一定的工作线程数量才能够执行;而且执行并行计划比执行串行计划需要更多的线程,所需要的线程数量也会随着任务个数的提高而增加。当无法满足特定并行查询执行的线程要求时,数据库引擎就会自动减少任务个数,甚至会放弃并行查询而改为串行计划。所以,即使同一个操作在不同时候可能会采用不同的线程数。例如,即使设置并行工作线程数为4。而实际使用的线程数可能只有3个,或者更少。
三、执行查询
当以上内容确定好之后,数据库就会执行具体的查询任务。
并行查询示例:
(1) 查看用户BAOBIAO下表BOOKS的总行数
SELECT TABLE_ROWCOUNT('BAOBIAO','BOOKS');
7168行数据
(2) 查询语句
books表未创建索引。
select * from BAOBIAO.BOOKS;
[执行语句1]:
select * from BAOBIAO.BOOKS;
执行成功, 执行耗时50毫秒
影响了0条记录
(3)增加并行查询
给查询语句增加hint,并行度为PARALLEL(2)
SELECT /*+ PARALLEL(2) */ * FROM BAOBIAO.BOOKS;
[执行语句1]:
SELECT /*+ PARALLEL(2) */ * FROM BAOBIAO.BOOKS;
执行成功, 执行耗时39毫秒
影响了0条记录
并行度的值设置具体要参考服务器CPU核数。建议最大值不超过CPU核数的一半,值设置为偶数,例如2、4、6等等。并行度值不是越大越好,要根据实际的查询效果而定。
更多内容链接:https://edu.dameng.com,https://eco.dameng.com/
版权声明:本文为博主原创文章,未经博主允许不得转载。
https://edu.dameng.com,https://eco.dameng.com/
- 上一篇:DM数据库备份还原
- 下一篇:DM和Oracle锁对比和分析