社区
Oracle
帖子详情
oracle开发中重复commit的问题
moqijun
2007-10-16 01:42:25
一般程序调用数据库存储过程时,程序代码调用完成后都会显式Commit提交,但在存储过程绑定的代码中,最后一般也会commit 。
这样的话,程序调用一次存储过程,就会产生俩次提交(一次存储过程,一次程序)其实程序的提交是没有必要的,因为
存储过程已经提交了事务。
现在我们的系统中大量存在这种请况,造成数据库事务量太大,有时会出现数据库服务死掉的情况。
请问事务量太大是由于程序重复Commit引起的吗?有没有什么解决办法?(数据是Oracle 10g)
...全文
582
12
打赏
收藏
oracle开发中重复commit的问题
一般程序调用数据库存储过程时,程序代码调用完成后都会显式Commit提交,但在存储过程绑定的代码中,最后一般也会commit 。 这样的话,程序调用一次存储过程,就会产生俩次提交(一次存储过程,一次程序)其实程序的提交是没有必要的,因为 存储过程已经提交了事务。 现在我们的系统中大量存在这种请况,造成数据库事务量太大,有时会出现数据库服务死掉的情况。 请问事务量太大是由于程序重复Commit引起的吗?有没有什么解决办法?(数据是Oracle 10g)
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
precipitant
2007-10-26
打赏
举报
回复
路过,学习!
newjq
2007-10-25
打赏
举报
回复
最大的可能就是代码编写水平导致运行效率低下,或者并发锁死
rorey_008
2007-10-18
打赏
举报
回复
解决方案:
1.提高LGWR性能
尽量使用快速磁盘,不要把redo log file存放在raid 5的磁盘上
2.使用批量提交
3.适当使用NOLOGGING/UNRECOVERABLE等选项
nemo0228
2007-10-18
打赏
举报
回复
重复提交没有影响的,因为commit的时间可以忽略,第二个提交是一个空的提交
moqijun
2007-10-18
打赏
举报
回复
谢谢各位,一般情况下,这种是需要调整程序还是优化数据库比较好?
客家族_Shark曾_小凡仙
2007-10-17
打赏
举报
回复
当一个用户提交(commits)或者回滚(rollback),session的redo信息需要写出到redo logfile中.
用户进程将通知LGWR执行写出操作,LGWR完成任务以后会通知用户进程.
这个等待事件就是指用户进程等待LGWR的写完成通知.
对于回滚操作,该事件记录从用户发出rollback命令到回滚完成的时间.
如果该等待过多,可能说明LGWR的写出效率低下,或者系统提交过于频繁.
针对该问题,可以关注:
log file parallel write等待事件
user commits,user rollback等统计信息可以用于观察提交或回滚次数
解决方案:
1.提高LGWR性能
尽量使用快速磁盘,不要把redo log file存放在raid 5的磁盘上
2.使用批量提交
3.适当使用NOLOGGING/UNRECOVERABLE等选项
可以通过如下公式计算平均redo写大小:
avg.redo write size = (Redo block written/redo writes)*512 bytes
如果系统产生redo很多,而每次写的较少,一般说明LGWR被过于频繁的激活了.
可能导致过多的redo相关latch的竞争,而且Oracle可能无法有效的使用piggyback的功能.
吐司vivi
2007-10-16
打赏
举报
回复
路过 学习~~
客家族_Shark曾_小凡仙
2007-10-16
打赏
举报
回复
重复提交没有任何影响的,并且提交的频繁不但不会影响效率,反而会提高效率,因为commit的时间可以忽略的,而commit后会释放相应的资源。
好想不是这样吧???? <Oracle9i&10g编程艺术>说不要频繁提交 提交时机是恰当的事务结束!
我维护的也提交频繁 主要是时间点上 导致日志写频繁!
10g 有个批量提交的参数
issgates
2007-10-16
打赏
举报
回复
帮顶, 学习.
kinglht
2007-10-16
打赏
举报
回复
重复提交没有任何影响的,并且提交的频繁不但不会影响效率,反而会提高效率,因为commit的时间可以忽略的,而commit后会释放相应的资源。
dawugui
2007-10-16
打赏
举报
回复
commit只是将没有提交的数据提交.
如果都提交了再commit,只是个空提交.
重复提交不会影响数据库的速度.
bjt_
2007-10-16
打赏
举报
回复
应该不是,查查v$session_wait表,看看是什么导致数据库慢
Oracle
数据库 大事务的数据更改对数据库内部的影响
本课程以
Oracle
10g数据库为基础,来讲解大事务的数据更改在数据库内部是如何处理的。 当用户执行一条SQL对数据库进行更改操作的时候,我们知道数据是从磁盘读取到内存
中
进行更改操作的,那么当这个SQL执行时间很长,而且修改数据量非常大,由于内存容量大小的原因,可能在事务没有
commit
提交的情况下,一些脏数据已经写回到了磁盘
中
。那么在这种情况下,当用户执行
commit
提交操作,数据库是如何处理这些已经写到磁盘的脏数据块的? 本课程就以实验的方式得出数据,来验证以上所提出的
问题
。
C#+
Oracle
开发
中
执行存储过程
问题
C#+
Oracle
开发
中
执行存储过程
问题
作者:dinya关键字:C#,
Oracle
, C/S 内容摘要:当前
开发
过程
中
,微软的.NET以其易用和对网络的支持性好等而倍受
开发
人员的青睐,不少项目使用Oralce数据库作为后台数据库,但是在
开发
过程
中
需要通过前台程序调用数据库
中
的一些对象,本文将以一个实例的形式,对C#+
Oracle
数据库的
开发
中
C#执行
Oracle
存储过程
问题
做
Db Cache
中
未
commit
的数据块会不会写入磁盘
未
commit
的数据会不会写入磁盘,这个比较模糊。磁盘的意思是写入日志文件还是写入数据文件(数据load上来的地方)? 事务的
commit
这个动作,
Oracle
首先不是将数据从数据库缓冲区
中
刷到磁盘里面,而是先将修改数据的这些动作写成redo也就是重做日志了。 至于
Oracle
何时会将数据从数据缓冲区
中
刷到磁盘上,是由DBWR进程来进行的,而DBWR又是由CKPT检查点进程来决定何时工作的。 这里可以大概说一下,数据缓冲区
中
有两个列表,一个是写入列表,一个是最近最少使用列表。在数据缓冲区里面的数据写入到磁
收集MYSQL与
Oracle
如何处理
重复
数据的SQL
Oracle
与MySQL数据
重复
问题
的SQL 可以说,这个数据
重复
,不管在
开发
、数据维护和经历面试时,都应该会碰到的常见
问题
了!在此,本人也是特意关注了网上一些文章,并收集整理在一块,供大家参考学习,同时也便于自己日后的复习!
Oracle
中
的
重复
数据处理 如何查询
重复
的数据 select 字段1,字段2,count(*) from 表名 group by 字段1,字段
oracle
目标表,
oracle
merge 目标表以及源表存在
重复
列的
问题
(转)
SQL> select * from t_source;A B--------------------------------------- ---------------------------------------1 12...
Oracle
17,078
社区成员
55,234
社区内容
发帖
与我相关
我的任务
Oracle
Oracle开发相关技术讨论
复制链接
扫一扫
分享
社区描述
Oracle开发相关技术讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章