MySQL 서버는 프로세스 기반이 아니라 스레드 기반으로 작동하며,크게 포그라운드 스레드와 백그라운드 스레드로 구분할 수 있습니다.

 

포그라운드 스레드(클라이언트 스레드)

포그라운드 스레드는 최소한  MySQL 서버에 접속된 클라이언트의 수만큼 존재하며, 주로 각 클라이언트 사용자가 요청하는 쿼리 문장을 처리합니다. 클라이언트 사용자가 작업을 마치고 커넥션을 종료하면 해당 커넥션을 담당하던 쓰레드는 다시 스레드 캐시로 되돌아갑니다. 이때 이미 스레드 캐시에 일정 개수 이상의 대기중인 스레드가 있으면 스레드 캐시에 넣지 않고 스레드를 종료시켜 일정 개수의 스레드만 스레드 캐시에 존재하게 합니다.이때 스레드 캐시에 유지할 수 있는 최대 스레드 개수는 thead_cashe_size 시스템 변수로 설정합니다.

포그라운드 스레드는 데이터을 MySQL의 데이터 버퍼나 캐시로부터 가져오며, 버퍼나 캐시에 없는경우에는 직접 디스크의 데이터나 인덱스 파일로부터 데이터를 읽어와서 작업을 처리한합니다. MyISAM 테이블은 디스크 쓰기 작업까지 포그라운드 스레드가 처리하지만(MyISAM도 지연된 쓰기가 있지만 일반적인 방식은 아님.)InnoDB 테이블은 데이터 버퍼나 캐시까지만 포그라운드 스레드가 처리하고, 나머지 버퍼로부터 디스크까지 기록하는 작업은 백그라운드 스레드가 처리합니다.

 

백그라운드 스레드

MyISAM의 경우에는 별로 해당 사항이 없는 부분이지만 InnoDB는 다음과 같이 여러가지 작업이 백그라운드로 처리됩니다.

-인서트 버퍼를 병합하는 스레드

-로그롤 디스크로 기록하는 스레드

-InnoDB 버퍼 풀의 데이터를 디스크에 기록하는 스레드

-데이터를 버퍼로 읽어 오는 스레드

-잠금이나 데트락을 모니터링하는 스레드

 

모두 중요한 역할을 하지만 그중에서도 가장 중요한 것은 로그 스레드와 버퍼의 데이터를 디스크로 내려쓰는 작업을 처리하는 쓰기 쓰레드일 것입니다.MySQL 5.5 버전부터 데이터 쓰기 스레드와 데이터 읽기 스레드를 개수를 2개 이상 지정할 수 있게 됐으며, innodb_writer_io_threads와 inno_read_io_threads 시스템 변수로 스레드의 개수를 설정합니다. InnoDB에서도 데이터를 데이터를 읽은 작업을 주로 클라이언트 스레드에서 처리되기 때문에 읽기 쓰레드는 많이 설정할 필요가 없지만 2~4정도, DAS나 SAN과 같은 스토리지를 사용할 때는 디스크를 최적으로 사용할 수 있을 만큼 충분히 설정하는 것이 좋습니다.

사용자의 요청을 처리하는 도중 데이터의 쓰기 작업은 지연(버퍼링)되어 처리될 수 있지만 데이터의 읽기 작업은 절대 지연(사용자가 SELLECT 쿼리를 실행했는데 "요정된 SELLECT는 10뒤에 결과를 돌려주겠다"라고 응답을 보내는 DBMS는 없다.)될 수 없다. 그래서 일반적인 상용 DBMS에는 대부분 쓰기 작업을 버퍼링해서 일괄처리하는 기능이 탑재돼 있으며, InnoDB 또한 이러한 방식으로 처리한다. 하지만 MyISAM은 그렇지 않고 사용자 스레드가 쓰기 작업까지 함께 처리하도록 설계되어 있습니다. 이러한 이유로 InnoDB에서는  UPDATE, INSERT, DELETE 쿼리로 데이터가 변경되는 경우 데이터가 디스크 데이터 파일로 완전히 저장될 때까지 기다리지 않아도 됩니다. 하지만 MyISAM에서 일반적인 쿼리는 쓰기 버퍼링 기능을 사용할 수 없습니다.

'스터디 > MySQL' 카테고리의 다른 글

트랜잭션 지원 메타데이터  (0) 2023.02.12
쿼리 실행 구조  (0) 2023.01.29
플러그인 스토리지 엔진 모델  (0) 2023.01.29
메모리 할당 및 사용 구조  (0) 2023.01.29
MySQL이란?  (0) 2023.01.12

MySQL이란?

전세계적으로 가장널리 사용되고 있는 오픈 소스 데이터베이스이며, MySQL AB사가 개발 배포/판매하고 있는 데이터베이스입니다.(현재는 오라클사가 인수)

표준 질이어인 SQL을 기본 데이터 언어로 사용고 서버의 디스크 드라이브에 있는 테이블에 데이터를 저장합니다.

다중사용자, 다중 쓰레드를 지원하고 유닉스. 리눅스, 윈도우 운영체제 등에서 사용할 수 있습니다.

 

MySQL은 웹사이트, 웹 앱플리케이션 및 모바일 앱용 데이터를 저장하는 데 사용됩니다. 개인, 교육 및 오픈 소스 웹사이에서 가장 많이 쓰입니다.

 

MySQL의 코드는 높은 수준의 트래픽을 처리할 수 있기 때문에 대규모 웹사이트 및 웹 애플리케이션에 널리사용 되며, 전체 텍스트 검색, 저장 프로시저, 트리거 및 보기와 같은 강력한 기능을 제공합니다. 또한 MySQL은 Community Edition과 Enterprise Edition의 두 가지 버전으로 제공됩니다. Community Edition은 무료이며 오픈 소스인 반면 Enterprise Edition은 더 많은 기능을 포함하고 있으며 상업적 사용이 허가되었습니다.

 

MySQL의 기능

-테이블에 데이터를 저장하고 SQL을 사용하여 이 데이터에 대한 작업을 수행 할 수 있는 관계형 데이터 베이스 관리 시스템

-트랜잭션 및 행 수준 잠금을 허용하는 InnoDB를 포함한 여러 스토리지 엔진을 지원

-저장 프로시저 및 트리거 지원과 같이 다른 RDBMS에서 찾을 수 없는 여러 기능을 제공

-크고 작은 웹사이트 모두에 전원을 공급하는 데 사용할 수 있다.

-GNU 일반 공중 사용 허가서에 따라 공개된 오픈 소스 소프트웨어는 무료로 사용할 수 있다.

 

MySQL의 장점

MySQL은 ACID 속성을 사용하여 여러 스토리지 엔진에서 트랜잭션 무결성을 제공합니다. 이를 통해 개발자는 기본 시스템 아키텍처 또는 스토리지 엔진에 대한 지식 없이도 SQL 인터페이스를 사용하여 확장성이 뛰어난 웹 기반 데이터베이스 애플리케이션을 쉽게 구축할 수 있습니다.

또한 MySQL에는 InnoDB 및 MyISAM을 비롯한 여러 스토리지 엔진을 사용하는 기능과 Memcached 캐싱 프로토콜에 대한 지원이 포함됩니다. 또한 복제를 지원하므로 개발자는 추가 개발 노력 없이 지리적으로 분산된 데이터베이스 시스템을 만들 수 있습니다.

 

마지막으로,MySQL은 크고 활동적인 사용자 커뮤니티를 보유하고 있습니다. 이는 풍부한 정보가 있음을 의미합니다.

 

가장 큰 이점은 경쟁력 즉 비용입니다. Oracle 또는 MS-SQL과 같은 다른 데이터 베이스와 비용차이가 심합니다.

 

 

 

 

'스터디 > MySQL' 카테고리의 다른 글

트랜잭션 지원 메타데이터  (0) 2023.02.12
쿼리 실행 구조  (0) 2023.01.29
플러그인 스토리지 엔진 모델  (0) 2023.01.29
메모리 할당 및 사용 구조  (0) 2023.01.29
MySQL 스레딩 구조  (0) 2023.01.12

프로메테우스란?

 -오픈소스 기반의 모니터링 시스템으로 대상 시스템으로 부터 각종 모니터링 지표를 수집하여 저장, 검색 할 수 있는 시스템입니다.

-구조가 간단해서 운영이 쉽고 강력한 쿼리(Promql) 기능을 가지고 있으며, 그라파나를 통한 시각화를 지원합니다.

-무엇보다 넓은 오픈소스 생테계를 기반으로 해서 많은 시스템을 모니터링 할 수 있는 다양한 플러그인을 가지고 있는 것이 가장 큰 장점이며, 특히 이러한 간편함 때문에 쿠버네티스의 메인 모니터링 시스템으로 많이 사용됩니다.

-또한 규칙을 수행하여 시계열 형태의 데이터로 수집하고 특정조건에 경고를 날리며 Target system의 exporter로 부터 메티릭을 읽어와 수집하는 풀링 방식을 사용합니다.

-Retrieval 컴포넌트가 있는 데 서비스 디커버리로부터 모니터링 대상 목록을 받아오고, exporter로 부터 주기적으로 메트릭을 수집하는 모듈입니다.

-저장은 프로메테우스 내의 메모리와 로컬디스크에 저장하는 데 메모리 부족 시 tanos 라는 오픈 소스를 사용해서 늘릴 수 있습니다.

 

그라파나란?

-프로메테우스를 미롯한 여러 데이터들을 시각화해주는 모니터링 툴입니다.

-시스템 관점(cpu,메모리,디스크)의 메트릭 지표를 시각화하는 데 특화 되어 있고, 다양한 데이터베이스 선택이 가능하며, 알림 기능이 있습니다.

 

'스터디' 카테고리의 다른 글

AOP, FILTER,INTERCEPTOR  (0) 2023.01.15
도커란?  (0) 2023.01.03

도커란?

-간단히 말해 리눅스 컨테이너를 만들고, 사용할 수 있는 컨테이너화 기술입니다.

-애플리케이션을 환경에 구애 받지 않고 실행시키는 것을 컨테이너라고 합니다.

-그리고 도커는 서버 운영 기록을 코드화 한 것입니다.

 

서버 코드화의 장점.

-서버 제작 과정에 견고함과 유연성을 더 할 뿐 아니라.- 다른 개발자가 코드를 보고 서버 운영 상황을 쉽게 알 수 있다.

-다른 이가 만든 서버를 소프트웨어 사용하 듯 가져다가 쓸 수 있고 

-여러 대를 배포 할 수 있는 확장성을 가지고 있다.

 

-도커파일 - 서버 운영 기록

-도커 이미지 - 도커 파일 + 실행 시점

-도커 컨테이너 - 도커 이미지 + 환경변수

 

 

 

'스터디' 카테고리의 다른 글

AOP, FILTER,INTERCEPTOR  (0) 2023.01.15
prometheus,grafana 란?  (0) 2023.01.03

+ Recent posts