공유할 서비스 선택

TECH


TECH

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 모드로 실 부하를 발생시킵니다.

08548123b1083c26e60718a208c8e2bd_1715072177_504.png
 

 


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 을 선택

08548123b1083c26e60718a208c8e2bd_1715072208_4632.png
 

 

 

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>

 

08548123b1083c26e60718a208c8e2bd_1715072262_2434.png
 

 

 

Test Plan 에 우클릭하여 Add - Threads (Users) - Thread Group 선택 

08548123b1083c26e60718a208c8e2bd_1715072399_0948.png
 

 

 

Number of Threads 1 => 800 으로 수정, Loop Count 1 => 1,000,000 으로 수정

1초(ramp-up time)마다 800쓰레드로 1,000,000 번의 트랜잭션을 수행합니다

08548123b1083c26e60718a208c8e2bd_1715072452_3116.png
 

 

 

Insert & update 에서 변수로 활용할 CSV파일을 정의하기 위해

Threads Group 에서 우클릭 후 Add - Config Element - CSV Data Set config 를 선택

08548123b1083c26e60718a208c8e2bd_1715072487_9906.png
 

 

 

Filename 에 위에서 생성한 샘플 CSV 경로를 지정 : /home/oracle/script/emp.csv 

Variable Names (comma delimeted) 값을 지정 : empid, value

위에서 userxxxx, bmt workload 라는 형식의 sam file을 만들었는데 jmeter 에서 csv 파일을 읽어서 empid, value 변수로 매칭시키고 insert, update 문에서 활용 가능합니다

08548123b1083c26e60718a208c8e2bd_1715072559_0195.png
 

 

 

Thread Group에서 우클릭하여 Add - Sampler - JDBC Request 를 선택 

08548123b1083c26e60718a208c8e2bd_1715072598_8715.png
  

 

 

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

08548123b1083c26e60718a208c8e2bd_1715072638_042.png
  

 

 

Thread Group에서 우클릭하여 summary report 리스너를 추가 

08548123b1083c26e60718a208c8e2bd_1715072693_9638.png
 

 

 

작업이 완료 되었으면 File-Save Test Plan as 를 클릭하여 insert.jmx 파일로 저장합니다. 

08548123b1083c26e60718a208c8e2bd_1715072729_93.png
 

 

 

5. Jmeter update 시나리오 설계

시나리오 설계는 다음 가이드로 진행하겠습니다.

양이 너무 많으면 적는 저도 좀 빡세네요.. 

 

그럼 열공하세요~

 

댓글목록

등록된 댓글이 없습니다.

TECH 목록
번호 제목 작성자 작성일 조회수
235 OS OSworker 아이디로 검색 전체게시물 12-24 24
RHEL 9에서 RHEL 6 시스템 또는 타사 APP 서비스로 SSH 연결이 되지 않는 이유

카테고리 : OS

24 0
작성자 : OSworker 24/12/24
234 OS OSworker 아이디로 검색 전체게시물 12-14 85
RHEL7.9 RHEL8.8 커널 업데이트 후 성능 이슈가 발생했습니다.

카테고리 : OS

85 0
작성자 : OSworker 24/12/14
233 OS OSworker 아이디로 검색 전체게시물 11-27 209
Red Hat Enterprise Linux 9에서 root 사용자로 SSH 로그인 활성화 하는 방법

카테고리 : OS

209 0
작성자 : OSworker 24/11/27
232 OS OSworker 아이디로 검색 전체게시물 11-17 260
RHEL 9.5 가 11월 12일에 릴리즈 되었습니다. 간략하게 살펴보시죠~

카테고리 : OS

260 0
작성자 : OSworker 24/11/17
231 OS OSworker 아이디로 검색 전체게시물 11-10 237
어떤 프로세스 어떤 이유로 인해 성능에 문제가 생겼을때 perf로 그 문제를 찾아보세요.

카테고리 : OS

237 0
작성자 : OSworker 24/11/10
230 OS OSworker 아이디로 검색 전체게시물 10-31 261
AI에 대한 관심이 많습니다. 혹시 RHEL AI에 대해 들어보셨나요?

카테고리 : OS

261 0
작성자 : OSworker 24/10/31
229 OS OSworker 아이디로 검색 전체게시물 10-24 269
Fedora와 Red Hat Enterprise Linux의 차이점

카테고리 : OS

269 0
작성자 : OSworker 24/10/24
228 OS OSworker 아이디로 검색 전체게시물 10-11 303
audit 로그에 저장된 time 을 날짜/시간 으로 변경하여 보는법

카테고리 : OS

303 0
작성자 : OSworker 24/10/11
227 OS OSworker 아이디로 검색 전체게시물 09-29 431
[보안취약점]"RHSB-2024-002 - OpenPrinting cups-filters"에 대해 설명드리고자합니다.

카테고리 : OS

431 0
작성자 : OSworker 24/09/29
226 OS OSworker 아이디로 검색 전체게시물 09-25 579
누가 설정파일을 수정했는지 알고싶어요? 그럼 audit를 사용해보세요~!

카테고리 : OS

579 0
작성자 : OSworker 24/09/25
Total 235건
게시물 검색

주식회사 클럭스| 대표 : 이찬호| 사업자등록번호 : 107-87-27655
주소 : 서울특별시 영등포구 국회대로 800, 여의도파라곤
E-mail : sales@chlux.co.kr
Copyright © 클럭스 chlux.co.kr All rights reserved.
상단으로Top