达梦数据库为具有多个 CPU 的数据库服务器提供并行查询的功能,以优化查询任务的性能。数据库服务器只有具有多个 CPU,才能使用并行执行查询操作,来提高查询任务的速度。
并行查询技术的出现,使得单个 SQL 语句能利用多个 CPU 和磁盘设备的处理能力。其优势在于可以通过多个线程来处理查询任务,从而提高查询的效率。
本章重点介绍DM8的并行查询功能。
自动并行查询
发起一个查询时,sql语句会自动采用并行的方式查询数据。使用自动并行模式查询时,相关参数有三个:
MAX_PARALLEL_DEGREE 用来设置默认并行任务个数
PARALLEL_POLICY 用来设置并行策略
PARALLEL_THRD_NUM 用来设置并行工作线程个数
1、查询并行策略:
(0 表示不支持并行;1 表示自动并行模式;2 表示手动并行模式)
SQL> select para_name,para_value from v$dm_ini where para_name='PARALLEL_POLICY';
2、将查询设置为自动并行查询:
SQL> sp_set_para_value(2,'PARALLEL_POLICY',1);
该参数是静态参数,修改完成需要重启数据库服务。
3、自动并行查询验证:
SQL> EXPLAIN SELECT DEPARTMENT_ID,COUNT(*) FROM DMHR.EMPLOYEE GROUP BY DEPARTMENT_ID;
手动并行查询
在sql语句运行时手动指定parallel。为了优化某个sql语句,sql语句需要开启并行时,最好是手动指定并行。使用手动并行模式查询时,相关参数有两个:
PARALLEL_POLICY
PARALLEL_THRD_NUM
1、将查询设置为手动并行查询:
SQL> sp_set_para_value(2,'PARALLEL_POLICY',2);
2、不开并行:
SQL> EXPLAIN SELECT DEPARTMENT_ID,COUNT(*) FROM DMHR.EMPLOYEE GROUP BY DEPARTMENT_ID;
3、手动开启并行:
EXPLAIN SELECT/*+PARALLEL(6)*/ DEPARTMENT_ID,COUNT(*) FROM DMHR.EMPLOYEE GROUP BY DEPARTMENT_ID;
注意:并行查询能在一定程度上优化sql语句,提升sql语句的响应速度。并不是所有的查询都适合并行查询,还要根据CPU的个数以及繁忙程度来决定是否需要开启并行查询。