insert into values插入单行数据
SQL语句,insert into values插入单行数据,执行10万次,执行时间1279秒,优化总体执行耗时。
SQL文本,单行insert values,没有select部分。需要进一步分析执行过程消耗。
insert into xxx(......) values(:1 , :2 , :3 , :4 , :5 , :6 , :7 , :8 , :9 , :10 , :11 , :12 , :13 , :14 , :15 , :16 , :17 , :18 , :19 , :20 )
ASH报告中,等待事件主要集中在db file sequential read单块读上。
查看等待事件的响应时间
单块读平均响应时间14毫秒,io略慢。
set line 200 pages 1000
select sql_id,event,avg(time_waited)/1000,count(*)
from gv$active_session_history
where
sql_id='2y2y48vssc6jv'
group by sql_id,event
order by count(*);
查看等待事件访问对象
单块读涉及到对象均是索引
set line 200 pages 1000
select sql_id,event,current_obj#,count(*)
from gv$active_session_history
where
sql_id='2y2y48vssc6jv'
group by sql_id,event,current_obj#
order by count(*);
select object_id,object_name,object_type from dba_objects where object_id in (471141,471142,471143);
表大小30GB,30个列。
三个对象为表上的三个索引,大小均为10GB,单个索引2个列。明显索引碎片较大。
优化建议:
1.能不能程序并发执行insert?
2.等待事件都在db file sequential read单块读上,平均单次响应时间14毫秒,io有点慢。优化存储响应时间。
3.insert语句执行过程中主要消耗在索引维护上,三个索引,索引碎片比较大,重建这三个索引,能够减少物理读次数,对维护索引效率提高有帮助。(首选)
SYS@db11g> alter index index_t1012 rebuild online parallel 8;
SYS@db11g> alter index index_t1012 noparallel;