oracle 9i,有一张中间表,一个程序往里写数据,另一个程序读数据,并且删除。
速度:写的时候大概是180(条)/s,读,删数据的速度按写入的速度处理完。
中间表没有索引。
问题是:两个程序好像有资源争夺的现象,如何能改善效率?
需要为这个表空间单独建一个 回滚段吗?(两个程序都是多线程并发的程序)类似这样的编程,需要注意些什么问题呢?(数据的写入读出,采用的是oracle 的oo4o)谢谢各位老鸟提出建议。

解决方案 »

  1.   

    刚学oracle的index,说点自己知道的,不知道对你有没有帮助:
        oracle对index有一个2%,4%原则,就是说,如果你读的数据返回的值大于这两个数,最好不要建index,而且,index会影响对表的写入,如果经常写数据到一个表,最好不要建index.
      

  2.   

    给表设置合适的FREELIST,对于表要做的是,尽力确定并行的插入和更新的最大数,需要有和在表中并行插入一样多的FREELIST来提高并行性能(但也不是FREELIST足够高就可以了)。
    可以试着设置以下表的PCTFREE,PCTUSED的值(这两个设置来控制块何时增加和撤销FREELIST):
    高PCTFREE,低PCTUSED-用于插入许国将要更新的数据,并且更新经常会增加行的大小。这样插入后在块上保留了许多空间(高PCTFREE),在块返回到自由列表之前,块必须几乎是空的(低PCTUSED)。
    低PCTFREE,高PCTUSED-用于倾向于对表只使用INSERT或DELETE,或者如果要UPDATE,UPDATE也只是会使行变小。
    根据楼主的需求,设置高PCTFREE,低PCTUSED应该可以提高点性能哦。
      

  3.   

    回滚段用于存放数据修改之前的值(包括数据修改之前的位置和值)。回滚段的头部包含正在使用的该回滚段事务的信息。一个事务只能使用一个回滚段来存放它的回滚信息,而一个回滚段可以存放多个事务的回滚信息
    一般INSERT将产生最少数量的撤销,因为Oracle所要做的是记录要“删除”的行ID;UPDATE一般是第二位(在大多数情况),所要做的是记录修改过的字节,最常见的情况是UPDATE整行数据的一小部分;DELETE产生最多的撤销。
    为该表空间设置一个合适的回滚段就可以了