일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- SQL
- oracle
- oracle install
- mariaDB
- fdisk
- MySQL
- perl one-liner
- prompt
- grid
- patch
- PERL
- dba
- 연산자
- Network
- solaris
- perl + 정규표현식
- 오라클
- RHEL4
- Oracle RAC
- command & perl
- Linux
- sqlplus
- Unix
- php5
- rac
- solaris network
- bash
- cygwin
- perl string
- memory
- Today
- Total
목록Data Architecture (82)
DATA 전문가로 가는 길
대용량 테이블에서 페이징 처리 시 맨 뒤쪽으로 갈수록 느려지는 현상을 보실 수 있습니다. 그러한 이유는 어느 순간까지는 인덱스를 활용해서 결과를 출력 가능 하지만, MySQL/MariaDB에서는 filesort가 발생하면서 성능 저하가 발생합니다. 옵티마이저는 정렬을 위해 인덱스 사용이 가능한지 확인하고, 가능하다면 'Filesort' 과정 없이 인덱스 순으로 결과를 반환하게 됩니다. 인덱스를 사용할 수 없다면 WHERE 조건에 일치하는 레코드를 검색해 정렬 버퍼에 저장하면서 정렬 처리(Filesort)를 합니다. Order by, Group By를 처리할 때 인덱스를 처리하지 못할 경우에는 filesort 알고리즘을 통해 정렬하게 됩니다. Data -> Sort Buffer -> Temp File ->..
MySQL/MariaDB에서는 UPDATE 실행 계획을 볼 수 없습니다. 그래서 UPDATE 문법을 SELECT 문법으로 변경해서 실행 계획을 확인해야 합니다. 주기적으로 수행(매 10초)하는 쿼리라서 최대한 Sending data를 줄이지 않으면 성능에 문제가 발생할 수 있었습니다. 개발자가 작성한 쿼리를 튜닝한 사례입니다. 아래는 EST_DB_SVC_CPS 테이블의 인덱스 정보입니다. Primary Key : EST_NO, EST_SVC_NO Non Unique Index : CONN_TEST_TASK_UPDT_DTTM 1. 원본 쿼리 1.1. 실행 계획 해석 실행계획을 보면 "EST_DB_SVC_CPS" 테이블을 Table Full Scan 하고 있습니다.(type=ALL) 처음 조인하는 테이블에서..
MySQL/MariaDB에서 대용량 데이터를 이관하기 위해서 다양한 방법이 존재합니다. 저는 그중에서 전통적인 방식 CTAS와 mysqldump 유틸리티 그리고 INTO OUTFILE LOAD DATA LOCAL INFILE입니다. 대용량 데이터를 빠르게 이관할 때 유용하게 사용 가능합니다. 다만, 서비스를 운영하는 시점에 적용하는 게 아니라 점검 시간이나 다운타임이 발생할 때 가능합니다. 1. 테스트 환경 OS : CentOS 7.5(CPU : Intel(R) Xeon(R) CPU E3-1220 v3 @ 3.10GHz(4 core), Memory : 32GB) DB : MariaDB 10.3.8 Parameter : innodb_buffer_pool_size =15G innodb_flush_log_at..
1. Auto increment 란? 테이블 컬럼에 auto_increment를 설정하게 되면, 데이터가 삽입 되는 순간 자동으로 증가 됩니다. 데이터 타입은 INT, BIGINT를 주로 많이 사용 합니다. InnoDB 엔진의 경우 Primary Key 생성과 동시에 인덱스 사이즈에 영향을 주기 때문에 테이블 설계시 많이 권고 하는 방법 입니다. MySQL 5.7 이전 버전에서는 MyISAM 엔진의 경우 auto_increment 값이 파일에 저장 해서 관리 되는 반면, InnoDB 인젠의 경우 메모리 기반으로 관리 됩니다. MySQL 8.0 에서는 InnoDB 엔진의 테이블 정보 저장 공간에 auto_increment 카운터 정보를 보관 합니다. 주로 많이 활용되는 방법은 PK + auto_increm..
1. Primary Key 란 Primary Key는 데이터베이스 행을 고유하게 식별할 수 있는 습니다. 테이블 단일 컬럼으로 식별할 수 있고, 복합 컬럼으로 식별할 수 있는데 성능적으로는 단일 컬럼으로 생성해야 Clustered Index를 견고하게 사용 가능합니다. 또한 NULL을 허용하지 않으며, 데이터에 대한 일관성을 보장합니다. 데이터 중복이 발생하지 않아 빠르게 쿼리를 수행 가능합니다. InnoDB engine기준으로 Primary Key는 항상 Clustered Index이며, Primary Key가 존재하지 않을 경우 Unique Key(Unique Index)를 선택하게 됩니다. 후보가 없을 경우 Auto_Increment 속성의 컬럼을 활용하게 되는데 이는 테이블에 Primary Key..
1. 인덱스란? 인덱스는 테이블 또는 View에서 행을 가져오는 속도를 높이기 위해서 데이터베이스의 하나 이상의 열에서 작성된 키입니다. 이는 Oracle, SQL Server, MySQL, MariaDB 등과 같은 데이터베이스가 키 값과 관련된 행을 신속하게 찾을 수 있도록 합니다. Clustered Index, Non-Clustered Index 두 가지 형태로 나눠지게 됩니다. MySQL/MariaDB에서 Clustered Index를 사용할 수 있는 엔진은 InnoDB 뿐입니다. MyISAM, Memory, Archive NDB 엔진은 사용할 수 없습니다. InnoDB Buffer Pool 메모리에 존재하지 않을 경우 디스크에서 페이지를 가져오게 됩니다. 한번 가져온 페이지는 대부분은 InnoDB..
오라클 문법중에서 컬럼 사이즈 변경 할 때 "ALTER TABLE 테이블명 MODIFY (컬럼명 VARCHAR2(128))" 명령어로 변경 하게 됩니다. 일반적인 상황에서는 문제 없이 변경이 가능 하지만, 함수 기반 인덱스로 활용된 경우에는 아래와 같은 에러가 발생 합니다. 1. ORA Error - EST_TABLE 테이블의 EST_TABLE_IDX02는 함수기반 인덱스는 "LOWER("USER_NM")"으로 되어있어서 일반적인 컬럼 속성 변경할 때 문제가 발생 할 수 있습니다. 에러는 아래를 참고 바랍니다. /* SQL 쿼리 수행 */ ALTER TABLE EST_TABLE MODIFY USER_NM VARCHAR2(128); /* SQL 쿼리 수행 후 에러 메시지 */ -- ORA-30556: ei..
오라클을 구축 후 운영단계에서 퍼포먼스 튜닝을 진행해야 합니다. Oracle 11g 이상 또는 Single 설치에서만 진행 하시기 바라며, 파라미터는 반드시 백업 받고 진행 해주시기 바랍니다. 파라미터 적용 시 DB 종료가 필요하니 DB 종료 가능 여부도 같이 확인 하시기 바랍니다. 1. 주요 변경 사항 audit_trail - 주로 감사(Audition)에서 활용되며, 데이터베이스 작업을 모니터링, 기록을 수집하는 기능입니다. - 모든 추척 내용을 감사 로그로 기록하기 때문에 시스템의 속도를 저하 시킵니다. processes - 프로세스를 변경하기 위해서 일반적으로 "processes" 파라미터 값을 변경 합니다. - 프로세스는 기본적으로 150으로 되어있지만, 운영 하다보면 점점 늘어나기 때문에 표준..