프린트 하기

OS환경 : Oracle Linux6.8(64bit)


DB 환경 : Oracle Database 11.2.0.4


쿼리 : 동시에 100개의 세션으로 dml 수행 방법, 여러세션 쿼리 동시실행

테스트용 테이블 생성

1
2
3
4
5
6
SQL> CREATE TABLE SESS_TEST
(
  SEQ NUMBER
  , DATE_COL1 DATE
  , C2 NUMBER
);


시퀀스 생성

1
SQL> CREATE SEQUENCE SESS_TEST_SEQ INCREMENT BY 1 NOCYCLE ORDER;


10000개 row를 insert 하는 insert.sh 쉘 작성

vi insert.sh

1
2
3
4
5
6
7
8
BEGIN
FOR i IN 1..10000
          LOOP
                   INSERT INTO SESS_TEST VALUES (SESS_TEST_SEQ.NEXTVAL, SYSDATE, i);
          END LOOP;
END;
/
EXIT;


insert.sh 를 100번 실행하는 insert_100_session.sh 쉘 작성

vi insert_100_session.sh

1
2
3
4
5
for ((i=1; i<=100; i++))
do
nohup sqlplus scott/tiger @insert.sql &
done
wait


동시에 100개 세션으로 insert 실행

1
$ sh insert_100_session.sh


top 5 이벤트 확인

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
col wait_class for a12
col event for a50
select * from (
 select
 WAIT_CLASS ,
 EVENT,
 count(sample_time) as EST_SECS_IN_WAIT
 from v$active_session_history
 where sample_time between sysdate - interval '1' hour and sysdate
 group by WAIT_CLASS,EVENT
 order by count(sample_time) desc
 )
where rownum <6;
 
WAIT_CLASS   EVENT                        EST_SECS_IN_WAIT
------------ -------------------------------------------------- ----------------
Concurrency  cursor: pin S wait on X                          64
(null)         (null)                                  34
Concurrency  library cache: mutex X                          15
Other         null event                               12
Other         latch: call allocation                           8
 
5 rows selected.



참조 : https://cafe.naver.com/dbian/1064