oracle 9i,有一张中间表,一个程序往里写数据,另一个程序读数据,并且删除。
速度:写的时候大概是180(条)/s,读,删数据的速度按写入的速度处理完。
中间表没有索引。
问题是:两个程序好像有资源争夺的现象,如何能改善效率?
需要为这个表空间单独建一个 回滚段吗?(两个程序都是多线程并发的程序)类似这样的编程,需要注意些什么问题呢?(数据的写入读出,采用的是oracle 的oo4o)谢谢各位老鸟提出建议。
速度:写的时候大概是180(条)/s,读,删数据的速度按写入的速度处理完。
中间表没有索引。
问题是:两个程序好像有资源争夺的现象,如何能改善效率?
需要为这个表空间单独建一个 回滚段吗?(两个程序都是多线程并发的程序)类似这样的编程,需要注意些什么问题呢?(数据的写入读出,采用的是oracle 的oo4o)谢谢各位老鸟提出建议。
oracle对index有一个2%,4%原则,就是说,如果你读的数据返回的值大于这两个数,最好不要建index,而且,index会影响对表的写入,如果经常写数据到一个表,最好不要建index.
可以试着设置以下表的PCTFREE,PCTUSED的值(这两个设置来控制块何时增加和撤销FREELIST):
高PCTFREE,低PCTUSED-用于插入许国将要更新的数据,并且更新经常会增加行的大小。这样插入后在块上保留了许多空间(高PCTFREE),在块返回到自由列表之前,块必须几乎是空的(低PCTUSED)。
低PCTFREE,高PCTUSED-用于倾向于对表只使用INSERT或DELETE,或者如果要UPDATE,UPDATE也只是会使行变小。
根据楼主的需求,设置高PCTFREE,低PCTUSED应该可以提高点性能哦。
一般INSERT将产生最少数量的撤销,因为Oracle所要做的是记录要“删除”的行ID;UPDATE一般是第二位(在大多数情况),所要做的是记录修改过的字节,最常见的情况是UPDATE整行数据的一小部分;DELETE产生最多的撤销。
为该表空间设置一个合适的回滚段就可以了