我在ORACLE数据中插入了1000万条数据(非常简单的数据,由5个varchar2(128)的列构成),是分十个进程同时插入的,每次插入一条数据,插入数据后进程不退出,进行下一次插入。同时在sqlplus中使用select count(*) from tablename进行查询,查询需要将近40s(估算)。机器是redhat as5系统,4核xeon cpu,4g内存+4g swap,程序启动了10个oracle进程,每个进程占用约300M内存,总体内存占用基本是占满的(90%以上),cpu占用约65%。我想问一下,这样的查询速度是不是很不正常,正常的话,对于千万条左右的数据,select count(*) 需要多长时间?能否得到该操作执行的比较精确的时间?另外,对于非常简单的记录,我的程序的插入速度是不是非常慢,需要如何提高程序的插入速度呢?
2、insert /*+append*/ into values,这种方式无效,append nologging方式只对批量插入有效。
3、sqlplus中执行可以使用set timing on来打开计时,存储过程中可以使用dbms_profiler包来计时。
--大量数据的insert慢,解决:alter table tb nologging
drop index index_name --先删除表上的index(若有)
insert /*+append*/ into tb --执行插入
create index index_name on --重建index
alter table tb logging
对于为什么时间长 一你是全表扫描 建议count(主键)
还有你的开了十个进程 每个都有可能在检索数据 你的sga pga redo等快吃不消,这个时候肯定慢