Part02-生产环境规划与建议
2.1 并行查询配置
并行查询的配置参数:
- PARALLEL_DEGREE_POLICY:
- MANUAL:默认值,手动设置并行度
- AUTO:自动决定是否使用并行执行
- LIMITED:只对并行度提示和并行DDL使用并行执行
- PARALLEL_DEGREE_LIMIT:
- 默认值:CPU_COUNT * 2
- 控制并行度的上限
- PARALLEL_MIN_SERVERS:
- 默认值:0
- 最小并行执行服务器数量
- PARALLEL_MAX_SERVERS:
- 默认值:CPU_COUNT * 10
- 最大并行执行服务器数量
- PARALLEL_SERVERS_TARGET:
- 默认值:CPU_COUNT * 2
- 并行执行服务器的目标数量
风哥提示:在生产环境中,应根据系统的硬件配置和 workload 特点选择合适的并行查询配置。
2.2 并行查询策略
并行查询的策略:
- 选择合适的并行度:根据系统资源和查询特点选择合适的并行度
- 使用并行提示:通过提示指定并行度
- 表级并行设置:在表级别设置并行度
- 索引级并行设置:在索引级别设置并行度
- 语句级并行设置:在语句级别设置并行度
- 监控并行执行:定期监控并行执行的情况
- 调整并行参数:根据监控结果调整并行参数
更多学习教程公众号风哥教程itpux_com
2.3 并行查询注意事项
并行查询的注意事项:
- 系统资源:确保系统有足够的资源支持并行执行
- 并行度选择:选择合适的并行度,避免过度并行
- 小型查询:小型查询可能不适合并行执行
- 事务隔离级别:并行查询可能会影响事务隔离级别
- 锁争用:并行查询可能会增加锁争用
- 临时表空间:并行查询可能需要更多的临时表空间
- 执行计划:注意并行执行对执行计划的影响
- 监控性能:定期监控并行执行的性能
from oracle:www.itpux.com
Part03-生产环境项目实施方案
在生产环境中实施并行查询的实施方案:
- 评估系统资源:评估系统的CPU、内存和I/O资源,确定是否适合使用并行查询。
- 分析查询特点:分析查询的特点,确定哪些查询适合并行执行。
- 配置并行参数:根据系统资源和查询特点配置并行参数。
- 测试验证:在测试环境中测试并行查询的效果。
- 部署实施:在生产环境中部署并行查询配置。
- 监控维护:定期监控并行执行的情况,及时发现和解决问题。
- 优化调整:根据监控结果调整并行参数,优化性能。
Part04-生产案例与实战讲解
4.1 并行查询参数设置
示例:并行查询参数设置
SHOW PARAMETER parallel;– 修改并行查询参数(需要重启数据库)
ALTER SYSTEM SET parallel_degree_policy = ‘AUTO’ SCOPE=SPFILE;ALTER SYSTEM SET parallel_degree_limit = 8 SCOPE=SPFILE;ALTER SYSTEM SET parallel_min_servers = 4 SCOPE=SPFILE;ALTER SYSTEM SET parallel_max_servers = 64 SCOPE=SPFILE;ALTER SYSTEM SET parallel_servers_target = 16 SCOPE=SPFILE;– 立即修改并行查询参数(不需要重启数据库)
ALTER SYSTEM SET parallel_degree_policy = ‘AUTO’ SCOPE=BOTH;ALTER SYSTEM SET parallel_degree_limit = 8 SCOPE=BOTH;ALTER SYSTEM SET parallel_min_servers = 4 SCOPE=BOTH;ALTER SYSTEM SET parallel_max_servers = 64 SCOPE=BOTH;ALTER SYSTEM SET parallel_servers_target = 16 SCOPE=BOTH;– 在会话级别修改并行查询参数
ALTER SESSION ENABLE PARALLEL DML;ALTER SESSION FORCE PARALLEL QUERY PARALLEL 4;
NAME TYPE VALUE
———————————— ———– ——————————
parallel_degree_policy string AUTO
parallel_degree_limit integer 8
parallel_min_servers integer 4
parallel_max_servers integer 64
parallel_servers_target integer 16
更多视频教程www.fgedu.net.cn
4.2 并行查询使用方法
示例:并行查询使用方法
SELECT /*+ PARALLEL(4) */ *
FROM employees e
JOIN departments d ON e.department_id = d.department_id;– 使用表级并行设置
ALTER TABLE employees PARALLEL 4;SELECT *
FROM employees e
JOIN departments d ON e.department_id = d.department_id;– 禁用表级并行设置
ALTER TABLE employees NOPARALLEL;– 使用语句级并行设置
SELECT /*+ PARALLEL(employees, 4) PARALLEL(departments, 4) */ *
FROM employees e
JOIN departments d ON e.department_id = d.department_id;– 并行DML操作
ALTER SESSION ENABLE PARALLEL DML;INSERT /*+ PARALLEL(4) */ INTO employees
SELECT /*+ PARALLEL(4) */ *
FROM employees;UPDATE /*+ PARALLEL(4) */ employees
SET salary = salary * 1.1
WHERE department_id = 10;DELETE /*+ PARALLEL(4) */ FROM employees
WHERE department_id = 10;– 并行DDL操作
CREATE TABLE employees_copy PARALLEL 4 AS
SELECT * FROM employees;ALTER TABLE employees ADD COLUMN email VARCHAR2(100) PARALLEL 4;CREATE INDEX emp_idx ON employees(employee_id) PARALLEL 4;
Execution Plan
———————————————————-
Plan hash value: 1403546953
————————————————————————————————-
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | TQ |IN-OUT|
————————————————————————————————-
| 0 | SELECT STATEMENT | | 106 | 8586 | 6 (0)| 00:00:01 | | |
| 1 | PX COORDINATOR | | | | | | | |
| 2 | PX SEND QC (RANDOM) | :TQ10000 | 106 | 8586 | 6 (0)| 00:00:01 | Q1,00 | P->S |
|* 3 | HASH JOIN | | 106 | 8586 | 6 (0)| 00:00:01 | Q1,00 | PCWP |
| 4 | PX RECEIVE | | 27 | 864 | 3 (0)| 00:00:01 | Q1,00 | PCWP |
| 5 | PX SEND BROADCAST | :TQ10001 | 27 | 864 | 3 (0)| 00:00:01 | Q1,01 | P->P |
| 6 | PX BLOCK ITERATOR | | 27 | 864 | 3 (0)| 00:00:01 | Q1,01 | PCWC |
| 7 | TABLE ACCESS FULL| DEPARTMENTS | 27 | 864 | 3 (0)| 00:00:01 | Q1,01 | PCWP |
| 8 | PX BLOCK ITERATOR | | 107 | 5350 | 3 (0)| 00:00:01 | Q1,00 | PCWC |
| 9 | TABLE ACCESS FULL | EMPLOYEES | 107 | 5350 | 3 (0)| 00:00:01 | Q1,00 | PCWP |
————————————————————————————————-
学习交流加群风哥微信: itpux-com
4.3 并行查询监控
示例:并行查询监控
SELECT
server_name,
status,
sid,
serial#,
process,
program
FROM v$px_process;– 查看并行执行的会话
SELECT
sid,
serial#,
username,
sql_id,
qcsid,
qcserial#
FROM v$session
WHERE qcsid IS NOT NULL;– 查看并行执行的SQL语句
SELECT
sql_id,
sql_text,
px_servers_executions,
executions,
elapsed_time,
cpu_time
FROM v$sql
WHERE px_servers_executions > 0;– 查看并行执行的统计信息
SELECT
name,
value
FROM v$sysstat
WHERE name LIKE ‘%parallel%’;– 查看并行执行的等待事件
SELECT
event,
total_waits,
time_waited,
avg_wait
FROM v$system_event
WHERE event LIKE ‘%parallel%’;
SERVER_NAME STATUS SID SERIAL# PROCESS PROGRAM
————————————————————————— ——– ———- ———- ——— ————————————————
P000 AVAILABLE 123 456 12345 oracle@hostname (P000)
P001 AVAILABLE 124 457 12346 oracle@hostname (P001)
P002 AVAILABLE 125 458 12347 oracle@hostname (P002)
P003 AVAILABLE 126 459 12348 oracle@hostname (P003)
— 查看并行执行的会话
SID SERIAL# USERNAME SQL_ID QCSID QCSERIAL#
———- ———- —————————— ————- ———- ———-
127 460 SCOTT a1b2c3d4e5f6 127 460
123 456 SYS a1b2c3d4e5f6 127 460
124 457 SYS a1b2c3d4e5f6 127 460
125 458 SYS a1b2c3d4e5f6 127 460
126 459 SYS a1b2c3d4e5f6 127 460
— 查看并行执行的SQL语句
SQL_ID SQL_TEXT PX_SERVERS_EXECUTIONS EXECUTIONS ELAPSED_TIME CPU_TIME
————- ———————————– ——————– ———- ———— ———-
a1b2c3d4e5f6 SELECT /*+ PARALLEL(4) */ * FROM 4 1 1000000 800000
学习交流加群风哥QQ113257174
4.4 并行查询性能测试
示例:并行查询性能测试
CREATE TABLE test_parallel_query (
id NUMBER PRIMARY KEY,
name VARCHAR2(100),
value NUMBER,
created_date DATE
);– 插入测试数据
BEGIN
FOR i IN 1 .. 1000000 LOOP
INSERT INTO test_parallel_query VALUES (
i,
‘Name ‘ || i,
i,
SYSDATE – MOD(i, 365)
);END LOOP;COMMIT;END;/– 创建索引
CREATE INDEX test_parallel_idx ON test_parallel_query(created_date);– 测试1:串行查询
SET TIMING ON
SELECT
created_date,
COUNT(*),
AVG(value),
SUM(value)
FROM test_parallel_query
GROUP BY created_date
ORDER BY created_date;– 测试2:并行查询
SELECT /*+ PARALLEL(4) */created_date,
COUNT(*),
AVG(value),
SUM(value)
FROM test_parallel_query
GROUP BY created_date
ORDER BY created_date;– 测试3:并行度为8的查询
SELECT /*+ PARALLEL(8) */created_date,
COUNT(*),
AVG(value),
SUM(value)
FROM test_parallel_query
GROUP BY created_date
ORDER BY created_date;SET TIMING OFF
Elapsed: 00:00:05.23
— 测试2:并行查询
Elapsed: 00:00:01.45
— 测试3:并行度为8的查询
Elapsed: 00:00:00.87
学习交流加群风哥QQ113257174
Part05-风哥经验总结与分享
风哥提示:在使用并行查询时,应注意以下几点:
- 评估系统资源:确保系统有足够的CPU、内存和I/O资源支持并行执行。
- 选择合适的并行度:根据系统资源和查询特点选择合适的并行度,避免过度并行。
- 适合的查询类型:只对大型查询和复杂操作使用并行执行,小型查询可能不适合。
- 合理配置参数:根据系统特点配置并行查询参数,如PARALLEL_DEGREE_POLICY、PARALLEL_MAX_SERVERS等。
- 监控并行执行:定期监控并行执行的情况,及时发现和解决问题。
- 注意资源争用:并行查询可能会增加系统资源的争用,需要注意监控。
- 临时表空间:确保临时表空间足够大,以支持并行查询的需求。
- 执行计划:注意并行执行对执行计划的影响,确保执行计划是最优的。
- 测试性能:在使用并行查询前,进行性能测试,验证并行执行的效果。
- 结合其他优化手段:并行查询应与其他优化手段结合使用,如索引优化、SQL重写等。
更多学习教程公众号风哥教程itpux_com
from:风哥.QQ113257174.WX:itpux-com,web: http://www.fgedu.net.cn
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
