728x90
반응형

MySQL 3

Mysql 인덱스 컨디션 푸시다운

오늘은 회사에서 계속해서 올라오던 slow query에 대해 성능 최적화를 수행한 내용을 바탕으로 해당 포스팅을 작성한다. soft delete를 사용함에 있어서 쿼리를 주의 깊게 작성해야 한다는 사실을 알고있었지만 이번 기회를 계기로 좀 더 깨달았던 것 같다.문제의 구성은 이러했다. 원래의 문제가 됐던 쿼리select count(*) from tables where 조건1 = ? and user_id = ? and deleted_at is null 유저별로 카운팅을 하지만 데이터에 맞는 카운팅 개수가 4천개를 넘어서는 순간부터 점점 응답이 느려져 4초 이상으로 가서 alert 채널에 공유가 되었다. 일단 더미데이터를 넣고 비슷하게 구성해보았다.create table test_table( id ..

DB 2025.06.25

Hikari CP Connection is not available 오류

일을 하면서 서버 에러로그에 언제부턴가HikariPool-1 - Connection is not available, request timed out after 3000ms위와 같은 에러 문구가 특정 주기를 가지고 계속 노출되었다.일단 여러가지 문제가 있었는데, 먼저 해결된 것부터 써보려고 한다.HikariCP pool size일단 내가 개발하는 서비스 특성상 특정 시간대 or CRM으로 푸시알림이 발송된 순간에 트래픽이 몰리는 경향이 있다.그래서 내가 입사하기 이전부터 서비스에선 hikari cp 권장사항인 maximum-pool-size와 minimum-idle 개수를 다르게 줬었다.물론 minimumIdle 설정 개수가 더 적었었다.그렇게 잘 유지되다가 어느날부터 트래픽이 몰리면 이제 유휴에서 max..

DB 2025.02.19

Mysql 인덱스

인덱스란? 번역을하면 바로 색인이라는 단어로 번역된다. 색인은, 검색하면 책속의 낱말이나 어떤 챕터나 구절들을 빠르게 찾아볼 수 있게 쪽수 정보를 나타내주는 것을 뜻한다. 이 개념을 DB에 적용시킨 것이다. 인덱스는 어떻게 구성하는가? 인덱스는 CREATE INDEX 키워드로 구성이 가능하다. Team 이라는 테이블이 이렇게 있다. id(primary key) name member_id grade 1 홍길동 1 1 2 가나다 2 2 3 고길동 3 3 4 나길동 4 4 이름만으로 인덱스를 구성하고 싶다면 아래와 같이 수행해주면 된다. CREATE INDEX 테이블(칼럼); CREATE INDEX team_index team(name); 이렇게 해주게 되면 name의 오름차순 순서로 정렬되게 된다. 왜 정렬..

728x90
반응형