본문 바로가기

전체 글262

MySQL 성능분석도구 이야기 개요 데이터베이스에 있어서 성능은 포기할 수 없는 부분이다. 아무리 사용하기 편리하고 기능이 많더라도 성능이 나오지 않는 데이터베이스는 현업에서 절대 쓰여질 수 없다. 만족스런 성능의 기준은 DBMS 가 사용되는 시스템의 인입 부하량에 따라 많이 다를 것이다. 어떤 시스템의 경우는 MySQL 의 기본 설정만으로도 충분히 성능 요구치를 만족할 수 있을 것이고, 어떤 시스템은 장시간에 걸친 튜닝 노력을 통해서만 달성할 수 있는 성능수치를 요구할 수도 있다. 때에 따라서는 Disk DBMS 의 성능 최대치로도 부족하여 In-Memory RDBMS 도입을 고려할 수도 있고, Relational DBMS 의 ACID 를 다 만족시키지 않아도 좋으니 그 이상의 극한 성능을 바란다면 적합한 NoSQL 제품을 고려할 .. 2024. 2. 14.
MySQL Replication 복구 얼마전 회사 DB서버의 Replication이 깨지는 바람에 복구하게 됐다. 실제 운영중인 서버를 다운 시키고 백업 받을수는 없었기 때문에 최단시간동안 Write Lock을 걸고 백업을 받은 후 Write Lock을 해제하고 리플리케이션을 설정하는것이 관건 이었다. 그래서 다음과 같은 작업을 진행.. /usr/local/mysql/bin/mysqladmin -uroot -p flush-logs /usr/local/mysql/bin/mysqladmin -uroot -p -C "flush tables with read lock" /usr/local/mysql/bin/mysqldump --single-transaction --all-databases --extended-insert=FALSE -c -uroot.. 2024. 2. 14.
쉽게 이해할 수 있는 OLTP와 OLAP성 쿼리의 차이 OLTP(On-Line Transaction Processing) 다수의 이용자가 실시간으로 데이터를 갱신하거나 조회하는 경우 트랜잭션 단위로 작업을 처리하는 방식을 말합니다. 간단한 예시로 은행의 업무를 예로 A라는 사람 통장의 돈 5000원을 B라는 사람에게 이체하는 방식을 살펴봅시다 1. A의 통장에서 5000원이 감소 2. B의 통장에 5000원이 증가 3. 명세표를 출력 이렇게 동작할때 1,2,3이 하나의 단위 프로세스로 처리가 되어야한다는 것을 의미합니다. 이러한 일련의 과정을 하나의 트랜잭션으로 묶고 A의 통장에서 5000원이 감소하고 B의 통장에 5000원이 증가하기 전에 오류가 발생하게 되면 트랜잭션이 발생하기 전의 상황으로 돌아가게 되는 것입니다. OLAP(On-Line Analytic.. 2023. 6. 18.
성능 좋은 SQL 쿼리 작성법(차집합 NOT IN, CTE 재귀 호출 활용, 쿼리 힌트 사용 주의) 1. 차집합 구하기-NOT IN 사용주의 결과데이터 정합성 문제 OR 실행 계획 최적화 이슈 - NULL qksghksehlwl dksgehfhr cjfl - NOT EXISTS 또는 다른 차집합 구현 방법 고려 - NOT IN 필요 시 주의해서 사용 ex) WHERE ID NOT IN (SELECT ID FROM DATA WHERE ID IS NOT NULL) 2. CTE-재귀 호출(순환관계 모델) 처리에 활용 예) 조직구조, 메뉴 경로, BOM, etc. 복잡합 조건식/유형 - 쿼리 튜닝 필요 (사진참조) 3. 쿼리 힌트 사용 주의 OPTION() 옵티마이저 대신 쿼리 동작을 강제하는 방법 중의 하나 필요한 경우 DBA(or DPA/DA/전문가)검토 후 사용 ○ 특히 공통적으로 주의가 필요한 힌트 -.. 2023. 6. 18.
성능 좋은 SQL 쿼리 작성법(Subquery) 1. Flattened(Unnest subqueries) Join으로 변환후, Join으로서 처리 - 직접 Join 사용 경우와 차이 발생 가능(조인순서, 연산 방법 등의 차이 발생) 2. 언제 Subquery를 사용할까? ① Semi Join 한쪽 테이블만 SELECT 결과 집합으로 요구 다른 쪽 테이블은 데이터를 체크하는 선택(selection)연산만 수행 - Subquery로 작성해서 최적화 작업 ex) SELECT DISTINCT ID FROM DATA A INNER JOIN DAT B ON A.ID = B.ID => SELECT ID FROM DATA A WHERE EXISTS(SELECT * FROM DAT B WHERE B.ID = A.ID) ② TOP 절 등을 이용 결과 집합이 일부로 제한.. 2023. 6. 18.
성능 좋은 SQL 쿼리 작성법(JOIN) 1. OLTP 쿼리의 기본 - Nested Loops(중첩루프)Join 성능 이해 교환 법칙에 따라 INNER 조인은 조인순서와 상관없이 결과가 똑같다. Nested Loops은 첫번째 검색 테이블에서 값을 조회 하고 두번째 검색 테이블에서 동일한 값을 찾아서 반환한다. - 외부입력 : 검색행수가 더 적은 테이블이 - 첫번째 테이블 - 내부입력 : 조인하는 컬럼에 반드시 Index 사용(없으면 생성) SARG 준수 - 두번째 테이블 2. 조인 열 변형(사례 - 모델링 이슈) ex) SELECT * FROM C TNNER JOIN P ON C.index = CONVERT(varchr(100),P.ID) CONVERT함수 때문에 SARG 위반하여 index 사용이 불가하다. - 내부입력 조인테이블에 속한 컬.. 2023. 6. 17.