Oracle Database In-Memory Option - I (설명과 설정 방법)
Oracle Database In-Memory Option이란?
1. In-Memory 설정을 위해 inmemory_size 값 설정
2. 100M 이하 설정 제약
3. 테이블스페이스 레벨에서 In-Memory 설정
4. 테이블 레벨에서 In-Memory 옵션 설정
5. Column 레벨에서 In-Memory 옵션 설정
6. In-Memory 옵션의 Compression 속성 설정
Oracle Database In-Memory Option이란?
Oracle Database In-Memory는 전통적인 Row Format 방식에 Column Format 방식을 추가로 지원해 OLTP, DW 업무가 혼재된 시스템에서 트랜잭션 처리와, 데이터 분석 등의 모든 업무 프로세스를 지원한다. Oracle은 두가지 Format 사용을 Dual Format 지원이라고 이야기 한다. In-Memory 기능은 오라클 12.1.0.2 버전부터 사용이 가능하다.
기존 애플리케이션의 변경 없이 분석 쿼리와 OLTP 트랜잭션 처리 속도를 모두 높일 수 있다고 한다. 옵티마이저는 자동으로 분석 쿼리의 경우 Column Format으로 OLTP의 경우 Row Format으로 사용하게 하여 업무 프로세스를 빠르게 수행할 수 있도록 해 준다.
오라클은 Dual Format 아키텍처를 사용한다고 해서 필요로 하는 메모리가 두배로 늘어난 것이 아니라 약 20% 정도의 추가 사용할 것이라고 예상하고 있다.
1. Dual Format
A. Row Format
- Oracle database의 전통적인 방식으로 새로운 트랜잭션이나 레코드가 신규 Row 형태로 저장
- OLTP 환경에 적합한 형태임.
B. Column Format
- 트랜잭션이나 레코드의 각 컬럼을 별도 컬럼 구조에 저장.
- 분석 업무에 적합항며 적은 수의 컬럼과 많은 데이터 셋을 조회할 때 유리.
- DML 작업의 경우 변경 컬럼이 다수개일 경우 각 컬럼에 대응하는 컬럼 구조에 변경을 해야하기 때문에 적합치 않음.
2. In-Memory Column Store(IM Column Store)
- 트랜잭션이나 레코드의 각 컬럼을 별도 컬럼 구조로 저장하는 메모리 영역을 말함.
- SGA 내 In-Memory Area로 일컫어 지는 새로운 구성요소임.
- Buffer Cache를 대체하는 것이 아니라, Row Format과 Column Format을 저장할 수 있도록 보조해 주는 역할을 함.
- Static Pool이며 Static Parameter INMEMORY_SIZE 초기화 파라미터로 설정하며 재시작을 해야 변경값이 적용됨.
- Static Pool이기 때문에 AMM(Automatic Memory Management, 즉 MEMORY_TARGET 값에 영향을 받지 않음.
- 최소 100M 이상의 값을 가져야 함
- In-Memory Area는 1M(IMCU Pool), 64K(SMU Pool) Pool로 나뉨(각 Pool 크기는 내부적으로 설정됨)
- 1M Pool => Column Format의 실제 Data, 64K Pool => Object에 대한 Metadata
- In-Memory Advisor을 이용하여 적정 사이즈를 산정할 수 있음.
In-Memory 설정 방법
파라미터 설정
INMEMORY_SIZE
Property | Description |
---|---|
Parameter type | Big integer |
Syntax | INMEMORY_SIZE = integer[K|M|G] |
Default value | 0 |
Modifiable | ALTER SYSTEM |
Range of values | 0 to the amount of memory left in the SGA after other allocations |
Basic | No |
Oracle RAC | All instances should use the same value. |
- In-Memory Column Store(IM Column Store) 크기를 설정
- Default 값은 0 이며 이는 In-Memory Option을 사용하지 않는다는 걸 의미함(최소 100M 이상이어야 함).
- Static Parameter 이므로 적용하려면 재시작해야 함.
- 최소 IM Column Store에 Column Format으로 사용할 대상 테이블의 합보다 커야하며 대상 테이블의 사이즈 증가도 고려해야 함.
- PDB 별로 IM Column Size 최대값을 제한하기 우해 PDF 별로 값을 설정할 수 있음.
- 각 PDB의 값의 합이 CDB 값과 같을 필요는 없으며 클수도 있음.
- PDB에 값이 설정되어 있지 않다면 CDB 설정 값을 상속 받으며 PDB 하나에서 모든 값을 다 사용할 수도 있음.
- IM Column Store는 IMCU(In-Memory Compression Units)로 구성된다.
In-Memory 옵션의 Priority 속성
Priority 값에 따라서 IM Column Store에 Load 되는 시점이 결정된다.
Priority | Description |
---|---|
CRITICAL | DB가 Open 되자 마자 IM Column Store에 Load 됨 |
HIGH | CRITICAL 옵션의 Object가 Load 되고 난 후 남아 있는 공간에 Load 됨 |
MEDIUM | CRITICAL, HIGH 옵션의 Object가 Load 되고 난 후 남아 있는 공간에 Load 됨 |
LOW | CRITICAL, HIGH, MEDIUM 옵션의 Object가 Load 되고 난 후 남아 있는 공간에 Load 됨 |
NONE | IM Column Store에 공간이 남아 있는 경우 Object가 최초 스캔된 후 Load 됨 |
제약사항(IM Column Store에 Load 되지 못함)
- SYS 소유의 Object 이거나 SYSTEM, SYSAUX 테이블스페이스에 저장된 Object
- IOT
- Cluster 테이블
- LONG 데이터 타입 컬럼
- 별도 저장된 LOB
- 64K 보다 작은 사이즈의 테이블(1M chunk의 낭비를 막기 위함)
In-Memory 옵션의 Compression 속성
쿼리의 성능과 공간 절약을 위해 사용 가능한 속성임
압축 비율은 최소 2배에서 최대 20배까지 될 수 있다고 함
Compression Level | Description |
---|---|
NO MEMCOMPRESS | 압축하지 않음 |
MEMCOMPRESS FOR DML | DML 성능에 최적화를 위한 최소 압축 |
MEMCOMPRESS FOR QUERY LOW | 기본값이며 쿼리 성능에 최적화를 위한 압축 |
MEMCOMPRESS FOR QUERY HIGH | 공간 절약과 쿼리 성능에 최적화를 위한 압축 |
MEMCOMPRESS FOR CAPACITY LOW | 공간 절약과 성능 중 공간 절약을 다소 상위에 둔 압축 |
MEMCOMPRESS FOR CAPACITY HIGH | 공간 절약 최적화를 위한 압축 |
Test
1. In-Memory 설정을 위해 inmemory_size 값 설정
-- default로 설정되어 있지 않음 SQL> show parameter inmemory NAME TYPE VALUE ------------------------------------------- ----------- -------- inmemory_clause_default string inmemory_force string DEFAULT inmemory_max_populate_servers integer 0 inmemory_query string ENABLE inmemory_size big integer 0 inmemory_trickle_repopulate_servers_percent integer 1 optimizer_inmemory_aware boolean TRUE -- Static 파라미터 여부 확인 SQL> ALTER SYSTEM SET INMEMORY_SIZE = 500M SCOPE=BOTH; ALTER SYSTEM SET INMEMORY_SIZE = 500M SCOPE=BOTH * 1행에 오류: ORA-02097: 지정된 값이 부적당해서 매개변수를 수정할 수 없습니다 ORA-02095: 지정된 초기화 매개변수를 수정할 수 없습니다 SQL> ALTER SYSTEM SET INMEMORY_SIZE = 500M SCOPE=SPFILE; 시스템이 변경되었습니다. -- 재시작 필요 SQL> SHUTDOWN IMMEDIATE 데이터베이스가 닫혔습니다. 데이터베이스가 마운트 해제되었습니다. ORACLE 인스턴스가 종료되었습니다. SQL> STARTUP ORACLE 인스턴스가 시작되었습니다. Total System Global Area 3221225472 bytes Fixed Size 3050800 bytes Variable Size 1241514704 bytes Database Buffers 1426063360 bytes Redo Buffers 13725696 bytes In-Memory Area 536870912 bytes 데이터베이스가 마운트되었습니다. 데이터베이스가 열렸습니다. SQL> SHOW PARAMETER INMEMORY NAME TYPE VALUE ------------------------------------------- ----------- --------- inmemory_clause_default string inmemory_force string DEFAULT inmemory_max_populate_servers integer 2 inmemory_query string ENABLE inmemory_size big integer 512M inmemory_trickle_repopulate_servers_percent integer 1 optimizer_inmemory_aware boolean TRUE SQL> SHOW SGA Total System Global Area 3221225472 bytes Fixed Size 3050800 bytes Variable Size 1124074192 bytes Database Buffers 1543503872 bytes Redo Buffers 13725696 bytes In-Memory Area 536870912 bytes -- Container, Seed, PDB에 설정된 모습 SQL> SELECT A.POOL, A.ALLOC_BYTES, A.USED_BYTES, A.POPULATE_STATUS, A.CON_ID, B.NAME 2 FROM V$INMEMORY_AREA A, V$CONTAINERS B 3 WHERE A.CON_ID = B.CON_ID; POOL ALLOC_BYTES USED_BYTES POPULATE_STATUS CON_ID NAME ---------- ----------- ---------- ---------------- ------ --------- 1MB POOL 418381824 0 DONE 1 CDB$ROOT 64KB POOL 100663296 0 DONE 1 CDB$ROOT 1MB POOL 418381824 0 DONE 2 PDB$SEED 64KB POOL 100663296 0 DONE 2 PDB$SEED 1MB POOL 418381824 0 DONE 3 PDBORCL 64KB POOL 100663296 0 DONE 3 PDBORCL 6 행이 선택되었습니다. SQL> SELECT * FROM V$SGA; NAME VALUE CON_ID -------------------- ---------- ---------- Fixed Size 3050800 0 Variable Size 1124074192 0 Database Buffers 1543503872 0 Redo Buffers 13725696 0 In-Memory Area 536870912 0 SQL> SELECT CON_ID, NAME, VALUE FROM V$SGA; CON_ID NAME VALUE ---------- -------------------- ---------- 0 Fixed Size 3050800 0 Variable Size 1124074192 0 Database Buffers 1543503872 0 Redo Buffers 13725696 0 In-Memory Area 536870912
2. 100M 이하 설정 제약
-- 100M 이하 세팅 테스트 SQL> ALTER SYSTEM SET INMEMORY_SIZE = 50M SCOPE=SPFILE; 시스템이 변경되었습니다. SQL> shutdown immediate 데이터베이스가 닫혔습니다. 데이터베이스가 마운트 해제되었습니다. ORACLE 인스턴스가 종료되었습니다. SQL> startup ORA-64353: in-memory area size cannot be less than 100MB SQL> CREATE PFILE FROM SPFILE; 파일이 생성되었습니다. SQL> CREATE SPFILE FROM PFILE; 파일이 생성되었습니다. SQL> startup ORACLE 인스턴스가 시작되었습니다. Total System Global Area 3221225472 bytes Fixed Size 3050800 bytes Variable Size 1241514704 bytes Database Buffers 1426063360 bytes Redo Buffers 13725696 bytes In-Memory Area 536870912 bytes 데이터베이스가 마운트되었습니다. 데이터베이스가 열렸습니다. SQL> ALTER SESSION SET CONTAINER = PDBORCL; 세션이 변경되었습니다. SQL> SELECT SYS_CONTEXT ('USERENV', 'CON_NAME') FROM DUAL; SYS_CONTEXT('USERENV','CON_NAME') ---------------------------------------- PDBORCL SQL> show sga Total System Global Area 3221225472 bytes Fixed Size 3050800 bytes Variable Size 1124074192 bytes Database Buffers 1543503872 bytes Redo Buffers 13725696 bytes In-Memory Area 536870912 bytes SQL> select * from v$inmemory_area; POOL ALLOC_BYTES USED_BYTES POPULATE_STATUS CON_ID -------------------------- ----------- ---------- -------------------------- ---------- 1MB POOL 418381824 0 DONE 3 64KB POOL 100663296 0 DONE 3 SQL>
3. 테이블스페이스 레벨에서 In-Memory 설정
--테스트 DB의 PDB가 OPEN 되어 있지 않아 OPEN 해줌 SQL> alter pluggable database open; 플러그인할 수 있는 데이터베이스가 변경되었습니다. -- In-Memory 옵션의 테이블스페이스 생성 SQL> CREATE TABLESPACE INMEMORY_TEST DEFAULT INMEMORY 2 DATAFILE 'I:\APP\ORACLETEST\ORADATA\ORCL\ORCL\PDBORCL\INMEMORY_TEST.DBF' SIZE 200M; 테이블스페이스가 생성되었습니다. SQL> CREATE USER IMTEST IDENTIFIED BY "imtest" 2 DEFAULT TABLESPACE INMEMORY_TEST 3 TEMPORARY TABLESPACE TEMP 4 QUOTA UNLIMITED ON INMEMORY_TEST 5 ACCOUNT UNLOCK; 사용자가 생성되었습니다. SQL> GRANT DBA TO IMTEST; 권한이 부여되었습니다. SQL> CREATE USER IMTEST IDENTIFIED BY "imtest" 2 DEFAULT TABLESPACE INMEMORY_TEST 3 TEMPORARY TABLESPACE TEMP 4 QUOTA UNLIMITED ON INMEMORY_TEST 5 ACCOUNT UNLOCK; 사용자가 생성되었습니다. SQL> GRANT DBA TO IMTEST; 권한이 부여되었습니다. SQL> CONN IMTEST/imtest@PDBORCL 연결되었습니다. -- In-Memory 설정의 테이블스페이스인 INMEMORY_TEST에 테이블 생성 SQL> CREATE TABLE IM_TBS_LVL_CREATE 2 TABLESPACE INMEMORY_TEST 3 AS 4 SELECT * FROM DBA_OBJECTS; 테이블이 생성되었습니다. -- In-Memory Area에 바로 Load 되는지 확인 SQL> SELECT * FROM V$INMEMORY_AREA; POOL ALLOC_BYTES USED_BYTES POPULATE_STATUS CON_ID -------------------------- ----------- ---------- -------------------------- ---------- 1MB POOL 418381824 0 DONE 3 64KB POOL 100663296 0 DONE 3 -- Load 되어 있지 않아 Load 시키기 위해 테이블 조회함 SQL> SELECT COUNT(*) FROM IM_TBS_LVL_CREATE; COUNT(*) ---------- 91821 -- 다시 In-Memory Area에 Load 되어 있는지 여부 확인 SQL> SELECT * FROM V$INMEMORY_AREA; POOL ALLOC_BYTES USED_BYTES POPULATE_STATUS CON_ID -------------------------- ----------- ---------- -------------------------- ---------- 1MB POOL 418381824 4194304 DONE 3 64KB POOL 100663296 131072 DONE 3 -- Load 되어 있는 것을 확인하고 왜 그렇게 되었는지 확인 -- default로 INMEMORY_PRIORITY가 NONE로 되어 있기 때문에 최초 Object가 -- 스캔될 때 Load 됨 SQL> COL TABLE_NAME FOR A20 SQL> SELECT TABLE_NAME, INMEMORY, INMEMORY_PRIORITY 2 FROM USER_TABLES 3 WHERE TABLE_NAME = 'IM_TBS_LVL_CREATE'; TABLE_NAME INMEMORY INMEMORY_PRIORITY -------------------- -------- ----------------- IM_TBS_LVL_CREATE ENABLED NONE SQL>
4. 테이블 레벨에서 In-Memory 옵션 설정
-- 일반 테이블을 만들경우 In-Memory 영역에 Load 되지 않으며 영향이 없음 SQL> CREATE TABLE IMTEST.SALES 2 TABLESPACE USERS 3 AS 4 SELECT * FROM SH.SALES; 테이블이 생성되었습니다. SQL> SELECT COUNT(*) FROM SALES; COUNT(*) ---------- 918843 SQL> SELECT * FROM V$INMEMORY_AREA; POOL ALLOC_BYTES USED_BYTES POPULATE_STATUS CON_ID -------------------------- ----------- ---------- -------------------------- ---------- 1MB POOL 418381824 4194304 DONE 3 64KB POOL 100663296 131072 DONE 3 -- 테이블 레벨에서 In-Memory 옵션 설정함 SQL> ALTER TABLE IMTEST.SALES INMEMORY; 테이블이 변경되었습니다. -- 일반 테이블을 In-Memory 옵션으로 변경해도 바로 Load 되지 않음 SQL> SELECT * FROM V$INMEMORY_AREA; POOL ALLOC_BYTES USED_BYTES POPULATE_STATUS CON_ID -------------------------- ----------- ---------- -------------------------- ---------- 1MB POOL 418381824 4194304 DONE 3 64KB POOL 100663296 131072 DONE 3 -- Scan 발생후 Load 됨 SQL> SELECT COUNT(*) FROM SALES; COUNT(*) ---------- 918843 SQL> SELECT * FROM V$INMEMORY_AREA; POOL ALLOC_BYTES USED_BYTES POPULATE_STATUS CON_ID -------------------------- ----------- ---------- -------------------------- ---------- 1MB POOL 418381824 11534336 DONE 3 64KB POOL 100663296 327680 DONE 3 -- In-Memory Area에 Load 된 Object 리스트 확인 SQL> COL OWNER FOR A10 SQL> COL SEGMENT_NAME FOR A20 SQL> SELECT OWNER, SEGMENT_NAME, BYTES, BYTES/INMEMORY_SIZE COM_RATIO 2 FROM V$IM_SEGMENTS; OWNER SEGMENT_NAME BYTES COM_RATIO ---------- -------------------- ---------- ---------- IMTEST IM_TBS_LVL_CREATE 13631488 3.15151515 IMTEST SALES 37748736 5.00869565
5. Column 레벨에서 In-Memory 옵션 설정
-- Column 레벨로 In-Memory 옵션 설정 사항 확인 SQL> SELECT OWNER, TABLE_NAME, COLUMN_NAME, INMEMORY_COMPRESSION 2 FROM V$IM_COLUMN_LEVEL; 선택된 레코드가 없습니다. -- Column 레벨에서 In-Memory 옵션 제외 대상 컬럼을 제외해줌 SQL> ALTER TABLE SALES NO INMEMORY(PROD_ID, AMOUNT_SOLD, CHANNEL_ID); 테이블이 변경되었습니다. SQL> SELECT * FROM V$INMEMORY_AREA; POOL ALLOC_BYTES USED_BYTES POPULATE_STATUS CON_ID -------------------------- ----------- ---------- -------------------------- ---------- 1MB POOL 418381824 11534336 DONE 3 64KB POOL 100663296 327680 DONE 3 -- Column 레벨로 In-Memory 옵션 설정 사항 확인 SQL> COL OWNER FOR A10 SQL> COL SEGMENT_NAME FOR A20 SQL> SELECT OWNER, TABLE_NAME, COLUMN_NAME, INMEMORY_COMPRESSION 2 FROM V$IM_COLUMN_LEVEL; OWNER TABLE_NAME COLUMN_NAME INMEMORY_COMPRESSION ---------- -------------------- ------------------------------- -------------------------- IMTEST SALES PROD_ID NO INMEMORY IMTEST SALES CUST_ID DEFAULT IMTEST SALES TIME_ID DEFAULT IMTEST SALES CHANNEL_ID NO INMEMORY IMTEST SALES PROMO_ID DEFAULT IMTEST SALES QUANTITY_SOLD DEFAULT IMTEST SALES AMOUNT_SOLD NO INMEMORY 7 행이 선택되었습니다. SQL>
참고) Column 레벨로 In-Memory 옵션을 지정할려고 했을 때 제외 방식이 아닌 경우 에러 발생함
SQL> CREATE TABLE IMTEST.SALES 2 TABLESPACE USERS 3 AS 4 SELECT * FROM SH.SALES; 테이블이 생성되었습니다. SQL> ALTER TABLE SALES INMEMORY(PROD_ID); ALTER TABLE SALES INMEMORY(PROD_ID) * 1행에 오류: ORA-64361: 열 INMEMORY 절은 인메모리 테이블에 대해서만 지정할 수 있습니다. SQL> ALTER TABLE SALES INMEMORY NO INMEMORY(PROD_ID, AMOUNT_SOLD, CHANNEL_ID); 테이블이 변경되었습니다. SQL>
6. In-Memory 옵션의 Compression 속성 설정
-- 각 Compression Level 별로 테이블 생성 SQL> CREATE TABLE IM_COMPRESS_TEST1 2 TABLESPACE INMEMORY_TEST 3 INMEMORY NO MEMCOMPRESS 4 AS 5 SELECT * FROM DBA_OBJECTS; 테이블이 생성되었습니다. SQL> CREATE TABLE IM_COMPRESS_TEST2 2 TABLESPACE INMEMORY_TEST 3 INMEMORY MEMCOMPRESS FOR DML 4 AS 5 SELECT * FROM DBA_OBJECTS; 테이블이 생성되었습니다. SQL> CREATE TABLE IM_COMPRESS_TEST3 2 TABLESPACE INMEMORY_TEST 3 INMEMORY MEMCOMPRESS FOR QUERY LOW 4 AS 5 SELECT * FROM DBA_OBJECTS; 테이블이 생성되었습니다. SQL> CREATE TABLE IM_COMPRESS_TEST4 2 TABLESPACE INMEMORY_TEST 3 INMEMORY MEMCOMPRESS FOR QUERY HIGH 4 AS 5 SELECT * FROM DBA_OBJECTS; 테이블이 생성되었습니다. SQL> CREATE TABLE IM_COMPRESS_TEST5 2 TABLESPACE INMEMORY_TEST 3 INMEMORY MEMCOMPRESS FOR CAPACITY LOW 4 AS 5 SELECT * FROM DBA_OBJECTS; 테이블이 생성되었습니다. SQL> CREATE TABLE IM_COMPRESS_TEST6 2 TABLESPACE INMEMORY_TEST 3 INMEMORY MEMCOMPRESS FOR CAPACITY HIGH 4 AS 5 SELECT * FROM DBA_OBJECTS; 테이블이 생성되었습니다. -- In-Memory Area Load를 위해 조회함 SQL> SELECT COUNT(*) CNT FROM IM_COMPRESS_TEST1 UNION ALL 2 SELECT COUNT(*) FROM IM_COMPRESS_TEST2 UNION ALL 3 SELECT COUNT(*) FROM IM_COMPRESS_TEST3 UNION ALL 4 SELECT COUNT(*) FROM IM_COMPRESS_TEST4 UNION ALL 5 SELECT COUNT(*) FROM IM_COMPRESS_TEST5 UNION ALL 6 SELECT COUNT(*) FROM IM_COMPRESS_TEST6; CNT ---------- 91823 91824 91825 91826 91827 91828 6 행이 선택되었습니다. -- 압축 비율과 사이즈를 확인함 SQL> select owner, segment_name, bytes, bytes/inmemory_size com_ratio 2 from v$im_segments 3 order by segment_name; OWNER SEGMENT_NAME BYTES COM_RATIO ---------- -------------------- ---------- ---------- IN_TEST IM_COMPRESS_TEST1 13631488 1.16853933 IN_TEST IM_COMPRESS_TEST2 13631488 1.28395062 IN_TEST IM_COMPRESS_TEST3 13631488 3.15151515 IN_TEST IM_COMPRESS_TEST4 13631488 4.16 IN_TEST IM_COMPRESS_TEST5 13631488 6.11764706 IN_TEST IM_COMPRESS_TEST6 13631488 6.11764706 IN_TEST IM_TBS_LVL_CREATE 13631488 3.15151515 IN_TEST SALES 37748736 5.00869565 8 행이 선택되었습니다. -- Compression Level을 확인 SQL> select table_name, inmemory, inmemory_priority, inmemory_compression 2 from user_tables 3 order by table_name; TABLE_NAME INMEMORY INMEMORY INMEMORY_COMPRESS -------------------- -------- -------- ----------------- IM_COMPRESS_TEST1 ENABLED NONE NO MEMCOMPRESS IM_COMPRESS_TEST2 ENABLED NONE FOR DML IM_COMPRESS_TEST3 ENABLED NONE FOR QUERY LOW IM_COMPRESS_TEST4 ENABLED NONE FOR QUERY HIGH IM_COMPRESS_TEST5 ENABLED NONE FOR CAPACITY LOW IM_COMPRESS_TEST6 ENABLED NONE FOR CAPACITY HIGH IM_TBS_LVL_CREATE ENABLED CRITICAL FOR QUERY LOW SALES ENABLED NONE FOR QUERY LOW 8 행이 선택되었습니다. SQL>
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
2 | 12.1 ]MAX_STRING_SIZE 기능을 활용 [1] | 우뽕 | 2020.02.25 | 9882 |
» | Oracle Database In-Memory Option –I (설명과 설정방법) | 명품관 | 2016.01.20 | 8502 |