Function Offloading
본 장에서는 ZetaData의 주요 기능인 Function Offloading에 대해 설명합니다.
개요
Storage 노드를 사용하지 않는 TAC(Tibero Active Cluster) 구성에서 많은 양의 I/O를 수행하게 되면, SAN 스위치의 대역폭 한계에 의해 SAN 스위치에서 병목 현상이 발생합니다. ZetaData에서는 이와 같은 문제를 해결하기 위해 SAN 스위치 대신 고대역폭의 InfiniBand를 사용하고 있습니다. 하지만 여전히 네트워크를 통해 많은 양의 데이터를 전송해야 한다는 점은 바뀌지 않습니다.
ZetaData의 Function Offloading 기능은 기존에 TAC 인스턴스에서 수행하던 로우 필터링(filtering)이나 컬 럼 필터링(projection) 등과 같은 작업들을 SSVR 인스턴스로 이전(offload)해서 수행함으로써, 네트워크를 통해 전송되는 데이터의 양을 현저히 감소시키는 역할을 합니다.
뿐만 아니라 DB 노드의 CPU 자원보다 상대적으로 사용률이 적은 Storage 노드의 CPU 자원을 이용할 수 있도록, 압축 해제와 같이 CPU 자원을 많이 사용하는 작업 또한 SSVR 인스턴스로 이전하여 수행할 수 있습니다.
동작 방식
Function Offloading은 기본적으로 Table Full Scan 형태로 데이터를 조회하는 경우에만 동작합니다.
Function Offloading 기능이 네트워크를 통한 데이터의 전송량을 줄이는 목적으로 만들어졌기 때문에 인덱스를 이용한 테이블 조회와 같이 I/O의 양이 많지 않은 경우에는 기능이 동작하지 않습니다.
ZetaData 구성에서 대용량의 데이터를 저장할 때 인덱스를 생성하지 않는 것이 해당 기능의 효과를 높이는데 중요합니다. 불가피하게 인덱스가 생성되어 있는 컬럼을 WHERE 절에 포함하여 데이터를 조회하는 경우에는 쿼리에 Full Scan 힌트(/*+full_storage(t1)*/)를 부여하여 인덱스를 통한 조회를 피할 수 있습니다. 반대로 Function Offloading을 사용하지 않고자 할 때에는 힌트(/*+no_full_storage(t1)*/)로 강제할 수 있습니다. 다른 제약 사항으로는 별도의 LOB 세그먼트에 저장되는 LOB 컬럼에 대해서는 해당 기능을 사용할 수 없다는 점이 있습니다.
Function Offloading 기능은 많은 데이터가 WHERE 절 처리 단계에서 걸러질 수 있는 경우에 큰 효과를 보입니다. TAC 인스턴스로 전송해야 하는 데이터의 양이 SSVR 인스턴스의 작업을 통해 많이 줄어들 수 있기 때문입니다.
또한 SSVR 인스턴스 내에서 Prefetch 관리를 하기 때문에 기능을 사용하지 않는 블록 요청 대비 I/O가 효율적으로 진행됩니다. 하지만 SSVR 인스턴스는 TAC 인스턴스의 버퍼 캐시 위에서 일어난 수정 작업에 대해서 알 수 없기 때문에 빈번한 수정작업이 일어나는 테이블에 대해서는 SSVR 인스턴스가 처리하지 못합니다. 즉, OLTP 작업에서는 이 기능의 효과가 미미합니다.
Function Offloading 기능을 통해 조회하는 테이블에 대한 데이터는 TAC 인스턴스의 버퍼 캐시에 보관되지 않을 수 있습니다. 이는 SSVR 인스턴스에서 1차 가공된 형태로 TAC 인스턴스에 전달된 경우에는 데이터 블록의 형태로 전달되지 않기 때문입니다. 같은 이유로 버퍼 캐시에 모든 데이터를 적재할 수 없을 정도로 양이 많은 테이블에 대한 작업 시에 기능의 효과가 크게 나타납니다.
반대로 조회하려는 데이터가 버퍼 캐시에 충분히 저장할 정도로 작거나 해당 데이터에 대한 조회와 수정이 빈번하게 일어나 이미 버퍼 캐시에 적 재돼 있음을 기대하는 경우에는 기능을 사용하지 않도록 합니다.
IB를 사용하지 않고 ZetaData를 TCP로 구성하는 경우에는, Function Offloading의 결과가 TCP 를 통해 전달되어 SGA에 임시 보관해야 하기 때문에 충분한 SGA가 확보되어야 합니다. TAC 인스턴스에서는 한 번에 SSVR 인스턴스의 그리드 디스크(Grid Disk) 개수 만큼 I/O 를 요청하므로 기능을 사용하지 않을 때 보다 훨씬 많은 SGA 공간을 사용하기 때문입니다. SGA에 대한 TAC 인스턴스 설정은 Tibero의 설정을 참고합니다.
초기화 파라미터
다음은 Function Offloading 기능과 관련한 초기화 파라미터에 대한 설명입니다.
STORAGE_PROCESSING
Function Offloading 기능 사용해서 데이터를 읽을지 여부를 지정하 는 DB 인스턴스의 세션 파라미터입니다.
쿼리 수행 전 "Y" 또는 "N"으로 설정해 수행하는 쿼리별로 해당 기능의 동작 여부를 지정합니다. (기본값: USE_ZETA=Y인 경우만 Y)
함수
다음은 Function Offloading 기능이 지원되는 함수들의 목록입니다.
ABS, ADD_MONTHS, ASCII, ASCIISTR, BETWEEN, BITAND, CASE, CEIL, CHR, COALESCE, DECODE, DUMP, EXP, EXTRACT, FLOOR, FROM_TZ
HEXTORAW, INITCAP, INSTR, INSTRB, ISSEQUENCEWORDS,
LAST_DAY, LENGTH, LENGTHB, LENGTHC, LIKE, LNNVL, LOG, LOWER, LPAD, LTRIM, MOD, MONTHS_BETWEEN, NEW_TIME, NEXT_DAY, NULLIF, NUMTODSINTERVAL, NUMTOYMINTERVAL, NVL, NVL2, OVERLAPS, RAWTOHEX, REVERSE, ROUND, ROWIDTOCHAR,
RPAD, RTRIM, SIGN, SQRT, SUBSTR, SUBSTRB, SYS_EXTRACT_UTC,
TO_CHAR(Lob 타입은 지원하지 않음), TO_DATE, TO_DSINTERVAL, TO_MULTI_BYTE, TO_NCHAR, TO_NUMBER, TO_SINGLE_BYTE, TO_TIME, TO_TIMESTAMP, TO_TIMESTAMP_TZ, TO_YMINTERVAL, TRANSLATE, TRIM, TRUNC, UPPER, VSIZE
제약 사항 : TO_CHAR 함수는 입력데이터로 lob 타입을 지원하지 않습니다.
Last updated