DB 6

MySQL eq_range_index_dive_limit 를 활용한 쿼리 수행시간 개선 및 실무에서 발생할 수 있는 연관된 문제

배경 의도치 않게 쿼리 수행시간이 증가하거나 이슈가 발생하는 부분 중 하나인 쉽게 발생하지만 원인파악이 쉽지 않은 부분에 대한 내용입니다. IN절로 인한 쿼리 수행시간이 증가하는 것에 따른 원인파악과 해결방법에 대해서 다룹니다. IN절에 들어가는 개수에 따라 쿼리 수행시간이 급격하게 나빠지는 경우가 존재하기 때문입니다. 설정값 eq_range_index_dive_limit eq_range_index_dive_limit IN 절에 길게 중첩되었을때 쿼리 속도를 높이는데 사용되는 값이다. 이 값 이상이라면 옵티마이저는 인덱스 다이빙을 수행하지 않고 기존 인덱스 통계를 사용한다. 0으로 설정하면 항상 인덱스 다이빙을 수행한다. 아래와 같은 쿼리가 있을 때, col_name IN(val1, ..., valN) ..

[JDBC] MySQL 드라이버 Class.forName()의 비밀 - 로드만 했을 뿐인데 getConnection()이 가능하다고?

도대체 JDBC드라이버는 Class.forName()으로 로딩만 했을 뿐인데 어떻게 DriverManager 에서 사용이 되는 것일까? Class.forName의 호출 Class 클래스는 JVM에서 동작할 클래스들의 정보를 묘사하기 위한 일종의 메타 클래스이다. 객체의 참조 카운트가 0가 되면 해당 인스턴스는 더 이상 가리키는 참조 변수가 없는 것이므로 GC의 대상이 된다. 그런데 JDBC는 생성시키고 끝난다. 그러면 GC가 되지 않도록 하는 무언가가 있다고 한다. JDBC 드라이버와 같이 인스턴스를 별도로 관리하지 않는 대부분의 클래스의 경우, 그 클래스가 스스로의 인스턴스를 정적 블록을 통해 생성하고 관리한다. 정적 블록을 갖는 클래스들은 Class.forName() 만 호출해도 초기화가 수행된다. ..

프로그래밍/Java 2019.06.04 (5)

[데이터베이스] 동시 실행 제어 (Concurrency Control)와 공유 lock, 배타적 lock에 대해서

동시 실행 제어1. 락에 대해서 Lock - Based Protocol Lock이란 자원에 액세스하는 환경에서 순차적으로 제어할 수 있는 매커니즘이다. lock은 2가지로 분류할 수 있다. 1) Exclusive Lock : (X mode) 배타적 Lock은 여러 트랜잭션이 한 데이터에 접근할 수 없다. 2) Shared Lock : (S mode) 공유 락은 읽기 동안에만 일어나며 여러 트랜잭션이 동시에 한 데이터를 읽을 수 있다. Shared lock 끼리는 충돌하지 않는다. 하지만 Exclusive Lock과는 호환되지 않는다. 예를 보면 처음에 A 는 $100 B는 $200 을 가지고 있는데 B가 A에게 $50을 보내는 시나리오이다. T1이 자원 B에게 쓰기 위해서 배타적 락을 건다. B-50을 ..

[데이터베이스] 트랜잭션(Transaction)에대한 고찰

데이터베이스 트랜잭션데이터베이스 트랜잭션이란 데이터베이스의 상태를 변화시키는 프로그램의 작업 단위이다. 1. SQL 표준에서의 Transaction제일 첫 번째 SQL 문이 자동으로 Transaction 의 시작Commit을 호출하면 트랜잭션 종료Rollback을 호출하면 트랜잭션 취소AutoCommit 모드일 경우 SQL 문장 하나 단위로 Transaction 2. Transaction의 성질 (ACID) 2-1. 원자성 (Atomicity)트랜잭션의 작업들이 모두 수행되거나 전혀 수행되지 않아야 한다.. (all or nothing)트랜잭션이 부분적으로 수행된다면 데이터베이스에 반영되지 않아야 한다. 그렇지않다면 데이터베이스의 상태가 inconsistent해진다. 2-2. 지속성 (Durability..

프로그래밍/Database 2018.12.16 (2)

[데이터베이스] 쿼리 최적화에 대해서 (Query Optimization)

데이터베이스 쿼리 최적화에 대해서두 개의 relational algebra 표현식이 데이터베이스 인스턴스에서 항상 같은 튜플들을 반환한다면 그것은 동등(equivalent)하다고 한다. (순서는 상관 없음) 참고) 스키마 : 데이터베이스의 논리적 구조, 인스턴스 : 특정시간에 사진을 찍었을 때 그 테이블의 모습. 즉 튜플들의 전체적인 모습 Equivalence Rules이 중에 대표적인 것들을 보자. 1. 네추럴 조인 (Natural Join)은 associative(동일)하다. 2. select연산의 동등성테이블 E1과 E2는 각각 1000개의 튜플을 가지고 있다고 하자. (조건은 세타제로 조건을 만족하는 것은 10개밖에 없다고 가정하자)왼쪽 식에서는 먼저 조인을 시도 한다. 각각 1000개니까 조인하..

프로그래밍/Database 2018.12.16 (2)

[인턴 일지] 스프링 각종 코드 수정 작업 중, 잔 버그 해결

직원 등록 form 에서 3개의 페이지에 걸친 직원 들의 정보를 입력하고 REGISTER 버튼을 누르면 DB에 접근해서 데이터를 넣게 된다. 문제가 없을 줄 알고 DB에 엑셀을 이용해서 데이터를 넣고 있었다. 하지만 실제 사용자가 쓰는 곳은 웹 ui상이므로 나도 테스트 기간에는 데이터를 웹에서 직접 입력한다. 그런데 생각보다 많은 예외와 에러가 발생한다... validation 체크가 확실하게 다 되지 않아 unexpected 한 값이 넘어가는 것을 잡지 않아서 톰캣 로그에서 error가 터진다. 대표적인것은 Duplicate PRIMARY KEY 이다. DB 직원 정보 테이블은 SSN Number (소셜 시큐리티 넘버) 를 주요키로 가지게 된다. 이것은 중복된 값이 들어갈 수가 없다. 사용자는 첫 페이..