본문 바로가기
반응형

Database/MYSQL238

innodb_flush_log_at_trx_commit = 2를 사용하는 것이 안전할까? 최대 1 초 분량의 트랜잭션을 잃을 수 있습니다. 기본값은 1이며 InnoDB ACID 준수를 유지하는 데 도움이됩니다 . innodb_flush_log_at_trx_commit 의 MySQL 문서에 따르면 innodb_flush_log_at_trx_commit의 값이 0이면 로그 버퍼가 초당 한 번 로그 파일에 기록되고 디스크로 플러시 조작이 로그 파일에서 수행되지만 트랜잭션 커미트에서는 아무것도 수행되지 않습니다. 값이 1 (기본값)이면 각 트랜잭션 커밋에서 로그 버퍼가 로그 파일에 기록되고 디스크로 플러시 작업이 로그 파일에서 수행됩니다. 값이 2 인 경우, 커밋 할 때마다 로그 버퍼가 파일에 기록되지만 디스크로 플러시 작업은 수행되지 않습니다. 그러나 값이 2 인 경우에도 로그 파일의 플러시가 초.. 2020. 8. 25.
MySQL InnoDB 성능 튜닝 기본 InnoDB Architecture InnoDB 를 초기 설정할 때 고려해야할 기본적인 튜닝 파라미터를 소개한다. 위의 InnoDB 아키텍처 그림을 떠올려보면 아래의 5 가지 초기 설정이 왜 중요한지 이해할 수 있을 것이다. innodb_buffer_pool_size innodb_buffer_pool_instances innodb_flush_method innodb_log_file_size * innodb_log_files_in_group innodb_io_capacity 버퍼 풀의 크기 (innodb_buffer_pool_size) 버퍼 풀은 두 가지 역할을 담당한다. 첫번째는 데이터 파일과 로그 파일이 기록되는 순서를 조정하는 역할이고, 두번째는 디스크 액세스를 줄이기 위한 캐시의 역할이다. 시스템(.. 2020. 8. 25.
seq에 맞게 한번에 Rank No 변경하기 정렬에 맞게 해당 SEQ를 변경하고자 할때 사용 SET @rankNo:=0; UPDATE TB_NAME SET rank_no = @rankNo := @rankNo+1 ORDER BY rank_no; 2020. 6. 26.
MySQL UTF8MB4 Charset의 Collation 선택 (대소문자, 전각/반각, emoji 문자 구분) MySQL에서 collation으로 인해 흔히 겪게 되는 문제는 알파벳 대소문자 구분 문제이다. MySQL은 기본적으로 ci(case insensitive) collation을 사용하기 때문에, 알파벳의 대소문자를 동일 문자로 취급하기 때문이다. 하지만 collation의 세계는 여기서 끝이 아니다. collation의 선택에 따라 알파벳 대소문자 구분부터, emoji 문자(4byte utf8)의 구분, 전각/반각 문자의 구분 처리가 다 달라지기 때문에, collation 선택은 매우 신중해야 한다. 다양한 문자를 처리해야 하는 환경(특히 다국어 서비스)에서 문자열을 DB에 저장하고 비교한다면 더욱 collation의 선택에 많은 고민이 필요하다. utf8mb4 charset 기준으로 우리가 선택할 수 .. 2020. 6. 26.
MySQL slow query 를 효율적으로 이용해보자! MySQL slow query 를 효율적으로 이용해보자!개요MySQL 은 slow query 를 사용하여, 많은 정보를 얻어낼 수 있다. 하지만, 해당 기능들이 default 로 OFF 로 되어 있어 그냥 지나가는 경우가 많다. slow query 관련한 기능들을 알아보자. Slow query 파일은 쿼리를 튜닝하는데 아주 중요한 요소로 작용하지만, 5.. 2020. 5. 12.
Mariadb DB 복제 설정 DB 복제 설정 [Master 서버] DB 설정 변경vi /etc/my.cnf.d/server.cnf [mysqld] server-id = 1 log_bin = /var/log/mysql/mariadb-bin log_bin_index = /var/log/mysql/mariadb-bin.index expire_logs_days = 10 max_binlog_size = 100M # /var/log/mysql 의 소유자는 mysql 이어야한다 설정 변경후 mysql 재시작service mysql restart mysql 커맨드라인 클라이언트 .. 2020. 4. 17.
MySQL InnoDB lock & deadlock 이해하기 대규모의 많은 요청이 동시에 들어오는 데이터베이스(Database, DB) 어플리케이션의 경우 데이터의 정합성을 유지하면서 최대한 동시성을 높이는 것이 매우 중요한 포인트이다. MySQL InnoDB 엔진의 경우 상황에 따른 여러가지 락(Lock)을 통해서 동시성을 제어하며 이를 통해서 사용자가 설정한 .. 2020. 3. 10.
프로시져별 트랜잭션 테스트 프로시져별 트랜잭션 테스트 DROP TABLE radio_room_list; CREATE TABLE radio_room_list ( reg_no INT(11) NOT NULL DEFAULT 0 COMMENT '고유번호', upd_date DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '변경일자', PRIMARY KEY (reg_no) ) ENGINE=MEMORY DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='임시테이블'; DELIMITER $$ USE `DB_NAME`$.. 2020. 1. 16.
[MySQL] 프로시저(스토어드 프로그램)의 장단점 1. 스토어드 프로그램이란? MySQL에서는 절차적인 처리를 위해 스토어드 프로그램을 이용할 수 있습니다. 스토어드 프로그램은 스토어드 루틴이라고도 하는데, 스토어드 프로시저와 스토어드 함수 그리고 트리거와 이벤트 등을 모두 아우르는 명칭입니다. 스토어드 프로그램 가운데 스토.. 2020. 1. 16.
Optimize MySQL table_open_cache table_definition_cache System VariableNametable_definition_cacheVariable ScopeGlobalDynamic VariableYesPermitted ValuesTypeintegerDefault-1 (autosized)Min Value400Max Value524288The number of table definitions (from .frm files) that can be stored in the definition cache. If you use a large number of tables, you can create a large table definition cache to speed up opening of t.. 2019. 12. 17.
MySQL InnoDB의 메모리 캐시 서버로 변신 꽤나 오래전의 일이었습니다. MariaDB에서 Handler Socket이 들어간 이후 얼마 후인 것으로 기억합니다. MySQL lab버전에 memcached plugin 기능이 추가되었고, memcache protocal로 InnoDB 데이터에 직접 접근할 수 있는 길이 열린 것이었죠. (아마도 거의 8년 정도 전의 일이었던 것같은..) 아무튼 당시, 이것.. 2019. 12. 5.
[MySQL] 프로시저(스토어드 프로그램)의 장단점 1. 스토어드 프로그램이란? MySQL에서는 절차적인 처리를 위해 스토어드 프로그램을 이용할 수 있습니다. 스토어드 프로그램은 스토어드 루틴이라고도 하는데, 스토어드 프로시저와 스토어드 함수 그리고 트리거와 이벤트 등을 모두 아우르는 명칭입니다. 스토어드 프로그램 가운데 스토.. 2019. 11. 26.
Mysql percona 5.7 Innodb utf8mb4 init_connect command failed 처리 # my.cnf 에 설정 이 있다면 제거하세요 #init_connect = SET collation_connection = utf8mb4_unicode_ci #init_connect = SET NAMES utf8imb4 # 기본 설정 [client] default-character-set=utf8mb4 [mysqld] skip-slave-start character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci innodb_large_prefix=1 데몬 재실행후에 접속하면 정상 연결됩니다. 참.. 2019. 11. 11.
MySQL의 replication 방법 그렇다면 MySQL 복제 란 무엇입니까?복제는 소스 환경의 트랜잭션을 기반으로 한 위치에만 저장되는 대신 정보가 다른 환경에 복사되고 의도적으로 채워지는 것을 보장합니다. 이를 위해서는 인프라에서 보조 서버를 사용하여 읽기 또는 다른 관리 솔루션을 사용하는 것이 좋습니다. 아래 .. 2019. 10. 10.
Freebsg 어제 그제 날짜 구하기 쉘스크립트 작성 하다보면 오늘 날짜, 어제 날짜등 구할 일이 가끔생기는데요 ~ 이때 스크립트에서 사용 하세요 # 어제 및 그제 일자 계산 D1=`TZ=KST+15 date +%Y%m%d` D2=`TZ=KST+39 date +%Y%m%d` echo $D1 $D2 > 20191009 20191008 유닉스 계열중 Solaris, HP, AIX에서는 다음과 같이 하면 어제 날짜를 바로 구할수 .. 2019. 10. 10.
Mysql Federated Engine 사용시 주의사항 Federated Engine (Link) 1. 네트워크 성능에 따라 쿼리의 성능이 좌지우지 된다. 2. 원격지의 Table에 DDL 작업이 발생 시이것을 참조하는 Federated 테이블에 대해서 재생성 > 혹 Federated 테이블을 모를경우 가장큰 문제가됨 3. 데이터 참조시 해당 원격 DB테이블을 모두 가져와야 하기에 처리량 증가.. 2019. 7. 23.
MySQL5.6 메모리 사용량을 억제 이번은 MySQL5.6이 메모리 450Mbyte도 소비하고 있었기 때문에 메모리 소비를 개선하는 방법입니다. # ps alx | grep mysql | awk '{printf ("%d\t%s\n", $8,$13)}' 1488 /bin/sh 454036 /usr/sbin/mysqld 912 grep 살펴보면 버그 인 것 같습니다. 일단 상황은 어떻게되어 있는지 확인합니다. mysql> show variables like 'table_definit.. 2019. 4. 23.
MySQL 데이타베이스와 계정 생성하기 MySQL 데이타베이스와 계정 생성하기.utf8 mysql 5.7 이상은 Create User 구문 사용MySQL 5.7 이상CREATE DATABASE homestead CHARACTER SET utf8 COLLATE utf8_bin; CREATE USER 'homestead'@'localhost' IDENTIFIED BY 'secret' PASSWORD EXPIRE NEVER;GRANT ALL PRIVILEGES ON homestead.* TO 'homestead'@'localhost'; flush privileges;MySQL 5.7 미만CREATE DATABASE homestead.. 2019. 3. 13.
Mysql 5.7 설치시 비번 설정 1. 데몬 실행 2. 임시 생성된 비번으로 root 접속 # mysql -udba -p 3. 접속후 초기 비밀번호 변경 SET PASSWORD = PASSWORD('password'); 4. 기타 추가할 계정 및 DB 생성 create database if not exists DB_NAME; CREATE USER 'USER'@'localhost' IDENTIFIED BY 'PASSWORD' PASSWORD EXPIRE NEVER; GRANT ALL PRIVILEGES on DB_NAME.* TO 'USER'@'HOST'; FLUSH PRIVIL.. 2019. 3. 8.
InnoDB에서 Auto_Increment를 믿지 말자. Overview MySQL에서는 시퀀스 개념이 없지만, 테이블 단위로 움직이는 Auto_Increment라는 강력한 기능이 있습니다. Auto_Increment 속성은 숫자 형 Primary Key를 생성하는 데 많이 사용됩니다. 특히나 InnoDB 경우에는 Primary Key 사이즈가 전체 인덱스 사이즈에 직접적인 영향을 미치기 때문에, 저도 테이블.. 2019. 2. 18.
반응형