반응형

#프로세스란?
자기 자신만의 주소공간을 갖는 독립적인 실행 프로그램
멀티프로세스 : 두 개 이상의 프로세스가 실행되는 것. 프로그램이 여러개 띄워져 있는 형식
멀티 태스킹 : 두 개 이상의 프로세스를 실행하여 일을 처리하는것

 

#스레드란?
스레드(경량 프로세스) : 프로세스 내의 독립적인 순차 흐름 또는 제어
멀티 스레드 : 하나의 프로세스에서 여러 개의 스레드가 병행적으로 처리

 

mysql은 멀티 스레드구조로 standard 버전(무료)까지는 one-thread-per-connection 만 지원하며 enterprise 버전부터 thread-pool 을 사용할 수 있다.
MariaDB와 차이는 여기서 발생하는데 잔버그가 있어도 MariaDB를 사용하는 이유중 하나는 무료로 thread-pool을 쓸 수 있기 때문이다.
다시 mysql로 돌아와서 standard 버전을 기준으로 설명하면 한 커넥션당 하나의 스레드를 연다.
Thread Max값은 my.cnf에 max_connections 파라미터에 설정할 수 있고 이후 중요한 튜닝포인트 중 하나이다.

 

mysql>show global variables like 'thread%';

 

#mysql 조인방식

 

단일 코어에서 Nested Loop Join 처리
mysql에서는 모든 sql처리를 단일 코어에서 Nested Loop Join방식으로 처리를 한다. 기본적인 스토리지 엔진에서는 단일 코어 수행하고, 일부 3rd 스토리지 엔진을 플러그인으로 설치하면 병렬처리가 가능하다.

그래서 cpu 코어 개수를 늘리기 보다는, 단위 처리량이 좋은 cpu로 바꾸는게 더 유리하다

 

#Nested Loop Join(이하 NL-Join)이란?

선행 테이블(A)의 조건 검색 결과 값 하나하나를 엑세스 하면서 연결할 테이블(B)에 대입하여 조인하는 방식이다.
즉, 연결할 테이블 수(조인의 개수)가 늘어날수록, 쿼리 효율이 기하급수적으로 떨어진다.
모든 조인은 NL-Join으로 처리한다.


for문 안에서 for문을 실행시키는 구조라고 보면된다.

mysql은 오라클처럼 힌트가 많은 것이 아니기 때문에 limit 라는 좋은 기능을 잘 사용하고

나머지는 join과 index 스캔을 잘 튜닝해서 사용하면 된다.

반응형
블로그 이미지

dung beetle

취미는 데이터 수집 / 직업은 MYSQL과 함께 일하는 DBA / 즐거운 엔지니어의 끝나지 않는 이야기

,