엔진 아키텍처
mysql 엔진 | 스토리지엔진 | |
---|---|---|
역할 | 머리 | 손발 |
구성 | sql 인터페이스, sql 파서, sql 옵티마이저, 캐시&버퍼 | 버퍼풀 (언두,리두,체인지,데이터페이지), 로그버퍼, 각 버퍼 전용 스레드 |
주요 | 쿼리 분석, 쿼리 최적화, validation 등 | 데이터 핸들링 |
기타 | cpu? | io? |
기타 2 | group by order by등 | |
복잡한 처리 | 단순 필터링 or gosemffld |
thread
foreground | background | |
---|---|---|
역할 | 유저 요청 쿼리처리( 클라이언트 ) | 포그라운드 스레드외 나머지 모든 작업 |
일정 스레드 개수를 유지시킴 | - insert 버퍼 병합 |
memory
글로벌 | 세션 | |
---|---|---|
-테이블캐시 | ||
-innodb 버퍼풀 | ||
-innodb 어댑티브 해시인덱스 | ||
-inoodb 리두로그 버퍼 | -정렬버퍼 | |
-조인버퍼 | ||
-바이너리 로그캐시 | ||
-네트워크 버퍼 | ||
하나만 생성됌 (힙) | 요청당 1개 ( 스택,세션) | |
요청이 너무많은 경우 메모리가 부족할수있음 |
inno vs myisam
innodb | myisam | |
---|---|---|
머리 | 손발 | |
pk | clustering pk 지원 (index range가 빠름) | 물리 record id 사용(rowId) |
트랜잭션유무 | o | x |
용도 | 트랜잭션이 필요한 복잡한 기능을 지원하는 서비스 | 읽기 요청이 많고 변경이 없는 데이터(캐싱,검색) |
비슷한거 | 오라클 iot | ? redis? |
fk 지원 | o | x |
트랜잭션 지원 메타데이터 | innodb 저장 | 파일에 저장 |
엔진특징 | 버퍼풀사용 | 키캐시 사용 |
데이터 사전
DB에 어떤 user가 생성되어 있는지, 어떤 스키마(데이터베이스), 테이블, 테이블에는 어떤 칼럼이 있고, 테이블 별로 데이터가 얼마나 있는지, 다른 오브젝트들이 어떻게 어떤 스키마에 종속되어 있는지 기타 등등 유저가 입력하는 데이터를 제외한 모든 정보가 들어 있는 것
pecona server의 스레드풀 플러그인은 큐를 이용해서 트랜잭션의 순서를 바꿔 같은 트랜잭션의 쿼리들을 모아서 한번에 처리하여 lock 경합을 최소화 해서 전체적인 성능을 향상시킬수있다.
프라머리 키에 의한 클러스터링