现在要求平均每秒钟插入100条数据,也就是要求每10毫秒钟向数据库中插入一条数据。我测试了oracle9i数据库服务器,它插入1000条数据的话大概要770毫秒,但是我又测试它每插入一条数据的时间,结果很奇怪,大多数是在0.5-0.6毫秒,可是在插入1000条数据中,会有20条左右的时间会是几毫秒,甚至10几或20几毫秒,这样就满足不了每插入一条数据都能在10毫秒范围内了,请大家帮忙谢谢了。注(每条数据量大概不查过1K)
想知道oracle9i数据库服务器的数据存储模式,为什么同样是插入一条数据,有的需要时间那么长,而大多数都是那么短呢?有什么好的方法解决么?谢谢了,急求啊!
想知道oracle9i数据库服务器的数据存储模式,为什么同样是插入一条数据,有的需要时间那么长,而大多数都是那么短呢?有什么好的方法解决么?谢谢了,急求啊!
然后就执行。请帮忙,谢谢了
with adoquery1 do
begin
close;
sql.text := ' insert into table (a,b,c) values(:a,:b,:c);
parameters.parambyname('a').value := edit1.text;
...
execsql;
end;你参考一下
在java中也差不多类似
DBWn进程写数据到磁盘主要是两种情况:
1,LRU list与dirty list
一般情况,buffer cache中的数据先要从LRU list转移到dirty list,当脏数据达到dirty list的阀值时(25%),dbwn开始将脏数据写入到磁盘;
如果buffer cache中不足以缓冲新数据时,dbwn也会直接从LRU list写入到磁盘,不再经过dirty list的转移。
2,checkpoint
发生检查点时,同样会使dbwn进程写数据,checkpoint的情况相对较多。
表空间的offline,hot backup,段删除都会使dbwn写磁盘。上述检查点相关的写磁盘同样也要把数据从LRU list转移到dirty list然后开始写磁盘。
commit与DBWn进程的操作不要混淆。
commit的主要操作是将redo records写入到logfile。
主要的作用就是避免了数据完全没有或者部分没有写入到磁盘时,数据库出现问题,丢失数据。
如果此时宕机了,数据库会依据SCN重新redo一下之前写进去的redo records,这样就确保数据不会丢失了。
看完了你给的意见,我有了不少体会。
我现在是想保证每次插入四条数据的时间控制在10ms内,如果数据库等到数据量达到一定量之后才一起写入硬盘,这时写磁盘的时间就过长了,会使下次插入数据发生延迟,导致时间超过10ms。能否控制DBWn进程的操作每插入一条语句就写磁盘呢?
http://blog.csdn.net/pathuang68/archive/2009/04/16/4084139.aspx
和
http://blog.csdn.net/pathuang68/archive/2009/04/16/4084116.aspx