drop table scott.test2;
drop sequence scott.test2val;
CREATE TABLE "SCOTT"."TEST2" ("ID" NUMBER(10) NOT NULL, "DATA"
VARCHAR2(1000) NOT NULL, "VAL1" NUMBER(10) NOT NULL, "VAL2"
NUMBER(10) NOT NULL,
CONSTRAINT "PK_TEST2" PRIMARY KEY("ID")) TABLESPACE "EXAMPLE" ;
CREATE SEQUENCE "SCOTT"."TEST2VAL" INCREMENT BY 1 START WITH 1
MAXVALUE 1.0E28 MINVALUE 1 NOCYCLE
CACHE 20 NOORDER;
CREATE OR REPLACE PROCEDURE dut
(
su number
)
as
v_startTime timestamp;
v_endTime timestamp;
v_diff number(10,6) ;
begin
--set serveroutput on
v_startTime := systimestamp;
----질의 시작
for i in 1..su loop
insert into scott.test2
values(scott.test2val.nextval,'abcd', test2val.currval,test2val.currval);
commit;
end loop;
commit;
----질의 끝
v_endTime := systimestamp;
v_diff := to_number(to_char(v_endTime ,'sssss.ff')) - to_number(to_char(v_startTime ,'sssss.ff')) ;
DBMS_OUTPUT.PUT_LINE('질의 진행 시간 : '||v_diff);
end;
/
set serveroutput on
exec dut(100000)
-- EXAMPLE테이블 스페이스의 테이블스페이스멥을 켑쳐
-- 혹은 utlchain.sql스크립트 실행 후 아래와 같은 스크립트(EM에서 분석-이전행혹은연속행나열)를 날려 줄것.
-- begin
-- dbms_stats.gather_index_stats(ownname=> 'SCOTT', indname=> 'PK_TEST2', partname=> NULL);
-- end;
-- .
-- /
update test2 set data='abcdefghijklmnopqrstuvwxyz';
commit;
-- 테이블스페이스멥과 켑쳐 화면과 비교해서 Chain블록의 생성여부를 확인.
-- Chain블록이 생겼을 경우 테이블을 생성시 PCTFEE의 양을 늘림.
drop table scott.test2;
drop sequence scott.test2val;
CREATE SEQUENCE "SCOTT"."TEST2VAL" INCREMENT BY 1 START WITH 1
MAXVALUE 1.0E28 MINVALUE 1 NOCYCLE
CACHE 20 NOORDER;
CREATE TABLE "SCOTT"."TEST2" ("ID" NUMBER(10) NOT NULL, "DATA"
VARCHAR2(1000 byte) NOT NULL, "VAL1" NUMBER(10) NOT NULL,
"VAL2" NUMBER(10) NOT NULL,
CONSTRAINT "PK_TEST2" PRIMARY KEY("ID")
USING INDEX
TABLESPACE "EXAMPLE" STORAGE ( INITIAL 64K NEXT 0K MINEXTENTS 1 MAXEXTENTS
2147483645 PCTINCREASE 0) PCTFREE 10 INITRANS 2 MAXTRANS 255)
TABLESPACE "EXAMPLE" PCTFREE 50 PCTUSED 0 INITRANS 1 MAXTRANS 255
STORAGE ( INITIAL 64K NEXT 0K MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0)
LOGGING ;
exec dut(100000);
-- 테이블 스페이스 멥을 확인하고.
update test2 set data='abcdefghijklmnopqrstuvwxyz';
-- 적정 PCTFREE값을 찾으면 됨.
/
CREATE TABLE "SCOTT"."TEST2" ("ID" NUMBER(10) NOT NULL, "DATA"
VARCHAR2(1000) NOT NULL, "VAL1" NUMBER(10) NOT NULL, "VAL2"
NUMBER(10) NOT NULL,
CONSTRAINT "PK_TEST2" PRIMARY KEY("ID")) TABLESPACE "EXAMPLE"
pctfree 44
/
exec dut(10000)
/
update test2 set data='abcdefghijklmnopqrstuvwxyz'
/
commit
/
drop table chained_rows
/
@C:ORACLEORA92rdbmsadminutlchain.sql
/
analyze table scott.test2 list chained rows
/
select count(*) from chained_rows where
table_name='TEST2'
/
-- 결과 있으면 pctFree 올려주고,,,없으면 내려주고,,하면서 최적의 pctFree값을 찾음.



delete from scott.test2 where round(id/2)*2=id;
commit;
-- 테이블 스페이스멥을 확인해 볼것...!(분석을 해봐도 무방)
-- 사용중인 블록 갯 수 확인 후 재구성 후 다시 블록수 확인 할것.