반응형

CS/Data Base 18

[DB] mysql 은 relay log 를 왜 single thread(sql thread)로 처리했을까

Real MySQL 책에 복제(Replication)에 관한 내용을 읽고 있었던 중 이런 내용이 있었다. 마스터 서버에서 수많은 동시 사용자가 실행한 데이터 변경 쿼리 문장이 슬레이브 서버에서는 하나의 스레드로 모두 처리돼야 한다(이 부분은 지금의 구조상 피해 갈 방법이 없다). 즉, 마스터 서버에서는 바이너리 로그를 기록하는데 이때 "Binlog dump" 라는 스레드가 이 일을 전담하며 하나의 마스터 서버에 N개의 슬레이브가 연결돼 있다면 "Binlog dump" thread 가 10개가 생긴다. 그리고 슬레이브 서버에서는 relay log 가 존재하는데, 이 relay log 는 마스터의 변경내역이 기록된 로그 파일이며 슬레이브 서버의 I/O thread 가 마스터 서버에 접속해 변경 내역을 해당 ..

CS/Data Base 2021.06.24

[DB] MySQL 서버는 왜 스레드 기반일까?

Real MySQL 이라는 책을 읽다가 104 페이지에서 다음과 같이 이야기하는 부분이 있었다. MySQL 서버는 프로세스 기반이 아니라 스레드 기반으로 작동하며, 크게 포그라운드 스레드와 백그라운드 스레드로 구분할 수 있다. 그렇다면 왜 MySQL 서버는 프로세스 기반이 아니라 스레드 기반으로 동작하게 했을까? 라는 생각이 들었다. 우선 내 생각은 다음과 같다. 먼저 운영체제를 공부하다가 나오는 프로세스의 개념을 먼저 이해해야 한다. 간단하게 얘기하면 여러 N개의 스레드와 기타 등등으로 굴러가는 하나의 프로그램이라고 보면 된다. 크롬에서의 각각의 탭들을 예로 들 수 있다. 크롬 브라우저의 각 탭들은 하나의 프로세스들로 이루어져 있다. 그래서 탭이 10개라면 10개의 프로세스가 존재한다는 것이다. 이러한..

CS/Data Base 2021.06.22

인덱스의 중요성을 다시 한 번 느끼며..

몇 달 전 메인 기능이 배포되고, 실서비스에서 동작이 잘 되고 있어서 신경 쓰지 않고 다른 피처를 개발하고 있었다. 그 기능을 얘기하면 사용자의 로그를 쌓아서 그 로그를 기반으로 어떤 추천을 해주는 그런 기능이었다. 그 로그가 이제 유저당 몇 만개씩 쌓이게 되었고, 클라이언트에서 해당 기능에 대한 api 를 요청하게 될 때 timeout 이 발생하는 경우가 생겼다. 확인해보니 코드 상에서는 문제가 전혀 없었고 단순 select 하는 쿼리에서 이 쿼리가 이렇게 느리다고? 할 정도였다. 그리고 확인해보니 특정 컬럼에 인덱스가 걸려있지 않았었다. 흑흑. 테이블 만들 때 잊고 만들었었던 것 같다. 긍정적으로 생각하면, 평소에 인덱스 공부할 때 중요하다 중요하다 할 때는 그냥 중요하다~ 라고 생각이 들었는데 실제..

CS/Data Base 2020.12.16

[MySQL] 간단하게 보는 mysql 의 아키텍처 - 1

mysql 이 어떻게 돌아가고 어떤 구조로 돼 있는지 공부해야지 해야지 하다가 이제서야 공부하고 글을 작성해 보려고 한다. 다른 블로그에도 지금 작성하는 내용과 같거나, 비슷한 내용이 작성 돼 있는 곳이 많기 때문에 살짝 의식의 흐름대로 작성한다. 이 글은 [REAL MySQL] 이라는 책을 기반으로 작성한다. MySQL 의 전체 구조 우선 책에도 나와있지만, 간단히 MySQL 전체적인 구조를 한 번 보는게 좋을 것 같다. 우선 앞으로 설명할 것들은 MySQL 을 크게 구분할 수 있는 [MySQL 엔진], [스토리지 엔진] 부분이다. ### MySQL 엔진 접속 및 쿼리 요청 처리하는 커넥션 핸들러, SQL 파서, 전처러리기, 쿼리 최적화를 위한 옵티마이저로 이루어져 있다. 또, InnoDB 의 버퍼 풀..

CS/Data Base 2020.04.29

[MySQL] MySQL 서버 설정

해당 내용은 Real MySQL 책을 인용하였습니다. MySQL 서버를 세팅할 때 구글링을 해서 셋팅해서 사용하고 그랬었는데 서버 셋팅 시 어느 정도 지식이 있어야 함을 느꼈다. 서버 설정 MySQL 서버는 단 하나의 설정 파일만 사용한다. 리눅스/유닉스 계열에서는 my.cnf, 윈도우 계열에서는 my.ini 파일을 사용한다. 이 파일의 이름을 변경할 수 없으니 참고해야 한다. 또 중요한 점은 이 설정 파일들이 여러 디렉토리에 존재할 수 있다. MySQL 서버에서는 지정된 디렉토리를 순차적으로 탐색하면서 처음 발견된 설정 파일을 사용한다. (물론 지정된 디렉토리를 다르게 설정할 수도 있다) 리눅스 서버에서 MySQL 서버를 셋팅했다고 가정하고 얘기를 하도록 하겠다. 만약 여러 개의 설정 파일들이 있고, ..

CS/Data Base 2020.02.13

[DB] SQL 기초 - 4 (JOIN, 별명, VIEW)

JOIN 의 개념 서로 다른 테이블을 공통 컬럼을 기준으로 합치는(결합하는) 테이블 단위 연산 조인의 결과 테이블은 이전 테이블의 컬럼 수의 합과 같다. SELECT * FROM 테이블 1 JOIN 테이블 2 ON 테이블1.컬럼명 = 테이블2.컬럼명 ... 조인 시 서로 다른 테이블에 같은 컬럼명이 존재하면 구분을 위해 테이블명.컬럼명으로 사용해서 표시 예제 - SELECT * FROM city JOIN country ON city.CountryCode = country.Code; - SELECT city.CountryCode, country.GNP FROM city join country ON city.CountryCode = country.Code; JOIN 의 종류 조인 시 NULL 값을 허용하는 ..

CS/Data Base 2017.06.14

[DB] SQL 기초 - 3 (일부 결과값 조회 및 집합함수)

결과값 일부 조회 (ROWNUM, TOP)SQL 쿼리 결과 중 상위 몇 개만 보여주는 쿼리SELECT 컬럼명 1, 컬럼명 2, ... FROM 테이블명 WHERE 조건절 LIMIT 숫자대표적인 비표준기능 (DBMS 종류마다 다름) 예제- 국가코드가 'KOR' 인 도시들 중 인구수 많은 순서로 상위 10개만 표시하시오 결과 확인- SELECT CountryCode FROM city WHERE CountryCode = 'KOR' ORDER BY Population DESC LIMIT 10; 집합함수 (Aggregation Function)테이블의 전체 레코드를 대상으로 특정 컬럼을 적용해서 한 개의 값을 리턴하는 함수COUNT(), AVG(), SUM(), MIN(), MAX(), FIRST(), LAST(..

CS/Data Base 2017.06.14
반응형