본문 바로가기
반응형

Database/MYSQL227

MySQL 5.7 LOGICAL_CLOCK 방식의 Parallel Replication (Multi-Threaded Slave, MTS) 개인적으로 MySQL 5.6 출시에 가장 크게 기대했던 부분은 병렬 복제 기능(MTS, Multi Threaded Slave)이었다. 하지만 이 기능은 특정 상황에서만 적용이 가능한 단점이 있어서, 보편적으로 활용을 하지는 못했었다. 5.6 버전의 병렬 복제 기능은 schema 단위로 개별적인 복제 처리를 하다보니, schema 단위의 트랜잭션 정합성을 맞출 수 없다는 구조적인 문제가 있었으며, schema 개수가 많지 않거나 schema 간 쓰기 부하가 균일하지 않으면 병렬 처리의 장점을 활용할 수가 없기 때문이다. ※ 5.6 버전의 병렬 복제 관련해서 작성했던 포스트 https://blog.naver.com/seuis398/70186283219 하지만 지난 2015년 10월말 출시된 MySQL 5.7.. 2021. 5. 18.
Mysql Explain 알고 사용하기 EXPLAIN에는 3개의 행이 있는데, 각각 테이블로의 접근을 표시한 것이다. 조인은 위에서부터 순서대로 일어난다고 생각하면 된다. 1. table 어떤 테이블에 대한 접근을 표시하고 있는지는 table 필드에 표시되어있다. 따라서 이 쿼리를 실행하면 Country -> City -> CountryLanagueage 순으로 조인하는 것을 알 수 있다. 2. id id는 SELECT에 붙은 번호를 말한다. MySQL은 조인을 하나의 단위로 실행하기 때문에 id는 그 쿼리에 실행 단위를 식별하는 것이다. 따라서 조인만 수행하는 쿼리에서는 id는 항상 1이 된다. 3. select_type select_type은 항상 SIMPLE 이된다. 복잡한 조인을 해도 SIMPLE이 된다. 서브쿼리나 UNION이 있으면.. 2021. 5. 17.
MySQL Error_code : 1756 slave_parallel_workers Yesterday I found a strange problem with a database online, and here I recorded the problem discovery and processing. R&D colleagues reported that the data in a database has not been updated since 19:44 (the online service from the library is not applicable, only offline query and statistical data use). But log in to the slave library to find that the master-slave synchronization is normal, the .. 2021. 5. 10.
Mysql : Login-path 설정으로 로그인하기 1. 개요 mysql을 command line에서 로그인을 하려면 "mysql -u 로그인명 -p DB명" 이런식으로 입력하고, 바로 패스워드를 묻고 입력하면 로그인이 된다. 그러나 shell script 등에서 이용하려면 pw 입력때문에 사용하기가 불편해진다. 또는 위의 커맨드에 pw를 노출해야한다. 이럴때에 자동으로 로그인을 할 수 있도록 하는 명령이 바로 login-path 이다. 2. 생성 $ mysql_config_editor set --login-path=설정이름 --host=주소 --user=아이디 --port=포트 --password Enter password: ***** 3. 확인 $ mysql_config_editor print --login-path=설정이름 [myroot] user .. 2021. 4. 29.
log_slow_slave_statements 3. Admin 관련 명령어 혹은 slave 의 sql_thread 에 의해 실행된 명령어중 long_query_time 이상으로 실행된 명령어를 찾는다. log_slow_admin_statements (default : OFF) - http://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_log_slow_admin_statements log_slow_slave_statements (default : OFF) - http://dev.mysql.com/doc/refman/5.6/en/replication-options-slave.html#sysvar_log_slow_slave_statements 기본적으로 slow queries .. 2020. 10. 19.
innochecksum — 오프라인 InnoDB 파일 체크섬 유틸리티 innochecksum 은InnoDB파일에대한 체크섬을 인쇄 합니다. 이 도구는InnoDB테이블 스페이스 파일을읽고, 각 페이지의 체크섬을 계산하고, 계산 된 체크섬을 저장된 체크섬과 비교하고, 손상된 페이지를 나타내는 불일치를보고합니다. 원래는 정전 후 테이블 스페이스 파일의 무결성 확인 속도를 높이기 위해 개발되었지만 파일 복사 후에도 사용할 수 있습니다. 체크섬 불일치로 인해InnoDB실행중인 서버가 의도적으로 종료되기 때문에 프로덕션 서버가 손상된 페이지를 만날 때까지 기다리는 것보다이 도구를 사용하는 것이 좋습니다. 서버가 이미 연 테이블 스페이스 파일에는 innochecksum을 사용할 수 없습니다. 이러한 파일의CHECK TABLE경우 테이블 스페이스 내의 테이블을 확인하는데사용해야합니다. .. 2020. 9. 29.
MySQL login-path 사용하기 MySQL 5.6 쯤부터 보안문제로 커맨드에 비밀번호를 넣을수 없게되었다. Warning: using a password on the command line interface can be insecure. 기존처럼 커맨드에 비밀번호 넣어서 사용하면 이런 메시지를 보게된다. 이럴때 login-path 옵션을 사용하면 된다. #생성 mysql_config_editor set --login-path=설정이름 --host=주소 --user=아이디 --port=포트 --password user$ mysql_config_editor set --login-path=myroot --host=localhost --user=root --port=3306 --password Enter password: ***** #확인 m.. 2020. 9. 29.
MySQL/MariaDB InnoDB(Storage) buffer pool 모니터링 MySQL/MariaDB에서는 다양한 스토리지 엔진을 지원하며 각 스토리지마다 특성 또한 다르다. 각 스토리지 엔진에 대한 특성은 아래 링크를 참고 한다. · Comparison of MySQL database engines : https://en.wikipedia.org/wiki/Comparison_of_MySQL_database_engines 이번 포스트에서는 일반적으로 OLTP 서비스에 많이 사용하는 InnoDB 스토리지 엔진에서 buffer pool(버퍼풀)과 관련한 모니터링 방법에 대해서 알아본다. 아래 스크립트를 실행 하면 InnoDB의 buffer pool에 대한 값을 확인할 수 있다. Show status where variable_name like ‘innodb_buffer%’; Vari.. 2020. 9. 21.
MySQL INNODB Status Monitoring [출처] http://dba-jadelee.blogspot.kr/2014/10/mysql-innodb-status-monitoring.html MySQL INNODB Status Monitoring - 해당 STATUS출력내역은 각 상세내역 설명을 위해 특정장비를 기준으로 특정시점의 결과를 샘플링 - 세부적으로 설명한 부분도 있지만 직관적으로 상태정보를 보여주는 부분은 상세한 설명은 생략함. (이 부분들에 대한 추가적인 질문은 개인별로 문의하세요) - 각 부분에 대한 간략한 기능적 설명이며 모니터링상 중요한 영역에 대한 코멘터리는 각 영역에 대한 설명 마지막 부분에 기재하였음. ----------------------------------------------------------------- SQL> .. 2020. 9. 11.
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.
반응형