서비스 운영 중 테이블 컬럼을 추가해야 하는 경우가 있다. 이런 경우 MySQL 테이블에는 Lock이 걸릴까? MySQL 8.0 이상일 때는 InnoDB 테이블의 컬럼 추가 작업에 대해 온라인 DDL 방식을 지원한다.
GROUP_CONCAT 을 사용하여 특정 레코드의 값들을 합치는 MySQL 쿼리문에서 문제가 발생했다.
인덱스의 자료 구조인 B-Tree와 클러스터형 인덱스, 보조 인덱스의 차이를 알아보자.
회사 서비스의 특정 API 호출 시 응답 시간이 12초 이상 소요되는 문제가 발생했다. 고객들이 자주 조회하는 페이지라서 개선이 시급해보였다. 우선 해당 API의 쿼리 문제가 있는지 알아보기 위해 실행 계획을 분석해보기로 했다.
MySQL로 탈퇴한 회원들의 개인 정보를 에스터리스크(*)로 마스킹하는 UPDATE 쿼리를 날렸다. 테스트를 위해 특정 아이디를 WHERE 조건으로 잡았는데 ROW 2개가 UPDATE 되었다. 무슨 일인지 살펴보니 두 아이디는 나머지 문자열은 다 같은데 하
MySQL 데이터베이스 백업(dump)과 복구(restore)를 하면서 발견한 에러와 해결방법 정리
죽지도 않고 또 다시 온 MySQL sql_mode ONLY_FULL_GROUP_BY 에러🤯 매번 sql_mode를 해제하는 방식으로 해결해왔지만 이번에는 근본적인 문제를 이해하고 쿼리를 수정해보기로 했다.에러의 전문은 다음과 같다.
회사 서비스의 관리자 페이지를 개발하던 중 일별 통계를 보여줘야 하는 요구사항이 생겼다. 처음에는 단순하게 생각했지만 DB에 입력된 날짜들로 GROUP BY를 한다면 데이터가 입력되지 않은 경우 빈 날짜가 발생하게 된다는 문제가 있었다.
특정 MySQL 쿼리에서 최소 30초 이상, 최악의 경우 timeout까지 걸리는 경우가 발견됐다. 해당 쿼리는 서브쿼리 내에서 COUNT를 수행하고 있었는데, 실행계획을 확인해보니 서브쿼리가 테이블 FULL SCAN을 하는 것을 확인할 수 있었다.