일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- PERL
- SQL
- bash
- rac
- php5
- fdisk
- mariaDB
- oracle install
- Linux
- RHEL4
- sqlplus
- Oracle RAC
- perl string
- MySQL
- patch
- perl one-liner
- Network
- prompt
- Unix
- grid
- dba
- cygwin
- solaris
- perl + 정규표현식
- solaris network
- oracle
- 오라클
- 연산자
- command & perl
- memory
- Today
- Total
목록Data Architecture/Tunning (11)
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) 처음 조인하는 테이블에서..
MariaDB에서 성능 테스트를 하기 위해서 Sysbench 오픈 소스이며, H/W(CPU, Memory, I/O), MySQL/MariaDB 등등 다양하고, 간단한 성능 테스트를 할 수 있으며, 그 중에서 대용량 데이터를 적재하는 방법을 활용해보도록 하겠습니다. 1. 테스트 환경 - OS : CentOS 7 - DB : mysql Ver 15.1 Distrib 10.2.7-MariaDB, for Linux (x86_64) using readline 5.1 - 부하 테스트 및 성능 분석 툴 : sysbench 1.0.6 2. Sysbench Install # Third-Party Yum Repos -> [root@manager /root]yum install http://dl.fedoraproject.o..
오라클 오브젝트 중에서 Procedure, Package, Function, Trigger가 존재하며, 그 중에서 Procedure와 Package를 기준으로 진행 하도록 하겠습니다. 동시성 제어를 하기 위한 방법으로, A 세션에서 Procedure를 실행하고, B 세션에서 같은 Procedure를 실행하려고 할 때 경고 메시지를 보내주면 좋을 것 같다는 생각에서 검토를 해보았습니다. 즉, 동시에 하나의 Procedure를 실행하려고 할 때 이미 실행 중인 Procedure라면 실핼 할 수 없도록 적절한 제어를 해주는 역할을 합니다. 1. DBMS_LOCK - 참고 URL : 바로가기 1.1. ALLOCATE_UNIQUE - 지정된 lockname에 Lock ID를 할당하는 프로시저 이며, Lock ID..
Oracle 11g 이상부터 Real-Time SQL Monitoring(v$sql_monitor, v$sql_plan_monitor) 기능을 사용할 수 있습니다. Oracle 11g에서 추가된 Real-Time SQL Monitoring 기능은 5초 이상인 모든 쿼리의 실행 이력 정보를 v$sql_monitor와 v$sql_plan_monitor 뷰에 남깁니다. 그리고 DBMS_SQLTUNE.REPORT_SQL_MONITOR 함수를 이용해서 정보를 조회 가능하도록 지원 됩니다. 1. Pack 항목 확인 Oracle Diagnostic Pack - AWR - ADDM - ASH - Performance Tuning - Event notifications - Event history and metric h..
오라클 옵티마이저가 수행할 때 제약 설정에 따라서 인덱스 사용/비사용 할 수 있습니다. 우리가 말하는 오라클 옵티마이저 행동 중에서 영향을 미치는 요소 중에 하나 입니다. /* EST_OBJECT 테이블의 OBJECT_NAME 컬럼에 OBJECT_TYPE이 INDEX가 아닌 나머지는 NULL로 처리 합니다. */ CREATE TABLE EST_OBJECT AS SELECT A.OWNER ,CASE WHEN A.OBJECT_TYPE = 'INDEX' THEN A.OBJECT_NAME ELSE NULL END AS OBJECT_NAME FROM DBA_OBJECTS A ; /* 인덱스 생성 */ CREATE INDEX EST_OBJECT_IDX01 ON EST_OBJECT ( OBJECT_NAME ); /*..
오라클은 수 많은 락 종류가 있습니다. 그 중에서 Blocking Lock은 Lock 경합이 발생해 특정 세션의 작업을 진행하지 못하게 멈춰 선 경우를 의미하며, 커밋 또는 롤백으로 해소가 가능 합니다. 아래와 같은 예시는 FOR UPDATE구문을 예시로 Execute 단계에서 묵시적 형 변환에 의해서 Blocking Session이 발생 하게 되는데 그것을 확인 하겠습니다. 세션 1 (V$SESSION.SID : 142) /* 세션 파라미터를 조정하여 실행계획과 데이터 버퍼를 초기화 합니다. */ alter session set session_cached_cursors = 10; alter system flush shared_pool; alter system flush buffer_cache; /* 테..
Parse Call을 제외하고 SQL 수행 중에 발생하는 Execute Call, Fetch Call을 줄이는 방법에 대해 설명하고, 데이터베이스 Call을 User Call과 Recursive Call로 나누어 각각을 최소화하는 원리와 방안에 대해서 설명 합니다. Call 통계 select * from emp; call count cpu elapsed disk query current rows ------- ------ -------- ---------- ---------- ---------- ---------- ---------- Parse 1 0.01 0.03 0 0 0 0 Execute 1 0.00 0.01 0 0 0 0 Fetch 2 0.00 0.00 0 8 0 14 ------- ------ ..