有一个系统,现在客户发现,I/O瓶颈,经过分析,发现每秒钟事务数达到极限,导致I/O较高,导致数据库会暂时锁住后续事务的提交,产生数据库报警。想请大家给支个招,如果是程序问题的话,那如何下手分析呢?一般什么操作会使数据库不停的进行事务提交操作呢?望高人指点。

解决方案 »

  1.   

    你程序commit的过于频繁了吧
      

  2.   

    恩,对的,我跟了下程序,每次执行insert,update,delete都会执行commit,跟这个有关系吗?
      

  3.   

    当然有关系喽,一次commit之后,一次事务就产生楼。。
      

  4.   

    恩,这个我知道,那一次提交之后对其它有什么影响呢?成功之后这次commit就关闭了呀,那为啥又产生大量的redo log操作,导致I/O较高呢?并且会暂时锁住后续事务的提交???
      

  5.   

    commit之后,oracle会把log buffer中的数据写入到redo file中,产生lgwr进程的原因有三:1、用户commit 2、log buffer有1/3满或是log buffer中的数据超过1M 3、dbwr进程触发lgwr进程。 你的问题就是原因1,可能出现热点块。
      

  6.   

    执行COMMIT时,LGWR 将所有余下的缓存重做日志条目写到磁盘,如果事务提交得太频繁,就有可能引入大量的日志文件同步等待。
    http://blog.csdn.net/fw0124/article/details/6899364
    因此最好根据业务需求来确定事务的大小,你目前的情况,要么是系统吞吐量太大,否则有可能就是程序设计的问题了。