Christo, Here's a guess you may be able to check on. I am assuming that you've called the tablespace LARGE_ONE because it is a tablespace with a large extent size. Is the tablespace called AUTO using extent management auto as well as segment space management auto. Some of the difference could have appeared because of some of the inefficiencies that occur when ASSM is mixed with small extents. (Number of blocks per Level 1 bitmap block is low). Bute even if the AUTO tablespace was locally managed with large extents, you may see some collision problems on level 2 bitmaps. Level 1 bitmap blocks become associated with a specific instance, but I believe the same is not true of level 2 bitmaps. As the blocks for level 1 bitmaps are filled, the level 2 bitmap has to be updated to show that it's supply of level one bitmaps is dropping. Possibly you have been filling blocks so fast that your level 2 bitmap (and I think you would probably only have had one) has been bouncing back and forth between instances. Did you check v$waitstat to see if that gave you any clues about the blocks that were subject to waits - my GUESS is that you will see "2nd level bmb". Regards Jonathan Lewis http://www.jlcomp.demon.co.uk/faq/ind_faq.html The Co-operative Oracle Users' FAQ http://www.jlcomp.demon.co.uk/seminar.html Public Appearances - schedule updated March 9th 2005 ----- Original Message ----- From: "Christo Kutrovsky" <kutrovsky.oracle@xxxxxxxxx> To: "oracle-l" <oracle-l@xxxxxxxxxxxxx> Sent: Thursday, March 24, 2005 7:56 PM Subject: ASSM in 10g RAC doesnt seem work that well Hello All, I've been testing a 10g RAC database (on linux & RAW) and one very specific task our application is doing is concurent inserts into the same table. I understand there are concurency issues with Indexes, however I am doing a very simple test on a single table with concuren inserts. My testing shows that if the table is in a non-assm tablespace with freelist groups it works much better, compared to an ASSM tablespace. About 30 seconds (50% more) is lost in each session waiting on the global cache events. So it appears that ASSM is not a good solution for 10g RAC, yet it is supposed to be the solution for RAC. Am I doing something wrong ? Is my test flawed ? Did I miss something? This is a test system, with no-one else but me on the system. Here's the test case: /* NON ASSM */ SQL> drop table k_ins2; Table dropped Executed in 0.231 seconds select tablespace_name, segment_space_management from dba_tablespaces where tablespace_name = 'LARGE_ONE'; TABLESPACE_NAME SEGMENT_SPACE_MANAGEMENT ------------------------------ ------------------------ LARGE_ONE MANUAL Executed in 0.24 seconds create table k_ins2 (id number, type varchar2(30), dt date, inst number(1)) tablespace LARGE_ONE storage(freelist groups 2); Table created Executed in 0.18 seconds exec dbms_application_info.set_module('ASSM TEST',null); PL/SQL procedure successfully completed Executed in 0.15 seconds declare i number; begin for i in 1..1000000 loop insert into k_ins2 values (i, 'FIXED', sysdate +i/10, null); end loop; commit; end; / PL/SQL procedure successfully completed Executed in 63.712 seconds session 2 -> Executed in 66.48 seconds =========================================================================================== select inst_id as i, sid, event, sum(total_waits) as cnt_w, sum(total_timeouts) cnt_tout, sum(time_waited/100) as waited, round(avg(average_wait/100),3) as avg_wait, sum(max_wait/100) as mx from ( select inst_id, sid, event, total_waits, total_timeouts, time_waited, average_wait, max_wait from gv$session_event where (inst_id,sid) in (select inst_id,sid from gv$session where module like 'ASSM TEST%') and event not in ('SQL*Net message from client') and time_waited > 10 union all select inst_id, sid, 'CPU Time', null, null, stats.value as time_waited, null, null from gv$sesstat stats where (stats.INST_ID, stats.sid) in (select inst_id,sid from gv$session where module like 'ASSM TEST%') and statistic# = ( select statistic# from v$statname where name = 'CPU used by this session') ) group by rollup((inst_id,sid),event) order by grouping_id(inst_id,sid,event) desc, waited desc; I SID EVENT CNT_W CNT_TOUT WAITED AVG_WAIT MX - --- ------------------------------- ----- ---------- ---------- ---------- ---------- 4559 0 129.81 0.01 0.2 1 148 2411 0 65.72 0.01 0.08 2 137 2148 0 64.09 0.01 0.12 1 148 CPU Time 64.07 2 137 CPU Time 59.08 2 137 gc current block busy 131 0 4.5 0.03 0.08 1 148 gc current block busy 34 0 0.98 0.03 0.04 2 137 enq: HW - contention 1438 0 0.31 0 0.04 1 148 gc current block 2-way 779 0 0.28 0 0 1 148 gc current multi block request 1587 0 0.28 0 0 2 137 gc current block 2-way 579 0 0.2 0 0 1 148 enq: HW - contention 11 0 0.11 0.01 0.04 12 rows selected Executed in 0.52 seconds SQL> /* ASSM */ SQL> drop table k_ins2; Table dropped Executed in 0.19 seconds select tablespace_name, segment_space_management from dba_tablespaces where tablespace_name = 'USERS'; TABLESPACE_NAME SEGMENT_SPACE_MANAGEMENT ------------------------------ ------------------------ USERS AUTO Executed in 0.241 seconds create table k_ins2 (id number, type varchar2(30), dt date, inst number(1)) tablespace USERS; Table created Executed in 0.17 seconds exec dbms_application_info.set_module('ASSM TEST',null); PL/SQL procedure successfully completed Executed in 0.16 seconds declare i number; begin for i in 1..1000000 loop insert into k_ins2 values (i, 'FIXED', sysdate +i/10, null); end loop; commit; end; / PL/SQL procedure successfully completed Executed in 99.834 seconds Session 2 -> Executed in 100.494 seconds ======================================================================================================================== SQL> select inst_id as i, sid, event, sum(total_waits) as cnt_w, sum(total_timeouts) cnt_tout, sum(time_waited/100) as waited, round(avg(average_wait/100),3) as avg_wait, sum(max_wait/100) as mx from ( select inst_id, sid, event, total_waits, total_timeouts, time_waited, average_wait, max_wait from gv$session_event where (inst_id,sid) in (select inst_id,sid from gv$session where module like 'ASSM TEST%') and event not in ('SQL*Net message from client') and time_waited > 10 union all select inst_id, sid, 'CPU Time', null, null, stats.value as time_waited, null, null from gv$sesstat stats where (stats.INST_ID, stats.sid) in (select inst_id,sid from gv$session where module like 'ASSM TEST%') and statistic# = ( select statistic# from v$statname where name = 'CPU used by this session') ) group by rollup((inst_id,sid),event) order by grouping_id(inst_id,sid,event) desc, waited desc; I SID EVENT CNT_W CNT_TOUT WAITED AVG_WAIT MX -- --- -------------------------------- ----- ---------- ---------- ---------- ---------- 6321 15 196.87 0.038 3.68 1 146 2115 15 98.5 0.047 2.08 2 137 4206 0 98.37 0.026 1.6 1 146 CPU Time 65.73 2 137 CPU Time 57.67 1 146 gc buffer busy 208 15 20.21 0.1 1.01 2 137 gc current block 2-way 3426 0 16.74 0 1.05 2 137 gc current block busy 183 0 16.09 0.09 0.27 1 146 gc current block busy 151 0 7.02 0.05 0.27 2 137 gc buffer busy 227 0 5.86 0.03 0.04 1 146 gc current block 2-way 288 0 3.32 0.01 0.27 2 137 gc current grant busy 262 0 1.76 0.01 0.23 1 146 gc current retry 24 0 1.71 0.07 0.23 2 137 gc cr block busy 108 0 0.25 0 0.01 1 146 gc current multi block request 882 0 0.2 0 0.11 1 146 enq: HW - contention 2 0 0.19 0.1 0.19 1 146 DFS lock handle 560 0 0.12 0 0 17 rows selected Executed in 0.471 seconds -- Christo Kutrovsky Database/System Administrator The Pythian Group -- //www.freelists.org/webpage/oracle-l -- //www.freelists.org/webpage/oracle-l