MariaDB/Admin 18

[MariaDB][ADMIN] INNODB 클러스터 인덱스(클러스터 테이블) 개념 및 성능 분석

1.클러스터링 인덱스 지원 엔진 - InnoDB, TokuDB 2. 클러스터링 인덱스 적용 대상 - 프라이머리 키(PK) 3. 클러스터링 인덱스 구성 방법 - PK 기준으로 정렬되어 레코드가 저장되며, PK가 변경된다면 레코드의 물리적인 저장 위치가 변경 된다.(Non 클러스터 테이블은 INSERT 될때 파일의 끝 또는 임의의 빈공간에 저장되고, 위치 변경은 없다. 레코드가 저장 된 주소(ROWID)를 식별 아이디로 인식함) - 클러스터키를 구성하는 우선순위는 아래와 같다. - PK가 있으면 클러스터 키로 선택 > NOT NULL 제약조건의 유니크 인덱스 중에서 첫번째 인덱스를 클러스터 키로 선택 > 임의의 유니크 값을 생성하여 클러스터 키로 선택 4. 클러스터링 인덱스와 보조 인덱스(Secondary ..

MariaDB/Admin 2020.06.23

[MariaDB][ADMIN] Deadlock found when trying to get lock; try restarting transaction 장애 원인 및 처리 방법

1.데드(Dead) 락 - 다중 문 트랜잭션을 사용 할 때 커밋을 하지 않을 때 발생하는 락을 말한다. 2. 장애 상황 - 두 개 이상의 트랜잭션이 서로 락을 해제할 때까지 기다리면서 전체적인 작업이 전혀 진행되지 못하는 상태를 데드락이라고 한다. - MariaDB INNODB는 데드락 감지기를 갖고 있으며, 트랜잭션 중 하나를 롤백하고 에러를 출력하여 데드락에 빠지는 것을 방지 한다. 3. 테스트 #테스트 환경 - CentOS 7 - MariaDB 10.3.8 3.1 트랜잭션 락 발생 1. 테스트 테이블 및 데이터 생성 MariaDB [test]> create table deadlock( no int(10) unsigned not null auto_increment, primary key(no)); Q..

MariaDB/Admin 2020.05.29

[MariaDB][ADMIN] Lock wait timeout exceeded; try restarting transaction 장애 원인 및 처리 방법

1.트랜잭션 락 - 다중 문 트랜잭션을 사용 할 때 커밋을 하지 않을 때 발생하는 락을 말한다. 2. 장애 상황 - session 1, session 2 2개의 세션 중에 session 1에서 트랜잭션을 시작(BEGIN) 명령어를 실행하고 update문을 수행하였다. 같은 시간 session 2에서는 동일한 테이블의 같은 행을 update 수행했고 lock이 발생 했다. - session 2에 발생한 락은 무엇이며, 어떤 세션의 쿼리의 의해서 lock이 발생했는지지 원인을 파악하고 lock을 해결 할 수 있는 가장 좋은 방법은 무엇인가? 3. 테스트 #테스트 환경 - CentOS 7 - MariaDB 10.3.8 3.1 트랜잭션 락 발생 1. 테스트 테이블 및 데이터 생성 MariaDB [test]> c..

MariaDB/Admin 2020.05.20

[MariaDB][ADMIN] Waiting for table metadata lock 장애 처리 방법

1.메타데이터 락 - 트랜잭션이 시작되면 사용하는 테이블에 대한 메타데이터 락을 걸고 트랜잭션이 완료될 때 메타데이터 락을 해제 한다. 이때 테이블의 정의를 바꾸려는 모든 스레드는 트랜잭션이 끝날때까지 기다려야 한다. (DDL, CREATE, DROP, ALTER) 2. 장애 상황 - session 1, session 2, session3의 3개의 세션 중에 session 1에서 트랜잭션을 시작(BEGIN) 명령어를 실행하고 SELECT문을 수행하였다. 같은 시간 session 2에서는 동일한 테이블을 drop 명령어를 수행했고, session 3에서는 데이터 insert 작업을 수행하였다. - session 2, session 3는 metalock이 발생하였는데 lock을 해결 할 수 있는 가장 좋은 ..

MariaDB/Admin 2020.05.14

[에러] ERROR 1932 (42S02): Table [테이블명] doesn't exist in engine

[테스트 환경] OS : CentOS7 64bit DB : MariaDB 10.1.12 1. 에러 내용 - Xtrabackup을 이용해서 원격지 백업을 진행한 이후에 테이블 조회 시 CASE 1, CASE 2와 같은 에러가 발생함. - [참고] 백업 명령어 ssh $g_ms_in innobackupex --user=$g_sp_usr --password=$g_sp_pwd --stream=xbstream ./ | ssh $g_sl_in "xbstream -x -C $DB_HOME/datadir/ MariaDB [DB명]> SELECT * FROM [테이블명]; CASE 1ERROR 1932 (42S02): Table [테이블명] doesn't exist in engine CASE 2ERROR 1814 (HY..

MariaDB/Admin 2017.09.26

[MariaDB][ADMIN] show processlist - Waiting for table metadata lock

[테스트 환경] - CentOS 7 - MariaDB 10.1.12 1. 문제 상황 - Toad에서 대상 테이블을 조회하던 도중 사용자에 의한 중지 - 중지가 되어도 실제 프로세스 상에는 세션이 쿼리를 조회하고 있음 - INDEX를 DROP 하는 중에 metadata lock이 걸려서 대기 상태에 빠진 상황 MariaDB [(none)]> show processlist; +-----+---------+---------------------+-------+-------------+---------+-----------------------------------------------------------------------+----------------------------------------------..

MariaDB/Admin 2017.03.29

[MariaDB][Admin]AUTO_INCREMENT를 활용한 PK구성 방법

[테스트 환경] - Windows 7 - MariaDB 10.1.12 1. AUTO_INCRMENT컬럼의 PK 활용 방법 - 오라클의 SEQUENCE는 테이블에 종속되지 않고 사용 할수 있는 반면 MariaDB(Mysql)는 테이블 종속적으로 SEQUENCE처럼 사용 가능한 AUTO_INCREMENT 기능이 존재 한다. 오늘은 AUTO_INCREMENT를 활용하여 PK를 구성방법에 대해서 얘기하려고 한다. 1.1. AUTO_INCREMENT컬럼 단일 PK - AUTO_INCREMENT컬럼을 사용하여 단일 PK를 구성하는 것은 전혀 문제가 없음 CREATE TABLE DA_AUTO_INCREMENT_TEST( DA_NO int(11) NOT NULL AUTO_INCREMENT, DA_ID VARCHAR(1..

MariaDB/Admin 2017.03.23

[MariaDB][운영] CentOS7에서 logrodate로 로그 파일이 rotation되지 않을 경우

[테스트 환경] OS : CentOS 7 DB : MariaDB 10.1.12 1. logrodate를 실행해도 slow로그 파일이 생성되지 않는 현상-- logrotate 실행 [root@localhost /etc/logrotate.d]$logrotate -f /etc/mysql-log-rotate -- 파일이 새로 생성되지 않음을 확인 [root@localhost /maria_log/slow]$ls -al /maria_log/slow 합계 88 drwxr-xr-x. 2 maria dba 4096 8월 8 17:48 . drwxr-xr-x. 8 maria dba 4096 4월 12 08:23 .. -rw-rw----. 1 maria dba 180 8월 8 17:48 mysql-slow-query.log..

MariaDB/Admin 2016.08.09

[MariaDB][Admin] DB 생성 과 테이블 조작(DDL, DML)

1. 새로운 DB 생성 및 테이블 생성 -- ESTDB 데이터베이스 생성 MariaDB [(none)]> CREATE DATABASE ESTDB default character set utf8mb4; Query OK, 1 row affected (0.00 sec) -- ESTDB 데이터베이스로 변경 MariaDB [(none)]> USE ESTDB; Database changed -- 사용자 테이블 생성 --#1 IF NOT EXISTS를 활용해서 현재 데이터베이스에 해당 테이블이 존재하는 지 체크 후 생성 MariaDB [ESTDB]> CREATE TABLE IF NOT EXISTS ESTDB.USER_INFO ( -> USER_NO BIGINT NOT NULL, -- 사용자번호 -> USER_ID V..

MariaDB/Admin 2016.08.07

레플리케이션

글로벌 트랜잭션 아이디 글로벌 트랜잭션 아이디란?(GTID) Global Transaction ID의 약자 바이너리 로그 파일명이나 위치는 해당 이벤트가 저장된 물리적인 위치를 가리키지만 글로벌 트랜잭션 아이디는 논리적인 의미 주로 서버의 노드 아이디와 트랜잭션 아이디로 구성되어있어서 마스터와 슬레이브 간에 중복될 가능성이 없음 DML, DDL 이 발생할 때마다 트랜잭션 아이디가 1씩 증가하면서 글로벌 트랜잭션 아이디가 생성되며 바이너리 로그 이벤트와 매핑됨 글로벌 트랜잭션 아이디가 슬레이브로 전달되면 릴레이 로그 파일이나 슬레이브 바이너리 로그 파일로 기록 글로벌 트랜잭션 아이디의 필요성 동기화 시 파일 내의 위치를 찾아서 (물리적) 복제를 수행하기는 어려움 글로벌 트랜잭션을 사용하면 적용된 글로벌 트..

MariaDB/Admin 2015.10.27