1. 首页 > 国产数据库教程 > YashanDB教程 > 正文

yashandb教程FG165-YashanDB并行DML配置

本文档风哥主要介绍YashanDB并行DML的相关知识,包括YashanDB并行DML的概念、优势、使用场景、规划策略、配置方法、参数调优、监控管理等内容,风哥教程参考YashanDB官方文档并行处理相关内容编写,适合DBA人员在学习和生产环境中使用。更多视频教程www.fgedu.net.cn

Part01-基础概念与理论知识

1.1 YashanDB并行DML概念

YashanDB并行DML(Parallel DML)是一种利用多个进程或线程同时执行数据操纵语言(DML)操作的技术。并行DML可以显著提高大批量数据操作的性能,特别是在处理大型表时。并行DML支持INSERT、UPDATE、DELETE和MERGE语句。

YashanDB并行DML的特点:

  • 利用多个进程或线程同时执行DML操作
  • 支持INSERT、UPDATE、DELETE和MERGE语句
  • 可以显著提高大批量数据操作的性能
  • 需要适当的系统资源和配置
  • 适合处理大型表和大批量数据操作

1.2 YashanDB并行DML优势

YashanDB并行DML的主要优势包括:

  • 性能提升:显著提高大批量数据操作的执行速度
  • 资源利用率:充分利用系统的CPU和I/O资源
  • 可扩展性:随着系统资源的增加而线性提高性能
  • 灵活性:可以根据操作类型和数据量调整并行度
  • 简化代码:不需要手动编写并行处理代码

1.3 YashanDB并行DML使用场景

YashanDB并行DML适合以下场景:

  • 大批量数据加载:如数据仓库ETL过程中的大批量数据插入
  • 大批量数据更新:如批量更新历史数据或批量处理业务数据
  • 大批量数据删除:如清理过期数据或批量删除不符合条件的数据
  • 数据转换:如数据格式转换或数据迁移
  • 数据合并:如使用MERGE语句进行数据同步
风哥提示:并行DML是YashanDB中提高大批量数据操作性能的重要特性,合理配置和使用可以显著提升系统性能。学习交流加群风哥微信: itpux-com

Part02-生产环境规划与建议

2.1 YashanDB并行DML规划

YashanDB并行DML规划要点:

# 系统资源评估
– CPU核心数:并行DML需要足够的CPU资源
– 内存容量:并行操作需要更多的内存
– I/O性能:并行操作会增加I/O负载
– 存储系统:需要高性能的存储系统

# 并行度规划
– 根据CPU核心数确定最大并行度
– 根据操作类型调整并行度
– 根据数据量大小调整并行度
– 考虑系统其他负载

# 操作类型评估
– INSERT操作:适合高并行度
– UPDATE操作:需要考虑行级锁竞争
– DELETE操作:需要考虑行级锁竞争
– MERGE操作:需要考虑复杂性

# 表特性评估
– 表大小:大型表更适合并行操作
– 索引情况:索引会影响并行性能
– 分区情况:分区表更适合并行操作
– 数据分布:均匀分布的数据更适合并行操作

2.2 YashanDB并行DML策略

YashanDB并行DML策略建议:

# 并行度选择策略
– 小批量操作:低并行度(1-4)
– 中批量操作:中等并行度(4-8)
– 大批量操作:高并行度(8-16)
– 超大批量操作:超高并行度(16+)

# 操作类型策略
– INSERT:较高并行度,适合多进程同时插入
– UPDATE:中等并行度,避免锁竞争
– DELETE:中等并行度,避免锁竞争
– MERGE:根据复杂性调整并行度

# 时间策略
– 低峰期:使用高并行度
– 高峰期:使用低并行度或避免并行操作
– 批量窗口:在专门的批量处理窗口使用高并行度

# 资源限制策略
– 设置并行操作的资源限制
– 监控并行操作的资源使用
– 避免并行操作影响在线业务

2.3 YashanDB并行DML性能考虑

YashanDB并行DML性能考虑:

  • 并行度与性能:适当的并行度可以提高性能,但过高的并行度会导致资源竞争
  • 锁竞争:并行DML可能会增加锁竞争,特别是UPDATE和DELETE操作
  • I/O瓶颈:并行操作会增加I/O负载,可能成为性能瓶颈
  • 内存使用:并行操作需要更多的内存,可能导致内存不足
  • 网络带宽:在分布式环境中,网络带宽可能成为瓶颈
生产环境建议:在使用并行DML时,需要根据系统资源和操作特性选择合适的并行度,避免过度并行导致系统资源耗尽。学习交流加群风哥QQ113257174

Part03-生产环境项目实施方案

3.1 YashanDB并行DML配置

3.1.1 YashanDB并行DML启用

— 启用并行DML
ALTER SESSION ENABLE PARALLEL DML;

— 检查并行DML状态
SELECT * FROM v$session WHERE sid = SYS_CONTEXT(‘USERENV’, ‘SID’);

— 输出结果(示例)
SID SERIAL# USERNAME STATUS PARALLEL DML_ENABLED
———- ———- ———- ———- ——– ———–
123 456 FGEDU ACTIVE YES ENABLED

— 为特定表启用并行DML
ALTER TABLE fgedu_sales PARALLEL 8;

— 检查表并行度设置
SELECT table_name, degree FROM user_tables WHERE table_name = ‘FGEDU_SALES’;

— 输出结果
TABLE_NAME DEGREE
———— ———-
FGEDU_SALES 8

3.1.2 YashanDB并行DML参数配置

— 查看并行相关参数
SHOW PARAMETER parallel;

— 输出结果(示例)
NAME TYPE VALUE
———————————— ———– ——————————
parallel_servers_target integer 16
parallel_max_servers integer 32
parallel_min_servers integer 0
parallel_degree_policy string MANUAL
parallel_force_local boolean FALSE
parallel_execution_message_size integer 16384

— 修改并行参数
ALTER SYSTEM SET parallel_servers_target = 32 SCOPE=BOTH;
ALTER SYSTEM SET parallel_max_servers = 64 SCOPE=BOTH;

— 为会话设置并行度
ALTER SESSION SET parallel_degree_policy = ‘AUTO’;
ALTER SESSION SET parallel_servers_target = 32;

3.2 YashanDB并行DML参数调优

3.2.1 YashanDB并行DML关键参数

# 并行相关参数说明

## 1. parallel_degree_policy
– 说明:控制并行度策略
– 取值:MANUAL(手动)、LIMITED(有限自动)、AUTO(自动)
– 建议:生产环境使用AUTO或LIMITED

## 2. parallel_servers_target
– 说明:并行服务器目标数量
– 取值:根据CPU核心数设置,建议为CPU核心数的1-2倍
– 建议:8核CPU设置为16,16核CPU设置为32

## 3. parallel_max_servers
– 说明:最大并行服务器数量
– 取值:parallel_servers_target的2倍
– 建议:根据系统资源设置

## 4. parallel_min_servers
– 说明:最小并行服务器数量
– 取值:0或根据需要设置
– 建议:一般设置为0,按需启动

## 5. parallel_force_local
– 说明:是否强制使用本地并行
– 取值:TRUE/FALSE
– 建议:单实例环境设置为TRUE

## 6. parallel_execution_message_size
– 说明:并行执行消息大小
– 取值:16384(16KB)或32768(32KB)
– 建议:使用默认值16384

3.2.2 YashanDB并行DML参数调优建议

— 调优并行参数
ALTER SYSTEM SET parallel_degree_policy = ‘AUTO’ SCOPE=BOTH;
ALTER SYSTEM SET parallel_servers_target = 32 SCOPE=BOTH;
ALTER SYSTEM SET parallel_max_servers = 64 SCOPE=BOTH;
ALTER SYSTEM SET parallel_min_servers = 4 SCOPE=BOTH;

— 为表设置并行度
ALTER TABLE fgedu_sales PARALLEL 16;
ALTER TABLE fgedu_customers PARALLEL 8;

— 为索引设置并行度
ALTER INDEX idx_fgedu_sales_date PARALLEL 16;

— 检查并行度设置
SELECT
table_name,
degree,
parallel_instance_group,
parallel_queue_timeout
FROM user_tables
WHERE table_name IN (‘FGEDU_SALES’, ‘FGEDU_CUSTOMERS’);

3.3 YashanDB并行DML监控

3.3.1 YashanDB并行DML监控查询

— 查看并行执行情况
SELECT
sid,
serial#,
username,
sql_id,
degree,
req_degree,
actual_degree,
status
FROM v$px_session
ORDER BY sid;

— 查看并行服务器状态
SELECT
server_name,
status,
sid,
serial#,
username,
sql_id
FROM v$px_process
ORDER BY server_name;

— 查看并行执行统计信息
SELECT
sql_id,
plan_hash_value,
executions,
parallel_executions,
cpu_time,
elapsed_time,
buffer_gets,
disk_reads
FROM v$sql
WHERE sql_text LIKE ‘%INSERT%’ OR sql_text LIKE ‘%UPDATE%’ OR sql_text LIKE ‘%DELETE%’
ORDER BY elapsed_time DESC;

— 查看并行等待事件
SELECT
event,
total_waits,
time_waited,
avg_wait
FROM v$system_event
WHERE event LIKE ‘%parallel%’
ORDER BY time_waited DESC;

风哥提示:定期监控并行DML的执行情况,及时发现和解决性能问题。建立并行DML监控机制,确保系统资源的合理使用。更多学习教程公众号风哥教程itpux_com

Part04-生产案例与实战讲解

4.1 YashanDB并行INSERT实战

案例背景:某企业需要将大量数据从临时表加载到正式表中,使用并行INSERT提高性能。

— 步骤1:创建临时表
CREATE TABLE fgedu_sales_temp (
id NUMBER(10),
sale_date DATE,
customer_id NUMBER(10),
amount NUMBER(12,2),
product_id NUMBER(10)
);

— 步骤2:插入测试数据(模拟大批量数据)
INSERT INTO fgedu_sales_temp
SELECT
rownum,
TO_DATE(‘2025-01-01’, ‘YYYY-MM-DD’) + MOD(rownum, 365),
MOD(rownum, 10000) + 1,
DBMS_RANDOM.VALUE(100, 10000),
MOD(rownum, 1000) + 1
FROM dual
CONNECT BY LEVEL <= 1000000; -- 步骤3:启用并行DML ALTER SESSION ENABLE PARALLEL DML; -- 步骤4:设置并行度 ALTER SESSION SET parallel_degree_policy = 'AUTO'; -- 步骤5:执行并行INSERT INSERT /*+ PARALLEL(16) */ INTO fgedu_sales SELECT * FROM fgedu_sales_temp; -- 输出结果 1000000 rows created. -- 步骤6:查看执行计划 EXPLAIN PLAN FOR INSERT /*+ PARALLEL(16) */ INTO fgedu_sales SELECT * FROM fgedu_sales_temp; SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY); -- 输出结果(示例) PLAN_TABLE_OUTPUT -------------------------------------------------------------------------------- Plan hash value: 1234567890 ------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib | ------------------------------------------------------------------------------- | 0 | INSERT STATEMENT | | 1000K| 28M| 1000 (1)| 00:00:12 | | | | | 1 | PX COORDINATOR | | | | | | | | | | 2 | PX SEND QC (RANDOM) | :TQ10000 | 1000K| 28M| 1000 (1)| 00:00:12 | Q1,00 | P->S | QC (RAND) |
| 3 | LOAD TABLE CONVENTIONAL | FGEDU_SALES | | | | | Q1,00 | PCWP | |
| 4 | PX RECEIVE | | 1000K| 28M| 1000 (1)| 00:00:12 | Q1,00 | PCWP | |
| 5 | PX SEND RANDOM | :TQ10001 | 1000K| 28M| 1000 (1)| 00:00:12 | Q1,01 | P->P | RANDOM |
| 6 | PX BLOCK ITERATOR| | 1000K| 28M| 1000 (1)| 00:00:12 | Q1,01 | PCWC | |
| 7 | TABLE ACCESS FULL| FGEDU_SALES_TEMP| 1000K| 28M| 1000 (1)| 00:00:12 | Q1,01 | PCWP | |
——————————————————————————-

4.2 YashanDB并行UPDATE实战

案例背景:某企业需要更新大量销售数据的状态,使用并行UPDATE提高性能。

— 步骤1:启用并行DML
ALTER SESSION ENABLE PARALLEL DML;

— 步骤2:设置并行度
ALTER SESSION SET parallel_degree_policy = ‘AUTO’;

— 步骤3:执行并行UPDATE
UPDATE /*+ PARALLEL(8) */ fgedu_sales
SET amount = amount * 1.1
WHERE sale_date BETWEEN TO_DATE(‘2025-01-01’, ‘YYYY-MM-DD’) AND TO_DATE(‘2025-01-31’, ‘YYYY-MM-DD’);

— 输出结果
100000 rows updated.

— 步骤4:查看执行计划
EXPLAIN PLAN FOR
UPDATE /*+ PARALLEL(8) */ fgedu_sales
SET amount = amount * 1.1
WHERE sale_date BETWEEN TO_DATE(‘2025-01-01’, ‘YYYY-MM-DD’) AND TO_DATE(‘2025-01-31’, ‘YYYY-MM-DD’);

SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);

— 输出结果(示例)
PLAN_TABLE_OUTPUT
——————————————————————————–
Plan hash value: 9876543210

——————————————————————————-
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib |
——————————————————————————-
| 0 | UPDATE STATEMENT | | 100000| 2800K| 500 (2)| 00:00:06 | | | |
| 1 | PX COORDINATOR | | | | | | | | |
| 2 | PX SEND QC (RANDOM) | :TQ10000 | 100000| 2800K| 500 (2)| 00:00:06 | Q1,00 | P->S | QC (RAND) |
| 3 | UPDATE | FGEDU_SALES | | | | | Q1,00 | PCWP | |
| 4 | PX RECEIVE | | 100000| 2800K| 500 (2)| 00:00:06 | Q1,00 | PCWP | |
| 5 | PX SEND RANDOM | :TQ10001 | 100000| 2800K| 500 (2)| 00:00:06 | Q1,01 | P->P | RANDOM |
| 6 | PX BLOCK ITERATOR| | 100000| 2800K| 500 (2)| 00:00:06 | Q1,01 | PCWC | |
| 7 | TABLE ACCESS FULL| FGEDU_SALES | 100000| 2800K| 500 (2)| 00:00:06 | Q1,01 | PCWP | |
——————————————————————————-

4.3 YashanDB并行DELETE实战

案例背景:某企业需要删除大量过期的销售数据,使用并行DELETE提高性能。

— 步骤1:启用并行DML
ALTER SESSION ENABLE PARALLEL DML;

— 步骤2:设置并行度
ALTER SESSION SET parallel_degree_policy = ‘AUTO’;

— 步骤3:执行并行DELETE
DELETE /*+ PARALLEL(8) */ FROM fgedu_sales
WHERE sale_date < TO_DATE('2024-01-01', 'YYYY-MM-DD'); -- 输出结果 500000 rows deleted. -- 步骤4:查看执行计划 EXPLAIN PLAN FOR DELETE /*+ PARALLEL(8) */ FROM fgedu_sales WHERE sale_date < TO_DATE('2024-01-01', 'YYYY-MM-DD'); SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY); -- 输出结果(示例) PLAN_TABLE_OUTPUT -------------------------------------------------------------------------------- Plan hash value: 5678901234 ------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib | ------------------------------------------------------------------------------- | 0 | DELETE STATEMENT | | 500000| 1400K| 250 (2)| 00:00:03 | | | | | 1 | PX COORDINATOR | | | | | | | | | | 2 | PX SEND QC (RANDOM) | :TQ10000 | 500000| 1400K| 250 (2)| 00:00:03 | Q1,00 | P->S | QC (RAND) |
| 3 | DELETE | FGEDU_SALES | | | | | Q1,00 | PCWP | |
| 4 | PX RECEIVE | | 500000| 1400K| 250 (2)| 00:00:03 | Q1,00 | PCWP | |
| 5 | PX SEND RANDOM | :TQ10001 | 500000| 1400K| 250 (2)| 00:00:03 | Q1,01 | P->P | RANDOM |
| 6 | PX BLOCK ITERATOR| | 500000| 1400K| 250 (2)| 00:00:03 | Q1,01 | PCWC | |
| 7 | TABLE ACCESS FULL| FGEDU_SALES | 500000| 1400K| 250 (2)| 00:00:03 | Q1,01 | PCWP | |
——————————————————————————-

— 步骤5:提交事务
COMMIT;

生产环境建议:在执行大批量并行DML操作时,建议在低峰期进行,并监控系统资源使用情况,避免影响在线业务。from yashandb视频:www.itpux.com

Part05-风哥经验总结与分享

5.1 YashanDB并行DML最佳实践

YashanDB并行DML最佳实践:

  • 合理选择并行度:根据系统资源和操作类型选择合适的并行度
  • 优化表结构:使用分区表和适当的索引提高并行性能
  • 监控资源使用:定期监控并行操作的资源使用情况
  • 避免锁竞争:对于UPDATE和DELETE操作,注意避免锁竞争
  • 合理安排时间:在系统低峰期执行大批量并行操作
  • 使用并行提示:在SQL语句中使用并行提示控制并行度
  • 定期收集统计信息:确保优化器能够生成正确的并行执行计划
  • 测试验证:在生产环境部署前进行充分的测试验证

5.2 YashanDB并行DML检查清单

# 并行DML检查清单
– [ ] 系统资源是否充足(CPU、内存、I/O)
– [ ] 并行度设置是否合理
– [ ] 并行参数是否正确配置
– [ ] 表结构是否适合并行操作(分区表、索引)
– [ ] 统计信息是否最新
– [ ] 是否在低峰期执行
– [ ] 是否监控资源使用情况
– [ ] 是否设置了适当的事务隔离级别
– [ ] 是否有足够的回滚空间
– [ ] 是否测试了并行性能

# 并行DML配置步骤
1. 评估系统资源和操作需求
2. 配置并行相关参数
3. 启用并行DML
4. 设置表和索引的并行度
5. 执行并行DML操作
6. 监控执行情况
7. 调整并行度和参数
8. 总结和优化

# 并行DML性能评估指标
– 执行时间:与串行执行相比的性能提升
– 资源利用率:CPU、内存、I/O的使用情况
– 锁竞争:是否存在锁等待和死锁
– 系统影响:对其他业务的影响程度
– 可扩展性:随着数据量增加的性能表现

5.3 YashanDB并行DML常见问题处理

YashanDB并行DML常见问题及处理方法:

# 常见问题1:并行度设置过高
– 现象:系统资源耗尽,性能下降
– 处理:降低并行度,根据系统资源调整

# 常见问题2:锁竞争严重
– 现象:并行UPDATE或DELETE操作出现大量锁等待
– 处理:降低并行度,优化WHERE条件,使用分区表

# 常见问题3:I/O瓶颈
– 现象:并行操作导致I/O性能下降
– 处理:优化存储系统,使用SSD,调整I/O调度

# 常见问题4:内存不足
– 现象:并行操作导致内存不足错误
– 处理:增加内存,降低并行度,调整PGA设置

# 常见问题5:并行执行计划不正确
– 现象:优化器未选择并行执行计划
– 处理:收集统计信息,使用并行提示,检查参数设置

# 常见问题6:并行服务器启动失败
– 现象:无法启动足够的并行服务器
– 处理:检查系统资源,调整parallel_max_servers参数

# 常见问题7:性能提升不明显
– 现象:并行执行与串行执行性能差异不大
– 处理:检查并行度设置,优化SQL语句,检查系统瓶颈

# 常见问题8:事务回滚缓慢
– 现象:并行DML失败后回滚时间长
– 处理:使用较小的事务批次,确保足够的回滚空间

风哥提示:并行DML是提高大批量数据操作性能的有效手段,但需要合理配置和使用。在实施过程中,需要根据系统资源和业务需求不断优化,以达到最佳性能。

持续改进:定期评估并行DML的性能和效果,根据业务需求和系统变化不断调整并行策略。建立并行DML使用规范,确保在提高性能的同时不影响系统稳定性。

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息