일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
- aws
- 바이브코딩
- Java
- Pinpoint
- Spring
- 코틀린 코루틴의 정석
- 정보처리기사실기 기출문제
- Kubernetes
- AI
- CKA
- 기록으로 실력을 쌓자
- CKA 기출문제
- kotlin querydsl
- minikube
- 정보처리기사 실기 기출문제
- 오블완
- tucker의 go 언어 프로그래밍
- Linux
- 티스토리챌린지
- PETERICA
- SRE
- MySQL
- kotlin
- go
- CloudWatch
- kotlin coroutine
- golang
- AWS EKS
- APM
- 공부
- Today
- Total
목록Database/MySQL (18)
피터의 개발이야기

ㅁ 개요 MySQL의 문자열에서 특정문자열의 검색을 위해서 LIKE 함수를 많이 이용합니다. 상황에 따라서 INSTR이 더 빠른 경우도 있는데, 구체적으로 INSTR, LOCATE, LIKE, REGEXP들의 속도차이가 얼마인지, 다시 말해 상황에 따라 어떤 것이 더 효율적인지 분석한 내용을 정리하였습니다. ㅁ 테스트 방법 a-z의 문자열에서 처음, 중간, 끝의 문자열 검색 속도를 비교 하기 위해 테스트를 진행하였습니다. [MySQL] 실습환경 구성하기에서 생성한 MySQL이며, 버젼은 5.7.37입니다. ### INSTR ### # 16 s 529 ms SELECT BENCHMARK(50000000,INSTR('abcdefghijklmnopqrstuvwxyz','abc')) # 1 m 24 s 146 ..

ㅁ 들어가며 MySQL DB에서 Select 쿼리가 늦어지는 이유에 대해서 정리하였습니다. 1. 시스템 리소스를 초과하는 경우 MySQL DB가 처리 가능한 워크로드 용량을 초과하여 CPU 사용량이 많거나, 메모리가 부족하게 됩니다. CPU 사용률과 가용 메모리를 항상 모니터링하는 것이 좋습니다. 가끔 CPU 스파이크가 발생하는 것은 정상이지만 오랜 기간 동안 지속적으로 많은 CPU가 사용되면 SELECT 쿼리가 느리게 실행될 수 있습니다. SELECT 쿼리는 디스크 탐색으로 인해 실행 속도가 저하될 수 있습니다. 디스크 I/O를 최소화하기 위해 데이터베이스 엔진은 디스크에서 읽은 블록을 캐시하려고 합니다. 즉, 다음에 데이터베이스가 동일한 데이터 블록을 필요로 할 때 디스크가 아닌 메모리에서 해당 블록..

ㅁ 개요 MySQL을 사용하면서 InnoDB에 대해서 잘 이해하지 못한 부분이 있어서 공부를 하게 되었다. 백엔드 입장에서 시스템 포퍼먼스를 위해 캐싱기능을 이용하는데, InnoDB도 Memory를 이용한 캐싱처리를 통해 DB 포퍼먼스를 향상 시켰음을 알게 되었다. 이번 글은 InnoDB의 구조를 이해하고 세부적인 처리 방식에 대해서 정리하였다. ㅁ InnoDB의 구조 ㅇ Buffer Pool를 이용한 성능 향상 Buffer Pool은 MySQL의 DB Engine인 InnoDB가 Table Caching 및 Index Data Caching을 위해 이용하는 Memory 공간이다. Buffer Pool 크기가 클수록 상대적으로 Disk에 접근하는 횟수가 줄어들기 때문에 DB의 성능이 향상된다. ㅇ Mem..

ㅁ 개요 이전 글인 SQL 연습을 위한 실습 사이트에 대해서 작성하였다. 이번에는 로컬 Docker에서 MySQL5.7 환경을 구성하고 샘플 데이터를 적재하는 과정을 정리하였다. MySQL 8.0 설치과정은 [MySQL] Mysql Docker 설치, 8.0을 참조하세요. ㅁ MySQL 설치 $ docker run -d -p 3307:3306 \ # 로컬 3307포트를 컨테이너 3306포트로 맴핑 -e MYSQL_ROOT_PASSWORD=strong-password \ # 비밀번호 설정 -v /Volumes/500GB/data/mysql57:/var/lib/mysql \ # 컨테이너의 mysql폴더를 로컬에 마운트하여 데이터가 삭제되는 것을 예방한다. --name mysql_57 mysql:5.7 ㅇ 로..

ㅁ 개요 상황에 따라 GUI가 아닌 터미널에서 SQL 작업을 하게 되는 경우가 있다. 이런 경우 CLI를 통해 직접 SQL를 편집하고 실행하는데, SQL 파일을 통해 편집하여 실행하면 실수나 기존 SQL를 보존하여 더욱 편리하다. 이번 글에서는 맥에 CLI를 설치하고 SQL 파일을 실행하는 과정을 정리하였다. ㅁ Brew를 이용한 mysql과 mysql-client 설치 ㅇ brew 명령어 사용 시 자동완성기능을 이용하면 효율적이다. ㅇ brew install mysql 입력 후 탭 키를 누르면 위의 이미지처럼 install 가능한 목록을 확인 할 수 있다. ㅇ mysql과 mysql-client를 선택한 후 커멘드 실행하면 install이 시작된다. ㅁ 설치 확인 ㅇ 설치 확인을 위해 mysql --v..

ㅁ 개요 ㅇ mysql의 성능향상을 위한 구체적인 지표를 얻을 수 있는 방법을 찾고 있었다. ㅇ profiling을 통해 디비 프로세스의 다양한 성능지표를 확인하여 쿼리 성능을 확인할 수 있다. ㅁ Mysql 버젼확인 ㅇ 참고로 현재 테스트 중인 Mysql은 회사에서 사용 중인 AWS Aurora RDS와 동일한 5.7버젼에 맞추었다. ㅁ SHOW PROFILE 이란? MySQL 에서 쿼리가 처리되는 동안 각 단계별 작업에 시간이 얼마나 걸렸는지 확인 할 수 있는 기능을 제공하며 쿼리 프로파일링(Query Profiling) 기능을 제공하고 있다. 쿼리 프로파일링(Query Profiling)는 MySQL 5.1 이상에서 부터 지원한다. 메모 SHOW PROFILE은 향후 MySQL 릴리스에서 제거될 것..

ㅁ 총 연결 connection 수 확인 show status where `variable_name` = 'Threads_connected'; ㅁ 접속 IP별 connection 수 select ip, count(*) cnt from ( select left(HOST,instr(HOST,':')-1) ip from information_schema.processlist where 1 = 1 # and COMMAND = 'Sleep' -- 대기모드 ) temp group by ip order by 2 desc;

시스템을 운영하면서 데이터가 쌓이게 된다. 다량의 데이터 조회 속도를 높이기 위해 인덱스를 사용하지만, 테이블의 데이터가 많아지면 인덱스 자체의 물리적인 용량이 증가라한다. 인덱스 조차도 허용된 메모리를 넘는 어느 순간 그 테이블 조회 속도는 현저히 느려진다. 큰 테이블은 월별 혹은 일자별로 나누어 관리하는 것이 바람직하다. 내가 쓰고 있는 테이블별 용량 확인 쿼리이다. ############################################################ # 테이블별 용량 SELECT table_name, table_rows, round(data_length / (1024 * 1024 * 1024), 2) as 'DATA_SIZE(GB)', round(index_length / (..