본문 바로가기
반응형

DB14

[mysql/DB] 실행 계획 보통의 DBMS 의 목적은 데이터를 안전하게 저장 및 관리하고 사용자가 원하는 데이터를 빠르게 조회할 수 있게 해주는이다. 이러한 목적을 달성하려면 옵티마이저가 사용자의 쿼리를 최적으로 처리될 수 있게 쿼리의 실행 계획을 수립할 수 있어야 한다.하지만 옵티마이저는 사용자, 관리자의 개입없이 항상 좋은 실행계획을 만들어 내는것은 아니다. 이러한 문제를 보완할 수 있도록 EXPLAIN 명령으로 옵티마이저가 수립한 실행계획을 확인 할 수 있게 해준다. MySQL 서버의 실행계획에 가장 큰 영향을 미치는 통계정보, 실행 계획 읽는 순서, 실행계획 출력되는 키워드 등에 자세히 알아보려고한다.   통계정보 MySQL 8.0 이전에는 개괄적인 정보를 가지고 실행계획을 수립했기 때문에 정확성이 떨어졌다. 그래서 8.0.. 2024. 8. 7.
[mysql/DB] 옵티마이저 옵티마이저, 힌트는 저번에 한 번 다뤄본적이 있다. 기본 데이터를 비교해 최적의 실행 계획을 수립하는 작업이 필요한데 이 기능을 옵티마이저가 담당한다. 옵티마이저는 DB 서버에서 두뇌와 같은데, 현재 DBMS 는 비용 기반 최적화를 사용하고 과거에는 규칙 기반 최적화 방법을 사용했다 데이터 읽기결과물은 동일하더라고 RDBMS 별로 그 결과를 만들어 내는 과정은 다 다르다.일반적으로 테이블의 전체 크기는 인덱스 보다 훨씬 크기 때문에 테이블을 처음부터 읽는 작업은 상당히 많은 디스크 읽기가 필요하다.그래서 대부분 DBMS는 풀 테이블 스캔을 실행할 때 여러개의 블록이나 페이지를 읽어오는 기능을 내장하고 있다. 즉 하나씩 읽어오는 것이 아니다. (InnoDB 에서는 틀린말) InnoDB 엔진은 특정 테이블의.. 2024. 7. 29.
[mysql/DB] 인덱스, B-Tree, Hash 인덱스 제일 공부를 하고 싶었던 것이다. 보통 성능 개선을 말할때 인덱싱을 걸거나 분산처리(샤딩, 파티셔닝, 레플리카, 페더레이션) 등 이 있다. 그 중 가장 중요한 인덱스에 대해 알아보려고한다. 인덱스란 보통 책 맨 뒤 "찾아보기" 를 언급한다.  책의 "찾아보기"와 , 인덱스 의 공통점은 정렬이다 DMBS 의 인덱스는 SortedList 처럼 저장되는 칼럼의 값을 이용해 항상 정렬된 상태를 유지하고. 데이터 파일은 ArrayList 처럼 순서대로 별도의 정렬없이 그대로 저장한다. 그럼 SortedList 의 장단점이 인덱스의 장단점이 될 수 있다.항상 정렬 해야한다.insert, update, delete 처리가 느리다select 속도 엄청 빠르다.이미 정렬 되어있어 원하는 값을 빠르게 가져올 수 있.. 2024. 7. 24.
[mysql/DB] 데이터, 테이블압축, TableSpace 복사 디스크의 데이터 파일이 크면 클 수록 쿼리를 처리하기 위해서 더 많은 데이터 페이지를 InnoDB 버퍼풀로 읽어야 하거나, 새로운 페이지가 버퍼 풀로 적재되기 때문에 그만큼 더티 페이지가 더 자주 디스크로 기록돼야 한다. 페이지 압축 VS 테이블 압축 페이지 압축 : 서버가 디스크에 저장하는 시점에 데이터 페이지가 압축되어 저장되고, 디스크에서 데이터 페이지를 읽어 올때 압축이 해제된다.즉 버퍼 풀에  데이터 페이지가 한 번 적재되면 InnoDB 스토리지 엔진은 압축이 해제된 상태로만 데이터 페이지를 관리한다.문제점 은 압축한 결과가 얼마나 될지 예측 불가능하고, 하나의 테이블은 동일한 크기의 페이지로 통일되어야 한다.  펀치 홀 : 페이지 압축 기능은 운영체제별로 특정 버전의 파일 시스템에서만 지원된다.. 2024. 7. 22.
[mysql/DB] 트랜잭션, 잠금 ,동시성 잠금 : 동시성을 제어하기 위한 기능여러 커넥션에서 동시에 동리한 자원을 요청할 경우 순서대로 한 시점에는 하나의 커넥션만 변경할 수 있게 해주는 역할트랜잭션: 데이터의 정합성을 보장하기 위한 기능MyISAM : 트랜잭션 지원XInnoDB : 트랜잭션 지원트랜잭션의 범위를 최소화 하는 것이 좋다. 범위가 넓으면 DBMS 서버가 높은 부하 상태로 빠지거나 위험한 상태로 빠지는 경우가 번번히 발생한다.MySQL 에서의 잠금레벨스토리지 엔젠 레벨 : 모든 스토리지 엔진에 영향xMySQL 엔진 레벨 : 모든 스토리지 엔진에 영향o 락 을 사용하는 이유는  데이터베이스는 여러 사용자들이 같은 데이터를 동시에 접근하는 상황에서, 데이터의 무결성과 일관성을 지키기 위해 락을 사용한다.과거에 레디스를 사용한 동시성 문.. 2024. 6. 21.
[mysql/DB] 트랜잭션 언두로그?, 리두로그?, 버퍼?, 어댑티브 해시 인덱스? 언두 영역은 insert, update ,delete 같은 문장으로 데이터를 변경했을 때 변경되기 전의 데이터 를 보관하는 곳이다.벽계수 → 수지 로 업데이트 쿼리를 날릴때때 사용자가 커밋하면 현재 상태가 그대로 유지되고, 롤백하면 언두 영역의 백업 된 데이터를 다시 데이터 파일로 저장한다.⇒ 언두 테이블스페이스(저장되는 공간) 언두 로그트랜잭션 롤백 대비용트랜잭션의 격리 수준을 유지하면서 높은 동시성 제공 트랜잭션이 완료되었다고 해당 트랜잭션이 생성한 언두 로그를 즉시 삭제 할 수 있는것은 아니다.A→B→C 순으로 트랜잭션이 시작됐지만 B,C는 완료되었고 A는 아직 종료되지 않았을때 삭제되지 않는다.InnoDB 스토리지 엔진은 언두 로그의 이력을 필요한 만큼 스캔해야만 필요한 레코드를 찾을 수 있기 때.. 2024. 6. 18.
반응형