본문 바로가기

분류 전체보기262

MYSQL 디스크 용량이 거의 다 찼어요 SQL 튜닝하려고 개발 DB를 multi instance로 구축해놓고 필요할 때 migration 해서 사용하는데 mirgration 에러가 나서 확인해보니 디스크용량이 부족하다고 한다.. 근데 디스크 빵빵한 걸로 알고 있는데??? 일단 파티션별로 디스크 용량을 확인해본다 # df -Th Filesystem Type Size Used Avail Use% Mounted on /dev/sda2 ext4 20G 4.0G 15G 22% / tmpfs tmpfs 16G 0 16G 0% /dev/shm /dev/sda1 ext4 477M 142M 310M 32% /boot /dev/sda5 ext4 20G 9.7G 9.0G 52% /usr /dev/sda7 ext4 3.9G 927M 2.8G 26% /var /de.. 2024. 2. 26.
[MySQL] DB 용량 확인, 테이블별 용량 확인 ㅁ 들어가면서 MySQL의 용량을 분석하기 위한 쿼리를 정리하였습니다. update... 댓글의 질문 때문에 확인한 결과, 테이블이 뷰인 경유 용량과 건수는 null로 나타난다. ㅁ 데이터베이스 용량 확인 SELECT table_schema AS 'Database', ROUND(SUM(data_length+index_length)/1024/1024, 1) AS 'Size(MB)' FROM information_schema.tables WHERE table_schema not in ('sys', 'mysql', 'information_schema', 'performance_schema') GROUP BY table_schema ORDER BY 2 DESC; ㅁ 전체 용량 확인 SELECT ROUND(SUM.. 2024. 2. 26.
친절한 SQL 튜닝 스터디 인덱스 설계가 어려운 이유 인덱스가 많으면 아래와 같은 문제가 생긴다 DML 성능 저하 (TPS 저하) 데이터베이스 사이즈 증가 (디스크 공간 낭비) 데이터베이스 관리 및 운영 비용 상승 테이블에 인덱스가 여러개 달려 있으면, 신규 데이터를 입력할 때마다 여러개의 인덱스에도 데이터를 입력해야 한다. 테이블과 달리 인덱스는 정렬 상태를 유지해야 하므로 수직적 탐색을 통해 입력할 브,ㄹ록부터 찾는다. 찾은 블록에 여유공간이 없으면 인덱스 분할(Index Split)도 일어난다. 테이블에 데이터가 변경될 때, 3개의 인덱스에도 똑같이 수정해준다. 핵심 트랜잭션이 참조하는 테이블에 대한 DML 성능 저하는 TPS 저하로 이어진다. 필요하지 않은 인덱스를 많이 만들면 디스크 공간을 낭비한다. 데이터베이스 사이즈가.. 2024. 2. 25.
[MySQL] 인덱스(INDEX) 정리(효과적인 INDEX 설계) 개요 MySQL 스키마 설계는 자주 해보았지만 효율적인 데이터타입, 인덱스 설계에 대한 부분은 이해도가 낮은 것 같아 조사 후 남기는 포스팅이다. 인덱스의 개념 인덱스는 테이블의 동작속도(조회)를 높여주는 자료구조이다. 인덱스로 데이터의 위치를 빠르게 찾아주는 역할이고 쉽게 예를 들어보면 책 뒷편에 '색인'이 인덱스의 역할과 동일하다고 볼 수 있다. (예를들어 '홍길동'이라는 단어를 찾고싶으면 색인페이지에서 '홍'으로 시작하거나 'ㅎ'으로 시작하는 색인을 찾아보면 빠르게 찾을 수 있다.) 인덱스는 MYI(MySQL Index)파일에 저장되며, 인덱스가 설정되지 않았다면 Table Full Scan이 일어나 성능이 저하되거나 치명적인 장애가 발생한다. 조회속도는 빨라지지만 UPDATE, INSERT, DE.. 2024. 2. 25.
MySQL튜닝5) 튜닝 기본 예제 1. 실습 데이터 세팅 - 실습 데이터 URL : https://github.com/7ieon/SQLtune - 실습 데이터 정보 2. SQL문 단순 수정으로 착한 쿼리 만들기 1) 사원번호가 1100으로 시작하면서 사원번호가 5자리인 사원 정보 출력 # AS_IS -- 0.329 sec / 0.000 sec SELECT * FROM 사원 WHERE SUBSTRING(사원번호,1,4) = 1100 AND LENGTH(사원번호) = 5 # Tuning - 기본키인 사원번호 접근 시 WHERE 절에서 가공하여 접근 => Table Full Scan이 발생 (type = 'ALL') # TO_BE -- 0.000 sec / 0.000 sec SELECT * FROM 사원 WHERE 사원번호 BETWEEN 11.. 2024. 2. 25.
데이터베이스 설계와 구축(개정판) (2009년) 데이터베이스 설계 단계에서 튜닝하기 데이터 정합성을 유지할 수 있는 대책을 마련하고, 성능을 위해 필요하다면 테이블, 컬럼, 관계에 대해 반정규화를 적용한다. 대용량 테이블의 경우 필요한 데이터에 대해서는 파티셔닝을 이용하여 테이블 분할을 검토한다. 이력을 관리해야 하는 테이블에 대해서는 필요하다면 시작과 종료나 현재 상태 등을 명확하게 명시하여 SQL 문장의 실행 성능을 보장한다. 테이블 접근 유형에 따라 전체 스캔 방식이나 B 트리 인덱스, 비트맵 인덱스, 클러스터링과 해싱 적용 등을 고려한다. 테이블이 조회를 주로 하는지 입력,수정,삭제 작업이 주로 발생하는지를 고려하여 적당한 인덱스 개수를 지정해야 한다. 극단적으로 조회만 발생하는 경우에는 테이블에 인덱스가 많이 있어도 무방하지만, 입력, 수정,.. 2024. 2. 24.