전체 글 1383

MySQL/MariaDB 아키텍처 – 쿼리 실행 구조

MySQL/MariaDB 아키텍처 – 쿼리 실행 구조 Version : Mariadb 5.5.4.2-WinX64 MySQL / MariaDB 쿼리 실행 구조에 대해서 알아본다. 쿼리 실행 구조는 타 DB와 거의 동일하다. [쿼리 실행 순서] 클라이언트는 서버로 SQL 문을 전송 한다. 서버는 쿼리 캐시를 확인하여 캐시에 저장된 데이터가 있다면 저장된 결과를 반환한다. 그렇지 않으면 다음 단계로 통과 시킨다. 서버는 구분 분석 및 전처리기에서 쿼리에 구조적 문제가 없는지 확인하고 옵티마이저는 SQL 쿼리를 최적화 한다. 쿼리 실행 엔진은 스토리지 엔진 API를 호출하여 계획을 실행 한다. 서버는 클라이언트에게 결과를 반환한다. [Parser] 파서는 사용자 요청으로 들어온 쿼리 문장을 토큰(SQL엔진이 인..

MySQL, MariaDB 2015.07.16

MySQL/MariaDB 아키텍처 – 메모리 할당 및 사용 구조

MySQL/MariaDB 아키텍처 – 메모리 할당 및 사용 구조 Version : Mariadb 5.5.4.2-WinX64 MySQL/MariaDB 메모리 공간은 크게 글로벌 메모리 영역과 로컬 메모리 영역으로 구분할 수 있다. 글로벌 메모리 영역은 MySQL 서버가 시작되면서 무조건 운영체제로부터 할당된다. 글로벌 메모리 영역과 로컬 메모리 영역의 차이는 MySQL서버 내에 존재하는 스레드가 공유해서 사용하는 공간인지 아닌지에 따라 구분된다. MySQL/MariaDB Memory 관련 설정 변수 : http://sqlmvp.kr/220365937569 MySQL 서버의 메모리사용량 = (글로벌 메모리) + (각 클라이언트 스레드 사용 메모리) [글로벌 메모리 영역] 일반적으로 클라이언트 스레드의 수와 ..

MySQL, MariaDB 2015.07.16

MySQL/MariaDB 아키텍처 – 스레딩 구조

MySQL/MariaDB 아키텍처 – 스레딩 구조 Version : Mariadb 5.5.4.2-WinX64 MySQL./MariaDB 서버는 프로세스 기반이 아닌 스레드 기반으로 작동하며 크게 포그라운드(Foreground) 스레드와 백그라운드(Background)스레드로 구분할 수 있다. [포그라운드 스레드 (클라이언트 스레드)] 포그라운드 스레드는 최소한 MySQL/MariaDB 서버에 접속된 클라이언트의 수만큼 존재한다. 클라이언트 사용자가 작업을 마치고 커넥션을 종료하면 해당 커넥션을 담당하던 스레드는 다시 스레드풀(Thread pool)로 반환된다. 이때 스레드풀에 일정 개수 이상 대기 스레드가 있으면 스레드 풀로 반환하지 않고 스레드를 종료한다. 스레드풀의 크기는 다음 명령으로 확인할 수 있..

MySQL, MariaDB 2015.07.16

MySQL/MariaDB 아키텍처 – Overview

MySQL/MariaDB 아키텍처 – Overview Version : Mariadb 5.5.4.2-WinX64 MariaDB 아키텍처는 MySQL 아키텍처와 동일하다. (당연히 동일 엔진이기에..) MySQL 아키텍처는 아래 그림과 같다. 기본적으로 커넥션 API를 이루고 있는 응용 프로그램 부분과 커넥션풀, SQL Interface, Parser, Optimize, Caches&Buffers 로 이루어진 MySQL 엔진, 그리고 스토리지 엔진 및 실제 데이터를 저장하는 파일 시스템인 하드웨어 영역으로 구분할 수 있다. MySQL은 일반 상용 RDBMS에서 제공하는 대부분의 접근법을 지원한다. C API 부터 JDBC, ODBC, Perl, .NET 표준 드라이버까지 다양하게 제공한다. ASP.NET에..

MySQL, MariaDB 2015.07.16

MySQL/MariaDB 복제구축

MySQL/MariaDB 복제구축 Version : Mariadb 5.5.4.2-WinX64 MySQL/MariaDB 복제구축 방법에 대해서 알아본다. 복제를 구축하기 위해서는 최소 2대의 서버가 준비되어 있어야 한다. [복제 구축 전 준비 사항] MySQL/MariaDB는 설치되어 있는가? 복제에 사용할 포트는 열려 있는가? (기본 포트 3306) Slave에서 사용할 계정은 생성되어 있는가? 바이너리 로그는 활성화 되어 있는가? Master, Slave의 Server-id는 고유한가? 이번 실습에서는 Master 서버의 호스트명이 'KSW_2012_2' 이며 포트는 Master, Slave 모두 기본 포트 3306을 사용하였다. [복제 설정 준비] 복제를 구축하기 전에 복제에 사용할 수 있도록 바이너..

MySQL, MariaDB 2015.07.16

MySQL/MariaDB Connection 관련 설정 변수

MySQL/MariaDB Connection 관련 설정 변수 Version : Mariadb 5.5.4.2-WinX64 MySQL/MariaDB 서버에서 커넥션 관련 설정 변수와 현재 설정되어 있는 값을 확인하고 이 항목이 어떤 의미를 뜻하지는지 알아본다. 설정 가능한 변수 목록은 show variables 명령을 사용하여 확인 할 수 있다. show variables; max_connections : MySQL 서버가 최대한 허용할 수 있는 클라이언트의 연결 수를 제한하는 설정이다. max_connection 값을 수천 수만으로 늘릴수록 MySQL 서버가 응답 불능 상태로 빠질 가능성이 높아지며 이 설정값을 낮출수록 MySQL 서버가 응답할 수 없게 될 확률이 줄어든다. 이 설정은 동적으로 변경할 수 ..

MySQL, MariaDB 2015.07.16

MySQL/MariaDB Memory 관련 설정 변수

MySQL/MariaDB Memory 관련 설정 변수 Version : Mariadb 5.5.4.2-WinX64 MySQL/MariaDB 서버에서는 메모리 관련된 설정이 중요하다. MySQL에서 스토리지 엔진별로 주요 메모리 공간이 공유되지 않기 때문에 사용하는 스토리지 엔진에 맞게 메모리 사용을 제한하는 것이 중요하다. 여기에서는 중요한 변수 몇 가지만 소개한다. 자세한 내용은 공식 매뉴얼을 참고한다. 설정 가능한 변수 목록은 show variables 명령을 사용하여 확인 할 수 있다. show variables; innodb_buffer_pool_size : 디스크에서 데이터를 메모리에 캐싱함과 동시에 데이터의 변경을 버퍼링하는 역할을 수행한다. 일반적으로 전체 메모리의 50% ~ 80%까지 설정하..

MySQL, MariaDB 2015.07.16

MySQL/MariaDB 프로세스 강제 종료

MySQL/MariaDB 프로세스 강제 종료 Version : Mariadb 5.5.4.2-WinX64 특정 스레드에서 실행 중인 쿼리나 커넥션을 종료하는 방법에 대해서 알아본다. 현재 실행 중인 쿼리는 SHOW PROCESSESLIST 명령어로 확인 할 수 있다. 실행 중인 쿼리 리스트에서 ID 컬럼의 값은 접속된 커넥션의 요청을 처리하는 고유한 키 값으로 사용된다. MySQL/MariaDB 현재 실행중인 쿼리 보기 : http://sqlmvp.kr/220362742203 show processlist; 프로세스를 강제로 종료하기 위해서는 KILL 명령어를 사용한다. 아래 명령어는 Query ID가 3인 스레드의 쿼리만 강제로 종료하는 명령이다. kill query 3 아래 명령어는 Query ID 가..

MySQL, MariaDB 2015.07.16

MySQL/MariaDB 현재 실행중인 쿼리 보기

MySQL/MariaDB 현재 실행중인 쿼리 보기 Version : Mariadb 5.5.4.2-WinX64 현재 실행중인 쿼리 목록 및 명령어를 확인 할 수 있다. 모든 쿼리를 보기 위해서는 root 권한이 필요하다 show full processlist; ID : MySQL 서버의 스레드 ID, 쿼리나 커넥션을 종료시킬 때 식별자로 사용할 수 있다. User : 클라이언트가 MySQL 서버에 접속할 때 인증에 사용한 사용자 계정 Db : 클라이언트가 기본으로 사용하고 있는 데이터베이스 이름 Command : 해당 스레드가 현재 어떤 작업을 처리하고 있는지 표시 Time : Command 컬럼에 표시되는 작업이 얼마나 실행되고 있는지 표시 State : Command 컬럼에 표시되는 내용이 대분류 이면..

MySQL, MariaDB 2015.07.16

MySQL/MariaDB 로그 저장기간 변경

MySQL/MariaDB 로그 저장기간 변경 Version : Mariadb 5.5.4.2-WinX64 앞에서 MySQL/MariaDB에서 로그를 기록하는 방법에 대해서 다루었다. MySQL/MariaDB 에러로그파일 : http://sqlmvp.kr/220356876146 MySQL/MariaDB 제네럴 로그 파일 : http://sqlmvp.kr/220357319171 MySQL/MariaDB 슬로우 쿼리 로그 : http://sqlmvp.kr/220357383281 이렇게 남겨진 로그를 주기적으로 관리하지 않으면 로그의 크기가 계속해서 증가하여 시스템의 디스크 공간부족 등 문제가 발생할 수 있다. 로그의 저장기간을 변경하여 로그기록으로 인한 장애를 방지할 수 있도록 한다. 로그 저장기간을 변경하는 ..

MySQL, MariaDB 2015.07.16