DataBase
-
MySQL Begin 과 Start TransactionDataBase/MySQL 2022. 12. 16. 19:32
START TRANSACTION 과 BEGIN 은 모두 새로운 트랜잭션을 만듭니다. COMMIT 은 현재 트랜잭션을 commit 한다는 의미로, 해당 트랜잭션을 영구적으로 반영되게 합니다. ROLLBACK 은 현재 트랜잭션을 다시 되돌린다는 의미로, 현재 트랜잭션의 변화를 취소한다는 의미입니다. SET autocommit 은 현재 세션에 대해 자동 반영을 비활성화 시키거나 활성화 시킵니다. 기본값으로 autocommit 은 활성화 되어 있습니다. 즉, 모든 SQL 구문은 START TRANSACTION , COMMIT 에 둘러 쌓인 것처럼 모든 구문은 원자성을 가지고 있습니다. autocommit 이 켜져있는 상태에서는 ROLLBACK 은 아무런 효과가 없습니다. 단, SQL 구문이 실행 중 문제가 있다..
-
B-Tree 와 B+Tree 의 차이점DataBase/MySQL 2022. 8. 2. 23:38
B-Tree 와 B+Tree 는 더 효율적이게 원하는 데이터를 탐색할 수 있는 자료구조의 일종 으로 주로 데이터베이스의 인덱스를 사용할 때 쓰이는 알고리즘입니다. 이번 포스팅에서는 B-Tree 와 그것의 변형된 알고리즘인 B+ Tree 에 대해 알아보겠습니다. Tree 는 DB에 한정짓지 않더라도 탐색 시간을 단축할 수 있다는 장점 때문에 자주 사용이됩니다. B-Tree 의 핵심은 데이터가 정렬 된 상태로 유지되어 있다는 것입니다. B-Tree 는 위 그림과 같이 생겼습니다. Binary-Tree 라고 오해를 하지만 Balanced-Tree 를 의미합니다. 자식이 2개 이상 가능합니다. B-tree 는 균형 트리로 루트로부터 리프까지의 거리가 일정한 트리 구조입니다. 이렇게 균형을 유지할 경우 어떤 데이..
-
체인지 버퍼DataBase/MySQL 2022. 8. 2. 20:18
RDBMS 에서 레코드가 INSERT 되거나 UPDATE될 때는 데이터 파일을 변경하는 작업 뿐 아니라 해당 테이블에 포함된 인덱스를 업데이트하는 작업도 필요합니다. 이때 인덱스를 업데이트 하는 작업은 랜덤하게 디스크를 읽는 작업을 선행해야 하므로 테이블에 인덱스가 많으면 이 작업은 많은 자원을 소모하게 됩니다. InnoDB 는 변경해야 할 인덱스 페이지가 버퍼 풀에 있으면 바로 업데이트를 하지만 그렇지 않고 디스크로 부터 읽어와서 업데이트를 해야 한다면 즉시 실행하지 않고 임시 공간에 저장해 두고 바로 사용자에게 결과를 반환하는 형태로 성능을 향상 시킵니다. 이때 사용하는 임시 메모리 공간을 체인지 버퍼 라고 합니다. 하지만 유니크 인덱스의 경우 중복 여부를 체크해야 하기 때문에 체인지 버퍼를 사용할 ..
-
트랜잭션 격리수준DataBase 2022. 7. 21. 21:21
트랜잭션 트랜잭션 이란 트랜잭션이란 여러 쿼리를 논리적으로 하나의 작업으로 묶어주는것을 이야기합니다. 돈 거래로 트랜잭션의 예시를 들어보도록 하겠습니다. 거래가 일어날 때의 과정은 다음과 같습니다. 우선 구매자의 계좌에서 10,000원을 출금합니다. 다음 판매자에 계좌에 10,000을 입금합니다. 이를 쿼리로 나타내면 이와 같이 나타낼 수 있습니다. UPDATE 문 : 구매자 계좌에 10,000 원 빼기 UPDATE 문 : 판매자 계좌에 10,000 원 더하기 마음처럼 되면 좋은데 출금 성공후 서버 다운이라든지 하는 이유로 오류가 생길 수 있습니다. 구매자의 계좌에서는 돈이 빠졌는데 판매자의 계좌에는 돈이 들어가지 않는 이런 상황을 방지하기 위해 나온것이 바로 트랜잭션입니다. 즉, 트랜잭션은 하나의 작업..
-
MySQL 변수 종류DataBase/MySQL 2022. 4. 27. 23:12
1. 사용자 지정변수 (@ 가 앞에 붙습니다.) 사용자 지정 변수(User-defined variables)는 선언하거나 초기화 하지 않고 접근할 수 있습니다. 만약 사용자 정의 변수가 초기화 되지 않았다면 string 타입의 NULL 값이 반환됩니다. SELECT @var_any_var_name SET 과 SELECT 문을 사용해서 변수를 초기화 할 수 있습니다.(MySQL 8.0 에서는 SET 을 사용해서 변수를 초기화 할 것을 권장하고 있습니다. SET 외에 변수 초기화는 향후 버전에서 삭제 될 수 있다고 합니다.) Previous releases of MySQL made it possible to assign a value to a user variable in statements other th..
-
MySQL 사용자 변수DataBase/MySQL 2022. 4. 25. 18:55
MySQL 사용자 변수 변수명 사용자 변수는 @var_name 으로 표현 됩니다. 변수 이름은 알파벳, 숫자, ., _ 및 $로 구성될 수 있습니다. 사용자 변수 이름은 대소문자를 구분하지 않습니다. 이름의 최대 길이는 64자입니다. 변수명 범위 사용자 변수는 세션에 따라 다릅니다. 특정 클라이언트는 다른 클라이언트가 정의한 사용자 변수를 보거나 사용할 수 없습니다.(하지만 performance schema 의 user_variables_by_thread 에 대한 권한이 있는 사용자는 모든 세션에서 어떤 사용자가 정의한 변수던지 다 볼 수 있습니다.) 변수 해제 클라이언트 세션에 대한 모든 변수는 해당 클라이언트가 종료될 때 자동으로 해제됩니다. 사용 예시 사용자 변수를 만들 수 있는 방법중 하나는 SE..
-
샤딩과 파티셔닝DataBase 2022. 3. 19. 01:00
샤딩과 파티셔닝 대규모 트래픽과 데이터를 다루는 곳에선 많은 양의 데이터가 축적되어 있다보니 하나의 DB 인스턴스로는 읽고 쓰기를 감당할 수 없습니다. 이 경우 여러개의 DB 인스턴스가 필요합니다. 이때 확장성을 위해 샤딩, 파티셔닝을 필수적으로 고려하게 됩니다. 샤딩과 파티셔닝은 모두 큰 데이터셋을 여러 서브셋으로 나눈다는 공통점이 있습니다. 이런 유사점 때문에 종종 혼용되어 쓰여지기도 합니다. (추후 설명할 예정이지만 sharding = Horizontal partitioning 으로 알고 계신분들이 많은데 이 둘은 다른 개념입니다. horizontal partitioning, vertical sharding 등......) 샤딩 여러 인스턴스에 여러 서브셋을 저장하는것을 말합니다. 장점 쿼리(읽기,..
-
MySQL 대소문자 구별DataBase 2022. 3. 1. 21:01
MySQL 대소문자 구별 참고로 해당 내용은 MySQL 8점대 기준으로 설명하고 있습니다. MySQL 의 대소문자는 MySQL 서버가 떠있는 운영체제에 따라서 다릅니다. Windows 는 대소문자를 구별하지 않고(case-sensitive) Unix 의 변형 운영체제(예를 들어 Linux) 대소문자를 구별합니다. (case-insensitive) MacOS의 경우 Unix 에 기반한 운영체제 지만 파일 시스템 타입이 대소문자를 구별하지 않는 형태입니다. 하지만, 대소문자를 구별하는 UFS도 지원합니다.(case-sensitive) Partition, subpartition, 컬럼(컬럼 alias 를 포함한), 인덱스, stored routine, event, and resource group names ..