Real My SQL - 2장 Server 시스템 변수

김인회·2021년 5월 29일
0

Real My SQL

목록 보기
1/4

데이터베이스 시스템

어떤 프로젝트를 진행하고자 할때 데이터베이스 시스템의 구축은 프로젝트의 규모가 크던 작던 대부분 이루어질 것이다.

물론 트래픽이 거의 존재하지 않고 실사용자가 거의 없는 규모가 작은 프로젝트를 진행할 것이라면 데이터베이스 시스템은 단순하게 CRUD만 잘되면 된다.

대규모 서비스를 목적으로 하지 않고 기능 그 자체의 구현만을 목적으로 하는 프로젝트에서는 데이터를 다루는 쿼리문 그 자체만 잘 이용하더라도 원하는 기능을 웬만해선 모두 구현할 수 있을 것이기 때문이다.

하지만 만약 수많은 사용자에 의해 하루하루 데이터가 꾸준히 쌓여가는 상황에서, 해당 데이터를 이용하고자 접근하는 수많은 액세스와 트래픽을 계속해서 처리해야 하는 서비스를 맡게된 상황이라면 이야기는 달라진다.

엄청나게 많은 데이터가 쌓여있는 데이터베이스를 다루는 것과 텅텅 비어있는 데이터베이스를 다루는 것에는 당연히도 많은 차이가 있다.

비어있는 데이터베이스에 비해 수많은 데이터가 담겨있는 데이터베이스는 단순히 SELECT 문으로 데이터에 접근 조회하는 것에만 있어서도 그 성능의 차이폭을 체감하게 된다.

만약 저장한 데이터를 정렬이나 특정 로직에 맞게 재가공해서 가져와야 하는 상황이라면 쌓여있는 데이터로 인한 성능의 차이는 더욱 눈에 띄게 될 것이다.

데이터베이스에 대한 CRUD를 넘어선 더 깊은 이해의 필요는 위와 같이 축적된 수많은 데이터로 인한 성능저하 이슈들을 해결하고자 하는 선에서부터 시작된다.

부하관리

데이터베이스 서버의 부하관리에는 내부적인 관리와 외부적인 관리 크게 2가지로 나누어 볼 수 있다.

현재 가지고 있는 서버의 자원을 더 효율적으로 사용하기 위해 저장되는 데이터의 틀을 정규화하거나, 인덱싱을 이용하여 데이터를 효율적으로 조회하고 쿼리문 자체를 더욱 최적화하거나, 데이터가 디스크에 입출력되는 빈도를 조절하여 디스크 병목현상을 줄이고자 하는 등, 데이터베이스 시스템의 구동 로직 자체를 최적화하여 가동 중인 서버의 부하를 줄이고자 하는 것이 내부적인 관리이다.

반면에 내부적인 구동 로직을 개선하기보다는 아예 외부 하드웨어인 서버 자체를 보강하거나 확장하여 부하를 분산하고자 하는 것이 외부적인 관리이다.

외부적으로 서버를 확장하는 방법에도, 같은 데이터를 지니고 있는 DB 서버를 여러 대 두어 액세스 되는 요청 자체를 각 서버에 분산시켜 프로세스 자체를 다중화시키는 HA(HAproxy) 구성으로 시스템을 구성하는 방법과, 또는 아예 한 테이블에 저장되는 데이터 자체를 여러 대의 서버에 분산해서 저장하는 샤딩 방식 등으로 또 나누어지게 된다. (HA 구성은 사실 서버 장애를 위한 대처가 주목적이긴 하다)

당연한 말이지만 내부적인 방법을 이용하던 외부적인 방법을 이용하던, 서버의 제대로 된 부하 관리를 해내기 위해서는 결국 이용하고 있는 데이터베이스 서버에 대한 깊은 이해가 바탕이 된다는 전제가 뒤따른다.

시스템 변수

시스템 변수란 어떠한 프로그램이 동작하는 방식을 결정지을 수 있는 어떠한 값들의 모임이다.

예를 들어 MYSQL 시스템변수에는 메모리의 사용량을 조절할 수 있는 설정값부터, 데이터 저장 방식 및 탐색 방식에 관한 로직 설정값, 외부 네트워크 사용자 제어 등을 변경할 수 있는 설정값까지 여러 가지의 설정값들이 존재한다.

(특정 디렉토리의 my.cnf OR my.ini 파일을 이용해 해당 설정값들을 변경하고 유지할 수 있다)

이러한 설정값들은 신경 쓰지 않으면 그냥 넘어갈 수도 있는 사소한 영역으로 보여지지만, 하나의 프로그램에 대한 깊은 이해를 방향으로 공부하고자 한다면 완벽하게 외우는 건 당연히 아닐지라도 적어도 눈에 어느 정도 익을 정도는 봐두어야 한다고 생각한다.

프로그램에 존재하는 설정값을 통해 해당 프로그램에 어떠한 기능들이 존재하는지 미리 엿볼 수 있고, 이를 통해 프로그램이 가지고 있는 커다란 기능부터 세부적인 기능까지 존재하는 기능들에 대해 로드맵을 한번 그려보는 정보로서도 활용할 수 있다고 본다.

시스템변수 - 글로벌 변수와 세션 변수

MYSQL의 시스템 변수는 크게 글로벌 변수와 세션변수로 나눌 수 있다.

글로벌 변수는 말 그대로 MYSQL 서버 전체에 영향을 끼치는 공통 설정값이라고 볼 수 있으며,

세션 변수는 서버에 접근하는 각 클라이언트, 즉 인스턴스마다 개별적으로 갖게 되는 설정값이라고 볼 수 있다.

정적 변수와 동적 변수

또한 MYSQL의 시스템 변수는 서버가 가동 중인 상태에서 설정값을 변경 및 적용할 수 있는 동적변수 (SET을 이용하여 메모리에 올려져 있는 설정값을 변경가능)와 반드시 서버를 재가동해야 변경이 적용되는 정적변수로 나누어진다 (SET 불가능).

profile
안녕하세요. 잘부탁드립니다.

0개의 댓글