Database
대용량 테이블 데이터 클렌징
* 개요: 대용량 테이블의 관리 차원에서 과도하게 적제되는 데이터는 (콜드 디스크)이관 또는 삭제 해줄 필요가 있다. 이 과정에서 해당 테이블이 서비스와 직접적으로 연결된 경우 대용량의 트랜젝션의 발생은 장애로 직결 될 수 있다. * 시나리오: 로그인 시 Audit Table 에 감사 로그를 남겨 누가 언제 접속했는지를 관리하고 있다. 이 테이블의 사이즈가 무한정으로 커지고 있고, 디스크 용량 관리 차원에서 오래된 데이터는 배치로 삭제 해줘야 할 필요가 있다. 다만 이 과정에서 (삭제) 테이블 잠금이 발생될 수 있고, 이로 인해 로그인을 못하는 경우가 발생될 수 있다. * 솔루션: 로그 테이블 삭제 시 로그인 장애를 예방하려면, 배치 프로시저에서 트랜잭션 잠금을 최소화하고 삭제 작업을 분할하여 한 번에 ..
[MariaDB] General log 설정
* 개요 - MariaDB 서비스를 운영하다보면, DB로 인입되는 쿼리를 볼 필요가 있다. 이때, 아래 설정을 통해서 쿼리 로그를 볼 수 있다. 해당 설정은 서비스의 성능을 엄청나게 떨어뜨리기 때문에 꼭 개발 DB에서만 사용 하길 바랍니다. - 해당 설정은 운영중에 셋업해도 되나, my.cnf 파일에 설정 해줘야 재기동 시에도 적용 된다. (적용 후 서비스 재시작 필요) * General Log 설정 확인 - On/Off 설정을 통해 적용 여부를 확인 가능 하고, 로그를 파일과, 테이블에서 볼수 있다. - 테이블에 남기는것이 보기에는 편하나, 쿼리문 자체가 엄청나게 길어지거나, 복잡해 지면 보기 어렵고, select 하는 시간도 "매우 매우" 오래 걸리므로, 파일로 보는것이 정신건강에 좋다. # 현재 설..
[MariaDB] Event Scheduler
* 개요 : MariaDB도 다른 DB 제품들과 마찬가지로 정해진 시간에 정해진 규칙에 따라 쿼리 루틴을 실행 할 수 있는 스케줄러가 있다. 매일 정기적으로 데이터를 클렌징 한다거나 조각모음을 한다거나 하는 경우에 활용 할 수 있다. * 현재 configuration 확인 및 셋팅 SHOW GLOBAL VARIABLES WHERE Variable_name = 'event_scheduler'; : 기능 셋팅 # vi my.cnf 수정 후 재시작 필요 event_scheduler = 1 * 이벤트 생성 # 이벤트 예제 -- Event 생성 CREATE EVENT IF NOT EXISTS EV_BACKUP_TABLE ON SCHEDULE EVERY 1 MINUTE -- Event 실행 주기 STARTS ' 2..
[MariaDB] MariaDB 레플리케이션 모니터링 쉘프로그램 (on Docker)
* 개요 : 마리아 DB의 레플리케이션 상태를 모니터링 하기 위한 쉘 프로그램으로, 커스터마이징을 통해 필요한 지표를 모니터링 할 수 있다. * 소스코드 : 소스코드 내 개행문자(^M)는 [Ctrl + V --> 엔터키] 로 입력 한다. 이거 몰라서 한참 고생했다. ㅠ_ ㅠ #!/bin/bash LOGFILE='repl_log_'$(date +%Y%m%d%H%M%S)'.log' ## MySOL로 접속하고, 표준 출력 내용을 로그 파일로 저장하도록 파이프로 전달한다. docker exec -it maria_higenie mysql -uroot -pP@ssw0rd -e "show slave status \G" > $LOGFILE ## IO 스레드 상태를 찾아 IO_THREAD 변수로 저장한다. IO_THRE..
[MSSQL] 백업 및 로그 파일 축소
데이터베이스 풀 백업 BACKUP DATABASE db명 TO DISK='경로\파일명.bak' WITH COMPRESSION 현재 로그 파일을 얼마나 쓰고 있는지 확인 DBCC SQLPERF(LOGSPACE) 축소가 가능 한 상태인지 확인 (로그 백업이 된 상태이어야 함) - status가 0인 부분만 백업이 가능하다. DBCC LOGINFO 작업을 위해 파일 액세스 모드를 단일(SIMPLE)로 변경 ALTER DATABASE DB명 SET RECOVERY SIMPLE; 데이터베이스 백업 (필요시) BACKUP DATABASE DB명 TO DISK='백업할 경로\디비파일명.bak' WITH COMPRESSION 로그 백업 BACKUP LOG DB명 TO DISK='백업할 경로\로그파일명.trn' WITH..
[MariaDB] Slow query 수집
* 개요 : MariaDB에서 실행 되는 쿼리에 대해 특정 임계시간 이상 실행 된 쿼리에 대해 수집을 할 수 있다. 이는 튜닝 대상 쿼리를 탐지 하기 위함이다. : 수집은 테이블에 적재하는 방식과 파일로 떨어뜨리는 방식이 있으나, 테이블에 적재하는 경우 쿼리문이 길어지면 로그 테이블을 조회하는 시간(네트워킹시간)이 너무너무너무너무 오래 걸리므로, 파일로 관리하는것이 훨씬 낫다!! * 글로벌 config 확인 : 현재 설정된 상태 확인 show variables where Variable_name in ('slow_query_log','long_query_time','log_output','slow_query_log_file'); * 설정 변경 : 쿼리를 통한 글로벌 변수 설정 시 재기동시 반영이 안되므로..
[MariaDB] MariaDB sqldump로 배치(Cron) 만들기
* MariaDB의 백업 방식 : 크게 두가지가 있다. mysqldump, XtraBackup 예제는 mysqldump 방식으로 한다. * 데이터가 저장된 경로 확인 show variables where Variable_name='datadir'; * 백업 스크립트 작성 : 레플리케이션 구성일 경우 향후 복원을 위해 포지션 정보도 찍어준다. ( --master-data=2 ) > vi mariadb_backup_job.sh #!/bin/sh target='파일명_'$(date +%Y%m%d%H%M%S) /usr/bin/mysqldump -u백업실행할계정 -p패스워드 --master-data=2 백업할디비 > './'$target'.sql' # 백업한 파일 압축 tar cvzf './'$target'.ta..
[MariaDB] Proxy SQL 셋팅 (on Docker)
* 개요 마리아 DB 사용시 Active-Active 구조로 사용하기 위해 DB 앞단에서 분기 해줄수 있는 시스템이 필요 하다. 오픈소스로는 지금 설명하는 ProxySQL이 있고, MaxScale이 대중적으로 사용되고 있다. * Architecture * 방화벽 오픈 # 현재 방화벽 상태 확인 firewall-cmd --state # 현재 방화벽 정책 확인 firewall-cmd --list-all # 서비스 기동 or 정지 systemctl start firewalld.service systemctl stop firewalld.service # 자동 기동 상태 확인 및 자동 기동 셋팅 systemctl is-enabled firewalld.service systemctl enable firewalld...