프로그래밍/Database
프로그래밍/Database
2020. 8. 23.
[MySQL] Explain_Query 동작 방식 및 성능 파악하기
DB Schema 설계는 Business Logic에 대한 이해로부터 비롯된다. 이 때, Schema의 설계에는 2가지가 포함된다고 생각한다. Business Logic에 부합하는 Entity들을 구상하여 Entity들 간의 관계(Relation)를 확실하게 규정하는 것과 실제 사용성의 측면에서 지나치게 복잡한 구조는 지양하여, 효과적인 쿼리 수행 성능을 위한 구조를 마련하는 것이 포함된다. 이 중, Entity 들 간의 관계를 규정하는 부분에 대해서는 아래 링크의 포스팅을 통해 언급한 적이 있다. 2020/04/07 - [프로그래밍/Database] - [DB] 정규화(Normalization)와 역정규화(DeNormalization) [DB] 정규화(Normalization)와 역정규화(DeNorma..
프로그래밍/Database
2020. 8. 17.
[MySQL] Order By한 뒤, Group By하는 방법
Data가 적재된 방식에 따라 Group By의 결과가 달라지게 될 것이다. Group By를 통해 얻고자 하는 값이 Sum이거나 Count와 같이 가공이 이뤄지는 값이라면 아래의 쿼리 들은 큰 의미가 없을 것이다. 하지만 만약에 데이터가 기록된 시간 또는 업데이트 된 시간에 따라 정렬한 뒤 Group By를 하고자 하는 경우가 있을 것이다. 간단하게 생각하여 쿼리를 작성한다면 아래와 같을 것이다. SELECT * FROM order_book ORDER BY created_at DESC GROUP BY product; 하지만 위의 쿼리는 에러가 발생한다. Depth가 동일한 쿼리에서 Order By와 Group By를 동시에 사용할 수 없다는 의미의 쿼리 에러가 발생하는 것이다. 그렇다면, Sub Que..
프로그래밍/Database
2020. 8. 5.
[MySQL] Roll-Up Query
Roll Up 쿼리는 Group By와 함께 사용되는 조건 구문이다. Group By 쿼리에 의해서 grouping된 결과에 대해서 보다 상세한 정보를 반환하는 기능을 수행한다. ROLLUP 쿼리를 사용한다면 그룹화된 row들에 대한 중간 합(결과)에 대한 새로운 row가 추가되어 쿼리의 결과를 얻을 수 있게 된다. 아래의 정보들이 저장되어 있다고 할 경우, ROLLUP 쿼리를 쓴 결과는 아래와 같다. warehouse product model quantity San Francisco Apple iPhone XS 50 San Francisco Apple iPad Pro 10 San Francisco Apple Apple Watch 200 San Francisco Samsung Z Flip 200 San ..
프로그래밍/Database
2020. 5. 15.
[MySQL] 동시성 문제의 해결을 위한 for update
2020/05/09 - [프로그래밍/Database] - [MySQL] Lock wait timeout exceeded [MySQL] Lock wait timeout exceeded 기존에 정상적으로 동작하던 API에서 간헐적으로 Timeout Error가 발생하기 시작했다. Cloudwatch Log에서 다음과 같은 에러 메시지를 확인하였고, 외부 연동 포인트가 아닌 DB에서 발생한 문제 임을 알�� jaenjoy.tistory.com Lock wait timeout exceeded 문제를 직면하고 이를 해결하는 과정에서 새롭게 학습하고, 기존의 지식을 재정리하게 된 또 하나의 주제로 For Update를 다뤄보고자 한다. Web Service의 특징과 필수 조건 For Update에 대한 글 이전에 ..
프로그래밍/Database
2020. 5. 12.
[MySQL] MyISAM과 InnoDB_MySQL storage engine
2020/05/09 - [프로그래밍/Database] - [MySQL] Lock wait timeout exceeded [MySQL] Lock wait timeout exceeded 기존에 정상적으로 동작하던 API에서 간헐적으로 Timeout Error가 발생하기 시작했다. Cloudwatch Log에서 다음과 같은 에러 메시지를 확인하였고, 외부 연동 포인트가 아닌 DB에서 발생한 문제 임을 알�� jaenjoy.tistory.com 지난 Lock wait timeout exceeded 포스팅에서 언급한 적이 있던 innodb에 대해 설명해보고자 한다. Storage Engine 스토리지 엔진(Storage Engine)이란 물리적 저장장치에서 데이터를 읽어오는 역할을 담당하는 부분이다. "데이터를 ..
프로그래밍/Database
2020. 5. 9.
[MySQL] Lock wait timeout exceeded
기존에 정상적으로 동작하던 API에서 간헐적으로 Timeout Error가 발생하기 시작했다. Cloudwatch Log에서 다음과 같은 에러 메시지를 확인하였고, 외부 연동 포인트가 아닌 DB에서 발생한 문제 임을 알게 되었다. Lock wait timeout exceeded; try restarting transaction Lock Timeout이 발생하는 원인 1. Transaction 수행 시간이 긴 경우 Lock Timeout이 발생하는 것은 하나의 Transaction이 처리되는 데에 시간이 오래 소요되는 경우이다. 실제로 에러가 간헐적으로 발생하는 API는 Bulk 요청이 주로 이뤄지는 API들이다. Bulk 요청이기 때문에 Transaction 관리를 보다 철저하게 처리해주었는데, Tran..
프로그래밍/Database
2020. 4. 15.
In-Memory Cache (인-메모리 캐시)
In-Memory Computing 인-메모리 컴퓨팅이란 Application이 운영을 위한 데이터를 하드 디스크가 아닌 메인 메모리에서 수행하는 것을 말한다. 즉, 연산을 위한 영역으로만 여겨졌던 메모리 영역을 대량의 데이터를 저장하여 처리할수 있는 공간으로 사용하는 것이다. 기술적/비용적 측면에서는 과거 Main Memory의 가격이 상대적으로 높았기 때문에 Memory 영역을 사용하는 것이 불가능/비효율적이었지만, Memory의 가격이 낮아진 오늘 날에는 가능해지고, 보편화된 기술이 되었다. In-Memory 컴퓨팅/아키텍쳐는 데이터의 절대적인 양과 종류가 폭발적으로 증가한 빅데이터 시대에 데이터 처리 속도를 향상시킬 수 있는 핵심 기술로 평가받고 있다. 왜 Cache를 사용하는가? Cache(캐시..
프로그래밍/Database
2020. 4. 7.
[DB] 정규화(Normalization)와 역정규화(DeNormalization)
정규화 관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스를 정규화(Normalization)라고 한다. (출처 Wikipedia) Data Model 과정에서 Entity 사이의 관계(Level, Depth 등)를 분석하여 다수의 Relation으로 분리하는 과정을 말한다. 정규화는 이렇게 함으로써 데이터의 일관성(Consistency)과 모델의 응집도(Cohesion)를 높이는 것을 지향한다. 정규화는 일관성(Consistency)을 향상시킨다. 정규화는 하나의 논리적 Database에서 여러 테이블에 동일한 데이터(column)가 관리되지 않도록 설계하는 과정이다. 만약, 여러 테이블에서 필요한 데이터라면 해당 Entity의 Level은 최상위 Level에 속하게 될 것이고..
프로그래밍/Database
2020. 3. 29.
[DB] 트랜잭션(Transaction)이란?
Transaction이란? 데이터베이스의 상태를 변화시키기 위해서 수행해야 할 연산들의 집합으로 하나의 작업 처리를 위한 논리적 단위를 뜻한다. 데이터베이스의 상태를 변화시킨다는 것을 간단하게 표현하면, SELECT, INSERT, DELETE, UPDATE의 쿼리를 사용하여 DB에 접근하는 것을 의미한다. 일반적인 경우, 작업 처리의 단위는 한 건의 쿼리(즉 연산)가 아닌 여러 개의 연산이 복합적으로 구성되는 것이 일반적이다. 현재 작성하고 있는 글을 등록하는 작업을 생각해보자. 글의 내용을 작성한 뒤, 등록 버튼을 눌렀을 때 새로운 글이 등록된 최신 글 목록이 보여지는 작업 처리의 단위는 등록할 때의 INSERT와 최신 리스트를 보여주는 SELECT가 하나의 단위에서 구성되는 것으로 이러한 작업의 단..