Part02-生产环境规划与建议
2.1 并行DML配置
并行DML的配置参数:
- PARALLEL_DML_ENABLED:
- FALSE:默认值,禁用并行DML
- TRUE:启用并行DML
- PARALLEL_DEGREE_POLICY:
- MANUAL:默认值,手动设置并行度
- AUTO:自动决定是否使用并行执行
- LIMITED:只对并行度提示和并行DDL使用并行执行
- PARALLEL_DEGREE_LIMIT:
- 默认值:CPU_COUNT * 2
- 控制并行度的上限
- PARALLEL_MAX_SERVERS:
- 默认值:CPU_COUNT * 10
- 最大并行执行服务器数量
风哥提示:在生产环境中,应根据系统的硬件配置和 workload 特点选择合适的并行DML配置。
2.2 并行DML策略
并行DML的策略:
- 启用并行DML:在会话级别启用并行DML
- 选择合适的并行度:根据系统资源和操作特点选择合适的并行度
- 使用并行提示:通过提示指定并行度
- 表级并行设置:在表级别设置并行度
- 监控并行执行:定期监控并行执行的情况
- 调整并行参数:根据监控结果调整并行参数
- 合理安排时间:在系统负载较低时执行并行DML操作
更多学习教程公众号风哥教程itpux_com
2.3 并行DML注意事项
并行DML的注意事项:
- 启用并行DML:必须在会话级别显式启用并行DML
- 系统资源:确保系统有足够的资源支持并行执行
- 并行度选择:选择合适的并行度,避免过度并行
- 事务大小:注意并行DML的事务大小,避免过大的事务
- 回滚段:确保回滚段足够大,以支持并行DML操作
- 锁定争用:并行DML可能会增加锁定争用
- 临时表空间:确保临时表空间足够大
- 监控性能:定期监控并行执行的性能
from oracle:www.itpux.com
Part03-生产环境项目实施方案
在生产环境中实施并行DML的实施方案:
- 评估系统资源:评估系统的CPU、内存和I/O资源,确定是否适合使用并行DML。
- 分析操作特点:分析DML操作的特点,确定哪些操作适合并行执行。
- 配置并行参数:根据系统资源和操作特点配置并行参数。
- 测试验证:在测试环境中测试并行DML的效果。
- 部署实施:在生产环境中部署并行DML配置。
- 监控维护:定期监控并行执行的情况,及时发现和解决问题。
- 优化调整:根据监控结果调整并行参数,优化性能。
Part04-生产案例与实战讲解
4.1 并行DML参数设置
示例:并行DML参数设置
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_max_servers = 64 SCOPE=SPFILE;– 立即修改并行参数(不需要重启数据库)
ALTER SYSTEM SET parallel_degree_policy = ‘AUTO’ SCOPE=BOTH;ALTER SYSTEM SET parallel_degree_limit = 8 SCOPE=BOTH;ALTER SYSTEM SET parallel_max_servers = 64 SCOPE=BOTH;– 在会话级别启用并行DML
ALTER SESSION ENABLE PARALLEL DML;– 在会话级别设置并行度
ALTER SESSION FORCE PARALLEL DML PARALLEL 4;
NAME TYPE VALUE
———————————— ———– ——————————
parallel_degree_policy string AUTO
parallel_degree_limit integer 8
parallel_max_servers integer 64
更多视频教程www.fgedu.net.cn
4.2 并行DML使用方法
示例:并行DML使用方法
ALTER SESSION ENABLE PARALLEL DML;– 并行INSERT操作
INSERT /*+ PARALLEL(4) */ INTO employees
SELECT /*+ PARALLEL(4) */ *
FROM employees;– 并行UPDATE操作
UPDATE /*+ PARALLEL(4) */ employees
SET salary = salary * 1.1
WHERE department_id = 10;– 并行DELETE操作
DELETE /*+ PARALLEL(4) */ FROM employees
WHERE department_id = 10;– 并行MERGE操作
MERGE /*+ PARALLEL(4) */ INTO employees e
USING (
SELECT /*+ PARALLEL(4) */ employee_id, salary * 1.1 new_salary
FROM employees
WHERE department_id = 10
) src
ON (e.employee_id = src.employee_id)
WHEN MATCHED THEN
UPDATE SET e.salary = src.new_salary;– 使用表级并行设置
ALTER TABLE employees PARALLEL 4;– 启用并行DML后执行DML操作
ALTER SESSION ENABLE PARALLEL DML;INSERT INTO employees
SELECT * FROM employees;– 禁用表级并行设置
ALTER TABLE employees NOPARALLEL;
107 rows created.
— 并行UPDATE操作
10 rows updated.
— 并行DELETE操作
10 rows deleted.
— 并行MERGE操作
10 rows merged.
— 使用表级并行设置
Table altered.
— 启用并行DML后执行DML操作
107 rows created.
— 禁用表级并行设置
Table altered.
学习交流加群风哥微信: itpux-com
4.3 并行DML监控
示例:并行DML监控
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
AND (sql_text LIKE ‘%INSERT%’ OR sql_text LIKE ‘%UPDATE%’ OR sql_text LIKE ‘%DELETE%’ OR sql_text LIKE ‘%MERGE%’);– 查看并行执行的统计信息
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 INSERT /*+ PARALLEL(4) */ INTO 4 1 2000000 1500000
学习交流加群风哥QQ113257174
4.4 并行DML性能测试
示例:并行DML性能测试
CREATE TABLE test_parallel_dml (
id NUMBER PRIMARY KEY,
name VARCHAR2(100),
value NUMBER,
created_date DATE
);– 插入测试数据
BEGIN
FOR i IN 1 .. 1000000 LOOP
INSERT INTO test_parallel_dml VALUES (
i,
‘Name ‘ || i,
i,
SYSDATE – MOD(i, 365)
);END LOOP;COMMIT;END;/– 创建索引
CREATE INDEX test_parallel_dml_idx ON test_parallel_dml(created_date);– 测试1:串行INSERT操作
SET TIMING ON
INSERT INTO test_parallel_dml
SELECT * FROM test_parallel_dml;– 测试2:并行INSERT操作
ALTER SESSION ENABLE PARALLEL DML;INSERT /*+ PARALLEL(4) */ INTO test_parallel_dml
SELECT /*+ PARALLEL(4) */ * FROM test_parallel_dml;– 测试3:并行UPDATE操作
UPDATE /*+ PARALLEL(4) */ test_parallel_dml
SET value = value * 1.1
WHERE created_date > SYSDATE – 180;– 测试4:并行DELETE操作
DELETE /*+ PARALLEL(4) */ FROM test_parallel_dml
WHERE created_date > SYSDATE – 90;SET TIMING OFF
1000000 rows created.
Elapsed: 00:00:12.34
— 测试2:并行INSERT操作
2000000 rows created.
Elapsed: 00:00:03.45
— 测试3:并行UPDATE操作
1000000 rows updated.
Elapsed: 00:00:05.67
— 测试4:并行DELETE操作
500000 rows deleted.
Elapsed: 00:00:02.34
学习交流加群风哥QQ113257174
Part05-风哥经验总结与分享
风哥提示:在使用并行DML时,应注意以下几点:
- 启用并行DML:必须在会话级别显式启用并行DML,否则即使使用了并行提示也不会启用并行执行。
- 评估系统资源:确保系统有足够的CPU、内存和I/O资源支持并行执行。
- 选择合适的并行度:根据系统资源和操作特点选择合适的并行度,避免过度并行。
- 适合的操作类型:只对大批量数据的DML操作使用并行执行,小批量操作可能不适合。
- 合理配置参数:根据系统特点配置并行参数,如PARALLEL_DEGREE_POLICY、PARALLEL_MAX_SERVERS等。
- 监控并行执行:定期监控并行执行的情况,及时发现和解决问题。
- 注意事务大小:控制并行DML的事务大小,避免过大的事务导致回滚段不足。
- 临时表空间:确保临时表空间足够大,以支持并行DML操作。
- 测试性能:在使用并行DML前,进行性能测试,验证并行执行的效果。
- 结合其他优化手段:并行DML应与其他优化手段结合使用,如索引优化、SQL重写等。
更多学习教程公众号风哥教程itpux_com
from:风哥.QQ113257174.WX:itpux-com,web: http://www.fgedu.net.cn
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
