부하 테스트 환경에서는 로드 밸런싱 관점에서 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