반응형

db 10

MYSQL 5.7 특징

JSON 지원 일반적으로 text 컬럼에 json 데이터를 넣으면 나중에 검색할 때 어려움이 많습니다. 데이터를 모두 읽어서 다시 파싱하고, 특정 항목을 찾아서 테이블의 별도 컬럼에 저장한 다음에 그 컬럼으로 인덱스 생성하는 등 작업할게 많습니다. 하지만 이제 native json 데이터 타입 컬럼에 넣어두면 이 모든 작업을 간편하게 진행할 수 있습니다. 쿼리 성능 향상 임시 테이블 엔진 변경 기존에는 sub query를 사용할 때 만들어지는 임시 테이블이 MyISAM이었습니다. 그런데 MYSQL 5.7부터는 INNODB 엔진으로 바꾸면서 성능이 더 좋아졌습니다. UNION ALL 수정 더 이상 UNION ALL을 진행할 때, 임시 테이블을 생성하지 않습니다. Optimizer Hint 수정 Optimi..

DB/MYSQL 2022.04.23

Clustering Factor

Clustering Factor란 Clustering Factor란 Index의 테이블에 대한 정렬 정도를 의미합니다. 정렬 정도를 측정하기 위해 DB는 Index를 scan하는 동안 방문하게 되는 Table의 데이터 블록의 갯수로 나타냅니다. 이는 Clustering Factor가 높아지면 읽어들이는 Data Block의 갯수가 많아지기 때문에 Physical Read가 높게 나온다는 것을 의미합니다. Physical Read는 성능과 밀접한 관련이 있기 때문에 Clustering Factor를 최소화하는 것이 튜닝의 중요 요소 중 하나라고 할 수 있습니다. Good Clustering Factor Good Clustering Factor란 Index 순서와 Table의 순서가 거의 완벽하게 일치하는 ..

DB/일반 2022.04.17

Optimizer

Optimizer의 개념 Optimizer란 SQL 개발자가 SQL을 작성하고 실행할 때, Optimizer는 SQL을 어떻게 실행할 것인지를 계획합니다. Optimizer는 SQL 실행 계획을 수립하고 SQL을 실행하는 DBMS의 소프트웨어입니다. 동일한 결과가 나오는 SQL도 어떻게 실행하느냐에 따라 설능이 달라집니다. Optimizer 특징 Optimizer는 데이터 딕셔너리에 있는 오브젝트 통계, 시스템 통계 등의 정보를 사용해서 예상되는 비용을 산정합니다. Optimizer는 여러 개의 실행 계획 중에서 최저 비용을 가지고 있는 계획을 선택해서 SQL을 실행합니다. Optimizer의 필요성 개발자가 작성한 SQL문을 어떻게 실행하느냐에 따라 성능이 달라집니다. Optimizer가 비효율적으로 ..

DB/일반 2022.04.03

Index Scan 종류

Index Range Scan B-tree 인덱스의 가장 일반적이고 정상적인 형태의 액세스 방식입니다. 인덱스 루트에서 리프 블록까지 수직적 탐색을 하고 필요한 범위만큼 수평정 탐색하는 스캔 방식입니다. Index Range Scan을 하려면 선두 컬럼을 가공하지 않은 상태로 조건절에 사용해야 합니다. Index Full Scan Index Full Scan은 수직적 탐색 없이 인덱스 리프 블록 처음부터 끝까지 수평적으로 탐색하는 방식입니다. 데이터 검색을 위한 최적의 인덱스가 없을 때 차선으로 선택됩니다. 만약, 인덱스 선두 컬럼이 조건절에 없으면 옵티마이저는 먼저 Table Full Scan 방식을 고려합니다. 그런데 대용량 테이블인 경우에 Table Full Scan 방식이 부담된다면 옵티마이저는 ..

DB/일반 2022.03.31

MySQL 8 버전 특징

NoSQL MySQL Document Store는 개발자가 전통적인 SQL 관계형 응용 프로그램과 NoSQL, schema-free document 데이터 베이스 응용 프로그램일 개발하는데 최대한의 유연성을 제공합니다. 따라서 별도의 NoSQL document 데이터베이스가 필요하지 않습니다. MySQL Document Store는 multi-document 트랜젝션 지원과 schema-less JSON 문서를 위한 완전한 ACID 준수를 지원합니다. JSON MySQL 8은 NoSQL에 사용되는 JSON 데이터에 대한 다양한 함수들을 제공합니다. JSON Table Funciton: https://dev.mysql.com/doc/refman/8.0/en/json-table-functions.html J..

DB 2022.02.23

MySQL

MySQL 아키텍처 MySQL의 전체 구조 MySQL 엔진 클라이언트로부터 접속 및 쿼리 요청을 처리하는 커넥션 핸들러와 SQL 파서 및 전처리기, 쿼리의 최적화된 실행을 위한 옵티마이저가 중심을 이룹니다. 요청된 SQL 문장을 분석하거나 최적화하는 등 DBMS 두뇌에 해당하는 처리를 수행합니다. 스토리지 엔진 실제 데이터를 디스크 스토리지에 저장하거나 디스크 스토리지로부터 데이터를 읽어오는 부분을 전담합니다. MySQL 서버에서 MySQL 엔진은 하나지만 스토리지 엔진은 동시에 여러 개를 사용할 수 있습니다. 핸들러 API MySQL 엔진의 쿼리 실행기에서 데이터를 쓰거나 읽어야 할 때는 각 스토리지 엔진에게 쓰기 또는 읽기를 요청하는데, 이러한 요청을 핸들러 요청이라고 하고 여기서 사용되는 API를 ..

DB/MYSQL 2022.02.21

DB Cluster

DB Cluster란 DB Cluster의 개념 DB Cluster란 디스크로부터 데이터를 읽어오는 시간을 줄이기 위해서 조인이나 자주 사용되는 테이블의 데이터를 디스크 내부에 같은 위치에 저장시키는 방법입니다. DB Cluster의 특징 그룹된 컬럼 데이터 행들이 같은 데이터 블록에 저장되기 때문에 디스크 I/O를 줄여줍니다. 클러스터된 테이블 사이에 조인이 발생할 경우 그 처리 시간이 단축 됩니다. 클러스터 키 열을 공유하여 한 번만 저장하므로 저장 영역의 사용을 줄입니다. 데이터 조회 성능을 향상 시키지만 데이터 저장, 수정, 삭제 또는 한 테이블 전체 Scan의 성능을 감소시킵니다. 클러스터 인덱스와 논 클러스터 인덱스 참조: https://brownbears.tistory.com/183

DB 2020.11.20

MySQL Stored Procedure의 장단점

장점 DB의 보안이 향상됩니다. Stored Procedure는 자체적인 보안 설정 기능을 가지고 있으며, Stored program 단위로 실행 권한을 부여할 수 있습니다. 권한 제어가 가능하며, SQL 인젝션과 같은 기본적인 보안 사고를 피할 수 있습니다. 절차적 기능을 구현할 수 있습니다. SQL 문장에 IF/WHILE과 같은 제어 문장을 사용할 수 있습니다. 어떠한 어플리케이션을 사용하더라도 Stored Procedure를 이용한다면 값을 추출하는데 용이합니다. 개발 업무를 구분하여 진행할 수 있습니다. 순수하게 어플리케이션을 개발하는 조직과 DMBS 관련 코드를 개발하는 조직을 구분해 진행할 수 있습니다. DBMS 코드를 개발하는 조직은 트랜잭션 단위로 데이터베이스 관련 처리를 하는 Stored..

DB 2020.09.17

MVCC

동시성 제어 동시성 제어란 DBMS가 다수의 사용자 사이에서 동시에 작용하는 다중 트랜잭션의 상호간섭 작용에서 Database를 보호하는 것을 의미합니다. 일반적으로 동시성을 허용하면 일관성이 낮아지게 되며 이를 그래프로 나타내면 아래와 같습니다. 다수 사용자의 동시 접속을 위해 DBMS는 동시성 제어를 할 수 있도록 Lock 기능과 SET TRANSACTION 명령어를 이용해 트랜잭션의 격리성 수준을 조정할 수 있는 기능도 제공합니다. 이렇게 동시성을 제어하는 방법에는 비관적 동시성 제어와 낙관적 동시성 제어가 있습니다. 비관적 동시성 제어 사용자들이 같은 데이터를 동시에 수정할 것이라고 가정 데이터를 읽는 시점에 Lock을 걸고, 트랜잭션이 완료될 때까지 이를 유지 SELECT 시점에 Lock을 거는..

DB 2020.06.26

Trigger

Trigger는 데이터베이스 내부의 특정 테이블에 INSERT, DELETE, UPDATE와 같은 DML 문이 수행되었을 때, 데이터베이스에서 자동으로 수행되는 저장프로시져입니다. 즉, 사용자가 직접 호출하는 것이 아니라, 데이터베이스에서 자동적으로 호출하는 것이 가장 큰 특징입니다. 예를 들어, [사원]테이블에 새로운 데이터가 들어오면 [급여]테이블에 새로운 데이터를 자동으로 생성하고 싶을 경우, [사원] 테이블에 트리거를 설정하여 구현할 수 있습니다. Trigger의 성능 오버헤드가 적음 Trigger를 실행하는데 걸리는 대부분의 시간은 다른 테이블을 참조하는데 사용 Trigger에 의해 참조되는 다른 테이블의 위치가 작업 시간을 결정 지음 Trigger의 제한 Trigger는 트래잭션 제어문을 사용..

DB 2020.06.18
반응형