SCAN과 LOAD_BALANCE에 대한 접속 테스트

2023. 4. 5.·Oracle/Administration

부하 테스트 환경에서는 로드 밸런싱 관점에서 SCAN(Single Client Access Name)을 사용하는 것보다 LOAD_BALANCE 파라미터를 ON으로 설정하는 편이 유리할 수 있습니다.

 

SCAN과 LOAD_BALANCE에 대한 접속 테스트를 위해 tnsnames.ora 파일을 아래와 구성하겠습니다. TNS_SCAN은 SCAN IP을 사용하고, TNS_LB는 LOAD_BALANCE 파라미터를 ON으로 설정하고 각각 인스턴스 IP를 사용합니다.

# tnsnames.ora
TNS_SCAN =
    (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = SCAN1)(PORT = 1521))
        (CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = DB))
    )

TNS_LB =
    (DESCRIPTION =
        (LOAD_BALANCE = ON)
        (ADDRESS = (PROTOCOL = TCP)(HOST = DB1)(PORT = 1521))
        (ADDRESS = (PROTOCOL = TCP)(HOST = DB2)(PORT = 1521))
        (CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = DB))
    )

 

테스트를 위해 아래와 같이 conn.sh 파일을 생성하겠습니다.

$ cat conn.sh

#!/bin/bash

iteration=${2:-86400}
sleep=${3:-1}

for ((i=1; i<=iteration; i++)); do
v_instance=`sqlplus -s tuna/tuna@$1 << 'EOF'
SET FEEDBACK OFF
SET PAGESIZE 0
SET TIMING   OFF
SELECT SYS_CONTEXT ('USERENV', 'INSTANCE') FROM DUAL;
EXIT
EOF`
    printf "$v_instance,"
    a_instances+=("$v_instance")
    sleep $sleep
done

printf "\n"
printf "1: $(printf "%s\n" "${a_instances[@]}" | grep -c '1')\n"
printf "2: $(printf "%s\n" "${a_instances[@]}" | grep -c '2')\n"

 

아래는 TNS_SCAN을 테스트한 결과입니다. 접속이 불균등한 것을 확인할 수 있습니다. SCAN은 부하에 따라 접속되는 인스턴스를 결정하므로 부하가 없는 환경에서는 접속이 불균등할 수 있습니다.

$ sh conn.sh tns_scan 100 0.1
2,2,2,1,2,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,2,1,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,...
1: 67
2: 33
$ sh conn.sh tns_scan 100 0.1
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,...
1: 95
2: 5
$ sh conn.sh tns_scan 100 0.1
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,...
1: 78
2: 22

 

아래는 TNS_LB를 테스트한 결과입니다. SCAN에 비해 상대적으로 접속이 균등한 것을 확인할 수 있습니다.

$ sh conn.sh tns_lb 100 0.1
2,1,2,2,2,1,1,2,2,2,2,1,2,1,1,1,2,1,1,2,1,2,2,1,2,1,1,1,1,1,2,1,2,2,2,1,1,1,2,1,1,1,1,1,1,1,2,2,2,1,...
1: 49
2: 51
$ sh conn.sh tns_lb 100 0.1
1,1,2,1,1,2,2,2,2,2,1,2,2,1,1,1,2,1,1,2,2,2,2,1,2,1,1,1,2,2,2,1,1,2,2,2,2,1,2,2,2,1,2,1,1,1,1,1,2,1,...
1: 55
2: 45
$ sh conn.sh tns_lb 100 0.1
2,1,2,2,2,1,1,1,1,1,1,1,2,2,1,2,1,2,2,2,1,2,2,1,2,1,2,1,1,1,2,1,1,2,2,1,2,1,2,2,1,1,2,1,1,2,1,2,2,1,...
1: 49
2: 51
저작자표시 비영리 변경금지 (새창열림)
'Oracle/Administration' 카테고리의 다른 글
  • 파티션 high_value_clob, high_value_json 칼럼 추가
  • 오브젝트 ID
  • V$SPPARAMETER 뷰
  • V$PARAMETER2 뷰
정희락
정희락
2007년부터 Oracle Database 성능 최적화에 주력해 왔으며, 현재 한국오라클 Engineered Systems Solution Engineering 팀에서 Solution Engineer로 근무하고 있습니다. 이 블로그는 개인적인 연구 목적으로 운영되며, Oracle 사의 공식 입장을 대변하지 않습니다.
  • 정희락
    TunA
    정희락
  • 전체
    오늘
    어제
    • 분류 전체보기 (199)
      • Oracle (171)
        • SQL (33)
        • PLSQL (10)
        • Performance (74)
        • Administration (37)
        • Installation (3)
        • Utilities (1)
        • JSON (8)
        • Vector (5)
      • Exadata (15)
      • SQL*Plus (2)
      • Linux (5)
      • Resources (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 도서

    • 불친절한 SQL 프로그래밍
    • 불친절한 PL/SQL 프로그래밍
  • 링크

    • Connor McDonald
    • Frits Hoogland
    • Jonathan Lewis
    • Julian Dontcheff
    • Julian Dyke
    • Kun Sun
    • Maria Colgan
    • Martin Bach
    • Mike Dietrich
    • Tanel Poder
  • 공지사항

  • 인기 글

  • 태그

    12c
    19c
    21c
    23ai
    case study
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
정희락
SCAN과 LOAD_BALANCE에 대한 접속 테스트
상단으로

티스토리툴바