SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
PL/SQL Release 11.2.0.3.0 - Production
CORE 11.2.0.3.0 Production
TNS for Linux: Version 11.2.0.3.0 - Production
NLSRTL Version 11.2.0.3.0 - Production
SQL> show parameter event
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
event string
xml_db_events string enable
SQL>
conn maclean/oracle
CREATE TABLE "MACLEAN_LOB" ( "T1" VARCHAR2(200) NOT NULL , "T2" CLOB, "T3" CLOB) tablespace users
LOB ("T2")
STORE AS ( TABLESPACE "USERS" CHUNK 16K PCTVERSION 50 CACHE )
LOB ("T3")
STORE AS ( TABLESPACE "USERS" CHUNK 16K PCTVERSION 50 CACHE );
SQL> select segment_space_management from dba_tablespaces where tablespace_name='USERS';
SEGMEN
------
AUTO
exec dbms_workload_repository.create_snapshot;
开3个进程并发插入LOB表
begin
for i in 1..10000 loop
insert into maclean.maclean_lob values ('ABC',rpad('Z',32000,'L'),rpad('Z',32000,'L'));
end loop;
commit;
end;
/
exec dbms_workload_repository.create_snapshot;
SQL> select bytes/1024,segment_name from dba_segments where segment_name in (select segment_name from dba_lobs where table_name='MACLEAN_LOB' and owner='MACLEAN');
BYTES/1024 SEGMENT_NAME
---------- ---------------------------------------------------------------------------------
490496 SYS_LOB0000076982C00003$$
482304 SYS_LOB0000076982C00002$$
SQL> truncate table maclean.maclean_lob;
Table truncated.
SQL> SQL>
SQL>
SQL> select bytes/1024,segment_name from dba_segments where segment_name in (select segment_name from dba_lobs where table_name='MACLEAN_LOB' and owner='MACLEAN');
BYTES/1024 SEGMENT_NAME
---------- ---------------------------------------------------------------------------------
64 SYS_LOB0000076982C00003$$
64 SYS_LOB0000076982C00002$$
SQL> alter system flush buffer_cache;
System altered.
SQL> alter system flush shared_pool;
System altered.
alter system set events '44951 trace name context forever, level 1024';
exec dbms_workload_repository.create_snapshot;
开3个进程并发插入LOB表
begin
for i in 1..10000 loop
insert into maclean.maclean_lob values ('ABC',rpad('Z',32000,'L'),rpad('Z',32000,'L'));
end loop;
commit;
end;
/
exec dbms_workload_repository.create_snapshot;
select bytes/1024,segment_name from dba_segments where segment_name in (select segment_name from dba_lobs where table_name='MACLEAN_LOB' and owner='MACLEAN');
BYTES/1024 SEGMENT_NAME
---------- ---------------------------------------------------------------------------------
483328 SYS_LOB0000076982C00003$$
483328 SYS_LOB0000076982C00002$$
以上可以看到虽然设置了44951 level 1024,但并不会因为单次bump hwm的chunks数增加而导致大量空间的浪费。
对比AWR可以发现设置44961 level 1024后 enq HW - contention消耗的DB TIME明显减少:
相关文章: