전체 글
-
1장 데이터 저장 구조 및 I/O 메커니즘✏️ 스터디 모음집/친절한 SQL 튜닝 2024. 4. 15.
1. 인덱스 레인지 스캔 vs 풀스캔 풀스캔은 항상 느리다? 무조건 쿼리는 인덱스를 타야한다? -> NO "인덱스 레인지 스캔은 큰 테이블에서 소량의 데이터를 읽을때 효율적이다. " 2. SQL이 느리다면 십중팔구 I/O 때문 디스크 I/O 때문 디스크 I/O = SLEEP 디스크 I/O가 발생하는동안 프로세스는 wait 상태로 빠진다. 3. 데이터베이스 저장 구조 테이블스페이스 : 세그먼트를 담는 콘테이너, 여러개의 데이터 파일로 구성 세그먼트 : 테이블, 인덱스 처럼 데이터 저장공간이 필요한 오브젝트 익스텐트 : 공간을 확장하는 단위 블록 : 사용자가 입력한 레코드를 실제로 저장하는 공간, 페이지 익스텐트 내 블록은 연속적인 공간 익스텐트 끼리는 연속된 공간이 아니다. 테이블 세그먼트 헤더에는 각 익..
-
글또 8기 회고🤔 개인 회고 2023. 7. 16.
올해 1월 삶의 지도를 작성해보는 활동을 시작으로 벌써 8기 마지막 활동이 되었다. 그동안 작성한 글들을 보며 상반기 회고를 진행했다. [글또 8기] 삶의 지도 삶의 지도 “10년 후에는 어떤 개발자가 되고 싶은가?”에 대한 질문을 받을 때가 있다. 나는 이 질문의 시점은 미래이지만, 핵심은 과거에 초점이 맞추어져 있다고 생각한다. 내가 어떤 목표를 neverfadeaway.tistory.com # 와 그런건 어디에서 알게 되셨나요? 글또 활동을 시작하기 전에는 나와 비슷한 직무를 하고 있는 사람들을 만나 이야기를 나누어본 경험이 많지 않았다. 어쩌면 그동안은 방법을 잘 몰랐던 것 같다. 늘 주변에 새로운 개발 트랜드나 외부 활동에 대해 빠삭한 분들을 보면 와 그런건 어디에서 알게 되셨나요? 이렇게 묻고..
-
Docker-Compose로 InnoDB 클러스터 구축 실습 환경 구성하기✏️ 스터디 모음집/RealMySQL 스터디 2023. 7. 2.
https://dev.mysql.com/blog-archive/docker-compose-setup-for-innodb-cluster/ MySQL :: Docker Compose Setup for InnoDB Cluster In the following we show how InnoDB cluster can be deployed in a container context. In the official documentation (Introducing InnoDB Cluster), InnoDB is described as: MySQL InnoDB cluster provides a complete high availability solution for MySQL. MySQL She dev.mysql.com Re..
-
친절한 SQL 튜닝 교육과정 수료 후기 및 MongoDB에서 쿼리 최적화 도전🤔 개인 회고 2023. 6. 18.
최근 Real MySQL 스터디를 진행하면서 데이터베이스에 대해 더 관심을 갖게 되었는데, 그러던 중 글쓰기 모임에서 만난 한 개발자분이 해당 강의를 함께 듣자고 추천해주셨고 강의를 들은지 어느덧 4일간의 교육과정이 끝나게 되었다. 32시간이라는 짧은 시간동안 쿼리 최적화 부분을 공부하면서 그동안 스스로 잘못 알고있었던 부분들이 많았구나 하는 것을 느꼈다. 그리고 당장 회사에가서 slow query를 찾아서 개선해봐야지! 하는 의욕도 생기게 되었다. 💪 # 오라클 경험이 없고, 실무에서 오라클을 쓰지 않는데도 효과가 있을지? 회사에서는 주로 OLTP용으로는 MongoDB와 MySQL을 사용하고, OLAP용으로는 BigQuery와 Snowflake를 사용한다. 그래서 처음 강의를 수강하기 전에 과연 강의에..
-
Real MySQL 8.0 - 9.3 인덱스 컨디션 푸쉬다운✏️ 스터디 모음집/RealMySQL 스터디 2023. 5. 21.
위 그림과 같이 인덱스 컨디션 푸쉬 다운을 활성화 하면, 복합인덱스 테이블에서 인덱스를 활용하지 못하는 조건이라도 인덱스 테이블 내에서 모든 체크 조건을 처리할 수 있으면, 불필요한 랜덤 디스크 I/O 읽기를 수행 하지 않는다. 인덱스 컨디션 푸쉬다운 활성화 여부 확인하기 optimizer_switch 시스템 변수 내 index_condition_pushdown 설정을 통해 index_condition_pushdown을 사용할지 아닐지를 제어할 수 있다. set optimizer_switch='index_condition_pushdown=on'; show variables like 'optimizer_switch'; 인덱스 컨디션 푸쉬다운 테스트 해보기 테스트용 테이블 준비 - 더미 csv 파일 impo..
-
2023년 3월 회고🤔 개인 회고 2023. 4. 14.
날씨가 아직은 추워서 아직도 겨울인것 같은데 벌써 3월이 지나갔다니 이제 계절에도 둔감해지는 기분이 든다. fastAPI + GraphQL 환경에서 테스트 코드 작성하기 fastAPI + GraphQL 환경에서 e2e 테스트와 일부 계산 로직이 포함된 함수에 유닛 테스트를 작성했다. e2e 테스트 코드의 경우 테스트용 DB에 붙어서 수행되기 때문에 신경써야 할 부분들이 많은 것 같다.(테스트 DB 마이그레이션, 테스트용 더미 데이터 생성, 테스트 수행 속도 저하 등) 그래서 e2e테스트 코드는 각 API에 대해서만 작성을 하고, graphQL의 resolver 들에 대한 부분은 유닛테스트 코드를 작성하려고 했다. 그런데 현재는 graphQL의 각 resolver 함수에 대한 유닛테스트 코드를 작성하지 못..
-
redis 백업의 과정😱 삽질 이슈 기록 2023. 4. 9.
문제 상황 로그 이전에 관한 Job 정보들을 생성해 redis에 적재한 후, 테스트로 Job 단위로 작업을 수행 하던 중, 실수로 Redis 컨테이너를 중지 시켜버리는 문제가 발생 했고, 일부 Job 정보의 변경사항을 날리게 되었다. 만약 테스트를 처음부터 실행하려고 한다면 작업 실행 정보를 다시 redis에 적재하는 초기화 작업을 수행해야 하는 상황이였다. 작업에 대한 정보를 생성하는 작업의 경우 시간이 소요되는 작업이였기 때문에 적재를 하기 때문에 이 작업 부터 다시 시작하는건 비효율 적인 상황 이였다. 해결 다행히 작업 시작 전 혹시 작업을 처음부터 다시 돌려야 하는 상황이 생긴다면, redis에 작업 정보들을 적재하는 작업부터 다시 하지 않도록 적재된 모든 작업 정보의 초기 상태를 백업 해 두었다..
-
Real MySQL 8.0 - 9.3 고급 최적화 - MySQL의 조인 방식들✏️ 스터디 모음집/RealMySQL 스터디 2023. 3. 26.
테스트 데이터 생성 DELIMITER $$ DROP PROCEDURE IF EXISTS gen_data$$ CREATE PROCEDURE gen_data( IN v_rows INT ) BEGIN DECLARE i INT DEFAULT 1; create table tb_test1( no bigint, col1 varchar(100), col2 varchar(100), col3 varchar(100) ); WHILE i 1 and b.no > 2; Nested Loop Join의 경우 실행계획의 Extra 컬럼에 별도 표시되는 항목이 없다. 😱 Nested Loop Join에서 주의 할 점 어떤 테이블이 먼저 액세스 되느냐에 따라서 속도의 차이가 크게 날 수 있다. 그렇기 때문에 어느 테이블을 드라이빙 테이..