请问怎么提升 oracle 大量数据删除插入的并行操作性能.

loveyly 2008-12-06 04:08:41
请大家看看是否有什么方案解决这个问题:

系统被多个线程处理数据, 其中一部分是删除大量数据, 一部分是往数据库中添加大量数据.
目前看来, 相互的影响太大(几十倍的性能降低), 请问这样的并行处理的一般优化方案是什么?

谢谢!
...全文
1122 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
w2jc 2008-12-12
  • 打赏
  • 举报
回复
不知道大量删除和插入数据的时候是否还有查询,
如果没有太多查询操作的话,可能看看索引,
尽量减少索引,这样会大大加快删除和插入的速度,
否则每删除和插入一条记录,数据库都要更新相应的索引。
lwei_998 2008-12-11
  • 打赏
  • 举报
回复
create or replace procedure delBigTab
(
p_TableName in varchar2,
p_Condition in varchar2,
p_Count in varchar2
)
as
pragma autonomous_transaction;
n_delete number:=0;
begin
while 1=1 loop
EXECUTE IMMEDIATE
'delete from '||p_TableName||' where '||p_Condition||' and rownum <= :rn'
USING p_Count;
if SQL%NOTFOUND then
exit;
else
n_delete:=n_delete + SQL%ROWCOUNT;
end if;
commit;
end loop;
commit;
DBMS_OUTPUT.PUT_LINE('Finished!');
DBMS_OUTPUT.PUT_LINE('Totally '||to_char(n_delete)||' records deleted!');
end;
lwei_998 2008-12-11
  • 打赏
  • 举报
回复
批量删除海量数据通常都是很复杂及缓慢的,方法也很多,但是通常的概念是:分批删除,逐次提交
microsoft_fly 2008-12-11
  • 打赏
  • 举报
回复
能否把表结构和语句K出来
loveyly 2008-12-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 caoleione 的回复:]
设置并行查询的相关系统参数如PARALLEL_AUTOMATIC_TUNING、PARALLEL_EXECUTION_MESSAGE_SIZE
修改表的并行参数设置如ALTER TABLE employee PARALLEL;
[/Quote]

能介绍一下这些参数的原理么?
谢谢!
wffffc 2008-12-10
  • 打赏
  • 举报
回复
这要看你的问题出在那里了
caoleione 2008-12-09
  • 打赏
  • 举报
回复
设置并行查询的相关系统参数如PARALLEL_AUTOMATIC_TUNING、PARALLEL_EXECUTION_MESSAGE_SIZE
修改表的并行参数设置如ALTER TABLE employee PARALLEL;
blueterry 2008-12-09
  • 打赏
  • 举报
回复
如1楼所说,关闭日志可以提高数据插入、删除数据

关键的是优化系统,尽量避免同时多线程对同一表的大量删除和插入。

如果插入删除很频繁不可避免,可以考虑用内存表在高峰的时候做临时存储,等待插入删除,
等高峰过去再将内存表写入真正的数据库表。
范佩西_11 2008-12-09
  • 打赏
  • 举报
回复
alter table tablename nologging;

试一下。
第一部分 数据库体系结构 第1章 Oracle体系结构 1 1.1 数据库概述及实例 1 1.2 数据库 1 1.2.1 表空间 2 1.2.2 文件 2 1.3 实例 3 1.4 数据库内部结构 3 1.4.1 表、列和数据类型 4 1.4.2 约束条件 5 1.4.3 抽象数据类型 6 1.4.4 分区和子分区 7 1.4.5 用户 7 1.4.6 模式 8 1.4.7 索引 8 1.4.8 簇 9 1.4.9 散列簇 9 1.4.10 视图 9 1.4.11 序列 10 1.4.12 过程 10 1.4.13 函数 10 1.4.14 软件包 11 1.4.15 触发器 11 1.4.16 同义词 12 1.4.17 权限及角色 12 1.4.18 数据库链接 13 1.4.19 段、盘区和块 14 1.4.20 回滚段 14 1.4.21 快照和显形图 14 1.5 内部存储结构 15 1.5.1 系统全局区 15 1.5.2 环境区 17 1.5.3 程序全局区 17 1.6 后台进程 18 1.7 外部结构 20 1.7.1 重做日志 20 1.7.2 控制文件 21 1.7.3 跟踪文件与警告日志 21 1.8 基本数据库的实现 21 1.8.1 备份/恢复功能 22 1.8.2 安全性能 23 1.8.3 典型数据库逻辑设计 24 1.8.4 典型数据库物理设计 24 1.9 逻辑模型约定 25 1.9.1 一对一关系 25 1.9.2 一对多关系 26 1.9.3 多对多关系 26 1.10 创建数据库 27 1.10.1 修改创建模板的脚本文件 27 1.10.2 创建数据库后修改 MAXDATAFILES 27 1.10.3 使用OEM 28 第2章 硬件配置研究 30 2.1 结构概述 30 2.2 独立主机 31 2.2.1 磁盘阵列独立主机 31 2.2.2 磁盘镜像独立主机 34 2.2.3 多数据库独立主机 35 2.3 网络主机 36 2.3.1 数据库网络 37 2.3.2 远程更新:高级复制选项 39 2.3.3 集群服务器:Oracle并行服务器 40 2.3.4 多处理器:并行查询和并行装载 选项 41 2.3.5 客户机/服务器数据库应用 42 2.3.6 三层体系结构 43 2.3.7 Oracle透明网关访问 44 2.3.8 备用数据库 44 2.3.9 复制型数据库 45 2.3.10 外部文件访问 45 第3章 数据库逻辑设计 47 3.1 最终产品 47 3.2 优化软结构 47 3.2.1 起点:SYSTEM表空间 47 3.2.2 分离应用程序数据段:DATA 48 3.2.3 分离应用程序索引段:INDEXES 48 3.2.4 分离工具段:TOOLS 49 3.2.5 分离回滚段:RBS 50 3.2.6 分离临时段:TEMP 50 3.2.7 分离用户:USERS 51 3.3 扩展OFA 51 3.3.1 分离低使用的数据段:DATA_2 51 3.3.2 分离低使用的索引段:INDEXS_2 52 3.3.3 分离工具索引:TOOLS_1 52 3.3.4 分离特殊回滚段:RBS_2 53 3.3.5 分离用户特殊临时段: TEMP_USER 53 3.3.6 附加的应用特殊OFA扩展 54 3.4 合理的逻辑设计 54 3.5 解决方案 55 第4章 数据库物理设计 57 4.1 数据库文件设计 57 4.1.1 数据文件间的I/O冲突 57 4.1.2 所有数据库文件中的I/O瓶颈 59 4.1.3 后台进程中的并发I/O操作 61 4.1.4 定义系统恢复能力与性能目标 61 4.1.5 系统硬件及结构镜像的定义 62 4.1.6 识别专用于数据库的磁盘 62 4.1.7 选择正确的设计 63 4.2 I/O权值估计的检验 66 4.3 如何解决磁盘不足问题 69 4.4 解决方案 70 4.4.1 小型开发数据库设计 70 4.4.2 产品OLTP数据库设计 70 4.4.3 具有历史数据的产品OLTP数据库 设计 71 4.4.4 数据仓库设计 72

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧