전체 글 84

[MariaDB][성능] LEFT OUTER JOIN과 스칼라 서브쿼리 실행계획 비교2

[테스트 환경] OS : CentOS7 DB : MariaDB 10.1.12 1. 스칼라 서브쿼리 & LEFT OUTER JOIN - 메인쿼리의 데이터마다 다른 데이터를 리턴하도록 데이터 수정을 한 후 스칼라 서브쿼리와 LEFT OUTER JOIN의 성능을 비교한다. - 메인쿼리의 데이터마다 다른 데이터를 호출하는 쿼리를 작성했을 경우, 서브쿼리는 캐싱효과를 사용할 수 없기 때문에 LEFT OUTER JOIN이 성능이 좋다. - 스칼라 서브쿼리일 때 캐싱할 수 있는 데이터의 개수가 200개가 넘어가면 더이상 캐싱을 하지 않고 상태가 disabled로 바뀐다. -- MGR 업데이트 UPDATE EMP A SET A.MGR = CASE WHEN A.EMPNO = 1600000 THEN 1 ELSE A.EMP..

MariaDB/SQL Tuning 2016.08.28

[MariaDB][성능] LEFT OUTER JOIN과 스칼라 서브쿼리 실행계획 비교1

[테스트 환경] OS : CentOS7 DB : MariaDB 10.1.12 1. 테이블 데이터 건수 - EMP 테이블의 건수를 10만 건으로 했을 때, LFET OUTER JOIN과 스칼라 서브쿼리의 소요 시간이 차이가 없어서 160만 건으로 진행한다.MariaDB [DA_DB]> SELECT COUNT(*) FROM DEPT; +----------+ | COUNT(*) | +----------+ | 204 | +----------+ 1 row in set (0.01 sec) MariaDB [DA_DB]> SELECT COUNT(*) FROM EMP; +----------+ | COUNT(*) | +----------+ | 1600000 | +----------+ 1 row in set (0.31 se..

MariaDB/SQL Tuning 2016.08.24

[MariaDB][성능] 스칼라 서브쿼리 실행계획2

[테스트 환경] OS : CentOS7 DB : MariaDB 10.1.12 1. 스칼라 서브쿼리 실행계획 분석 - 스칼라 서브쿼리에서 사용되는 인덱스를 삭제하면 스토리지 엔진이 DEPT 테이블의 데이터를 MariaDB 엔진으로 전달하고 조인 조건에 맞는 데이터만 필터링한다.-- PK 삭제 ALTER TABLE DEPT DROP PRIMARY KEY; ANALYZE FORMAT=JSON SELECT A.EMPNO ,A.ENAME ,(SELECT S1.DNAME FROM DEPT S1 WHERE S1.DEPTNO = A.DEPTNO) AS DNAME FROM EMP A; { "query_block": { "select_id": 1, "r_loops": 1, "r_total_time_ms": 0.3681, ..

MariaDB/SQL Tuning 2016.08.17

[MariaDB][성능]인라인뷰 처리 방식 분석

[테스트 환경] - OS : CentOS7 - DB : MariaDB 10.1.12 - 테이블 : EMP 10만건, DEPT 4건 1. 인라인 뷰의 최적화 - 오라클과 마찬가지로 인라인뷰로 쿼리를 작성하면 View Merge가 발생하여 조인 조건으로 최적화 한다. 1.1 인라인뷰에서 조회 조건 없고, 조인 컬럼의 인덱스 미존재 - 건수가 작은 DEPT 테이블을 DRIVING 테이블로 TABLE FULL SCAN 하고, DRIVEN 테이블인 EMP 테이블과 block-nl-join방식으로 조인 한다. - EMP테이블에 DEPT컬럼으로 인덱스가 미존재 하기 때문에 DEPT의 데이터를 JOIN BUFFER에 올려서 EMP 테이블의 데이터와 매칭 되는지 하나씩 체크하고, 매칭 되는 결과를 리턴 한다. [SQL1..

MariaDB/SQL Tuning 2016.08.17

[MariaDB][성능] 스칼라 서브쿼리 실행계획

[테스트 환경] OS : CentOS7 DB : MariaDB 10.1.12 EXPLAIN FORMAT = JSON은 MariaDB 10.1.2 버전이상 부터 지원되며, output에 대한 포맷은 정확하게 나와있지 않기 때문에 아래 파악한 내용이 확실하지 않다. ANALYZE FORMAT = JSON 은 EXPLAIN FORMAT = JSON과 ANALYZE 구문의 혼합형으로 EXPLAIN FORMAT = JSON 포맷형식에 쿼리를 실행시킨 데이터(r_loops, r_total_time_ms, r_filtered)가 추가되어 출력된다. ANALYZE FORMAT=JSON SELECT A.EMPNO ,A.ENAME ,(SELECT S1.DNAME FROM DEPT S1 WHERE S1.DEPTNO = A...

MariaDB/SQL Tuning 2016.08.15

[MariaDB][운영] CentOS7에서 logrodate로 로그 파일이 rotation되지 않을 경우

[테스트 환경] OS : CentOS 7 DB : MariaDB 10.1.12 1. logrodate를 실행해도 slow로그 파일이 생성되지 않는 현상-- logrotate 실행 [root@localhost /etc/logrotate.d]$logrotate -f /etc/mysql-log-rotate -- 파일이 새로 생성되지 않음을 확인 [root@localhost /maria_log/slow]$ls -al /maria_log/slow 합계 88 drwxr-xr-x. 2 maria dba 4096 8월 8 17:48 . drwxr-xr-x. 8 maria dba 4096 4월 12 08:23 .. -rw-rw----. 1 maria dba 180 8월 8 17:48 mysql-slow-query.log..

MariaDB/Admin 2016.08.09

[MariaDB][성능] 실행계획 분석2

[테스트 환경]서버: CentOs7DB : MariaDB 10.1.12 DB엔진 : INNODB 1.TYPE컬럼 의미 - Type컬럼은 각 테이블의 레코드를 인덱스로 읽었는지 풀 테이블 스캔으로 읽었는지를 의미--테스트에서 사용하게 될 테이블 스크립트 정보 MariaDB [DA]> DESC EMP; +----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+-------+ | EMPNO | int(4) | NO | PRI | NULL | | | ENAME | varchar(10) | YES..

MariaDB/SQL Tuning 2016.08.08

[MariaDB][Admin] DB 생성 과 테이블 조작(DDL, DML)

1. 새로운 DB 생성 및 테이블 생성 -- ESTDB 데이터베이스 생성 MariaDB [(none)]> CREATE DATABASE ESTDB default character set utf8mb4; Query OK, 1 row affected (0.00 sec) -- ESTDB 데이터베이스로 변경 MariaDB [(none)]> USE ESTDB; Database changed -- 사용자 테이블 생성 --#1 IF NOT EXISTS를 활용해서 현재 데이터베이스에 해당 테이블이 존재하는 지 체크 후 생성 MariaDB [ESTDB]> CREATE TABLE IF NOT EXISTS ESTDB.USER_INFO ( -> USER_NO BIGINT NOT NULL, -- 사용자번호 -> USER_ID V..

MariaDB/Admin 2016.08.07

[MariaDB][성능] 실행계획 분석[정리필요]

#ERD (ERD 출처: https://www.ntu.edu.sg/home/ehchua/programming/sql/SampleDatabases.html 소스 출처: https://code.google.com/archive/p/northwindextended/downloads) 1. 단일 쿼리 explain select a.customerid ,b.OrderDate ,d.ProductName from Customers a inner join Orders b on(b.customerid = a.customerid) inner join `Order Details` c on(c.OrderID = b.OrderID) inner join Products d on(d.ProductID = c.ProductID) w..

MariaDB/SQL Tuning 2016.08.07