Middleware (오픈소스 활용-30) (부하테스트 Tool) Jmeter 를 활용한 JDBC 부하테스트 방법 -1
페이지 정보
작성자 미들웨어 아이디로 검색 전체게시물 댓글 0건 조회 1,804회 좋아요 0회 작성일 24-05-07 17:48본문
안녕하세요. "미들웨어" 입니다.
지난번에 Jmeter 설치 가이드를 해드렸는데, 이번에는 Jmeter 을 활용하여 JDBC 테스트를 진행해보겠습니다.
Jmeter 설치가 기본적으로 진행되야 아래 내용이 이해되실거예요.
Jmeter 설치 관련해서는 제가 작성했던 23장 내용을 링크로 전달해드릴테니 참고해주세요
(오픈소스 활용-23) (부하테스트 Tool) Jmeter 설치 및 구성 가이드
1. OJDBC 드라이버 파일 카피
오라클 JDBC 8 드라이버 JAR를 Jmeter 하위의 Lib 디렉토리에 카피
OJDBC8 URL : https://download.oracle.com/otn-pub/otn_software/jdbc/ojdbc8-full.tar.gz
[oracle@lib]$ pwd /home/oracle/apache-jmeter-5.4.1/lib
[oracle@lib]$ ls -ltr
-rw-r--r--. 1 oracle dba 113369 Feb 1 1980 bsf-2.4.0.jar
-rw-r--r--. 1 oracle dba 121783 Feb 1 1980 asm-9.0.jar
-rw-r--r--. 1 oracle dba 2387 Feb 1 1980 apiguardian-api-1.1.0.jar
-rw-r--r--. 1 oracle dba 30035 Feb 1 1980 accessors-smart-1.2.jar
-r--r--r--. 1 oracle dba 4210517 Aug 26 00:27 ojdbc8.jar
- 오라클 환경 확인
오라클 DB는 19.12 에서 수행하였습니다.
[oracle@apache-jmeter-5.4.1]$ env | grep
ORA ORACLE_PATH=/home/oracle/COET/sql:/home/oracle/COET/sql/plus
ORACLE_SID=CDB2
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=/u01/app/oracle/product/19
[oracle@apache-jmeter-5.4.1]$ cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.0.157 hol.livelabs.oraclevcn.com hol
2. Jmeter Insert & Update 시나리오 작성
Jmeter 실행
[oracle@hol apache-jmeter-5.4.1]$ cd bin
[oracle@hol bin]$ ./jmeter
실행 후 Gui 화면이며 여기에서 시나리오를 작성하고 잘 동작하는지 확인 후에, cli 모드로 실 부하를 발생시킵니다.
3. Test 시나리오를 위한 DB 설계
구현하고자 하는 시나리오는 다음과 같습니다.
"첫 번째 시나리오"
- insert 는 PK데이터와 null 값을 가진 row 를 삽입하며 PK키는 시퀀셜하게 증가하는 값을 가져 index에 right growing 을 유발하며, 쓰레드당 1초의 대기시간을 가지고 트랜잭션을 수행한다.
"두 번째 시나리오"
- update는 PK로 유니크 스캔후에 위의 null값 컬럼에 큰 바이트값 데이터을 업데이트 하는 형식으로, 쓰레드당 1초의 대기시간을 가지고 트랜잭션을 수행한다"
DB 테이블 설계
drop table employees;
create table employees ( employee_id varchar2(40) ,first_name varchar2(20) ,last_name varchar2(20) ,email varchar2(20) ,hire_date date ,job_title varchar2(4000) ) segment creation immediate storage (initial 10G) pctfree 40 initrans 255 tablespace oltp ;
create unique index pk_employee on employees ( employee_id ) reverse storage (initial 1g) pctfree 40 initrans 255 ;
--unique scan이 아니라면 reverse key를 사용 못하고 hash partition으로 만들어야 함 --create unique index pk_employee on employees ( employee_id ) --global partition by hash (employee_id) --partitions 20 storage (initial 1g) pctfree 40 initrans 255;
alter table employees add constraint pk_employee primary key ( employee_id); |
heavy insert & update 테스트 시 고려해야 할 DB 파라메터 및 구성
• UNDO TBS Size 증가
• Redo Log Size 증가
• process, sessions 증가
• 인덱스가 right growing 일 시 reverse key 혹은 hash partitioning 고려
• Table & Index initial Segment 증가 initrans 증가, Pctfree 값 조정
• 적정 Log_buffer 사이즈 설정
• cursor_sharing = force (리터럴 SQL로 부하들어올 시)
• commit_logging = batch, commit_wait = nowait
• _rollback_segment_count 값 증가, _undo_autotune= false
• resource_manager_plan ='' (null 로 설정)
• DB 19.12 이상부터 SQL에 힌트부여가 가능한 테스트 환경이라면 insert 문에 /*+ memoptimized_rowstore */ 활용 (본 힌트는 behavior hint 로 optimizer hint가 아니라서, SQL profile, SQL patching 이 불가함)
• _gc_policy_time (10) => 0 _gc_undo_affinity (true) => false ( RAC DRM Remastering 해제. RAC 양노드로 동일 테이블 update 발생 환경 고려)
테스트에 활용할 샘플 데이터 생성
spool emp.csv set echo off set term off set heading off set pages 0 set feed off
select 'user'||rownum||','||'bmt workload' from dba_tab_columns, (select 1 from dba_tab_columns where rownum<100) where rownum <=8000000;
spool off |
4. Jmeter Insert 시나리오 설계
Test Plan에 우클릭하여 Add - Config Element - JDBC Connection Configuration 을 선택
Validation Query 를 지정 (오른쪽 드랍다운 메뉴를 눌러 선택) : select 1 from dual
Database URL 값 지정 : jdbc:oracle:thin:@//localhost:1521/PDB2
JDBC Driver class 값 지정 (오른쪽 드랍다운 메뉴를 눌러 선택) : oracle.jdbc.OracleDriver
Username : <DB schema ID>
Password : <DB schmea password>
Test Plan 에 우클릭하여 Add - Threads (Users) - Thread Group 선택
Number of Threads 1 => 800 으로 수정, Loop Count 1 => 1,000,000 으로 수정
1초(ramp-up time)마다 800쓰레드로 1,000,000 번의 트랜잭션을 수행합니다
Insert & update 에서 변수로 활용할 CSV파일을 정의하기 위해
Threads Group 에서 우클릭 후 Add - Config Element - CSV Data Set config 를 선택
Filename 에 위에서 생성한 샘플 CSV 경로를 지정 : /home/oracle/script/emp.csv
Variable Names (comma delimeted) 값을 지정 : empid, value
위에서 userxxxx, bmt workload 라는 형식의 sam file을 만들었는데 jmeter 에서 csv 파일을 읽어서 empid, value 변수로 매칭시키고 insert, update 문에서 활용 가능합니다
Thread Group에서 우클릭하여 Add - Sampler - JDBC Request 를 선택
Query 입력 : insert into employees (employee_id,first_name,last_name,email,hire_date) values ('${empid}','${empid}','${empid}','${empid}',sysdate)
CSV에서 불러온 empid 를 변수 처리해서 입력하고, date 값은 sysdate로 입력합니다
Variable names 입력 : empid
Thread Group에서 우클릭하여 summary report 리스너를 추가
작업이 완료 되었으면 File-Save Test Plan as 를 클릭하여 insert.jmx 파일로 저장합니다.
5. Jmeter update 시나리오 설계
시나리오 설계는 다음 가이드로 진행하겠습니다.
양이 너무 많으면 적는 저도 좀 빡세네요..
그럼 열공하세요~
댓글목록
등록된 댓글이 없습니다.