■ 버퍼풀 상태 저장과 복원 서버를 다시 시작한 후 워밍업 기간을 줄이기 위해 InnoDB는 서버 종료시 각 버퍼 풀에 대해 가장 최근에 사용한 페이지의 백분율을 저장하고 서버 시작시 이러한 페이지를 복원합니다. 최근에 저장된 페이지의 백분율은 innodb_buffer_pool_dump_pct 구성 옵션으로 정의됩니다. 사용중인 서버를 다시 시작한 후에는 버퍼풀에 있던 디스크 페이지가 메모리로 다시 가져오기 때문에 (같은 데이터를 쿼리, 업데이트 등) 일반적으로 워밍업 시간이 꾸준히 증가합니다. 시작시 버퍼 풀을 복원하는 기능은 DML 조작이 해당 행에 액세스 할 때까지 기다리지 않고 다시 시작하기 전에 버퍼 풀에 있던 디스크 페이지를 다시로드하여 예열시간(warmup)을 단축시킵니다. 또한 대규모 일괄..
아시다시피 CentOS 8이 Redhat 정책에 의해서 더이상 엔터프라이즈 리눅스로서 위치가 이상해지기 시작했습니다. 역시 IBM으로 편입되면서 애매한 위치를 만들어 버리는군요. 이에 RHEL을 Fork하여 CentOS와 비슷한 엔터프라이즈 커뮤니티를 다시 만든것이 Rokcy 리눅스인것으로 알고 있습니다. 조만간 리눅스가 안정화되기 시작하면 본격적으로 CentOS를 대체할것이라 생각합니다. 특히 8.5는 정식으로 Rocky Linux에서 릴리즈한 버전으로 도전정신이 있으신분은 쓰셔도 무방할 듯 합니다. 저도 빨리 정식 서비스에 사용해보고 싶습니다. 지금부터 MySQL 8.0을 Rocky Linux에 설치하는 방법을 알아보도록 하겠습니다. ■ MySQL 계정 만들기 먼저 mysql에서 사용할 계정을 만들어..
보통 IP를 DB에 저장할때는 캐릭터 형태의 컬럼(varchar 혹은 char)을 많이 사용하는것으로 알고 있습니다. 저또한 마찬가지 입니다. 그러나 MySQL에서는 IP를 특화된 방법으로 저장하고 불러올 수 있습니다. 또한 저장 방법이 Integer방식이기 때문에 검색에서 더 효율적이기도 합니다. MySQL에서 IP를 저장하는 방법과 호출하는 방법에 대해 알아보겠습니다. ▶︎ 준비사항 MySQL에서 IP를 저장하는 방법은 숫자형으로 저장이 됩니다. MySQL문서에서는 INT형보다는 INT UNSIGNED 컬럼을 사용할것을 권고하고 있습니다. create table addr(ip int(11) unsigned); ▶︎ 사용방법 INET_ATON(expr) 일발적인 IPv4 네트워크 주소 방식으로 표현된 ..
■ Connection 관련 파라미터와 MySQL 상태 변수 컨넥션에 관련된 파라미터와 상태 확인 변수들입니다. 상태 변수 확인 후 관련 파리미터를 설정하여 성능을 개선시킬 수 있습니다. 파라미터미터와 상태 변수의 상호 관계와 어떤 부분을 모니터링하고 확인해야 하는지 알아봅니다. 1. Variables (예 : show variables like '%max_connection%';) • max_connections 허용되는 최대 동시 클라이언트 연결 수입니다. 접속 최대수를 초과해 접속 시도를 하는 경우 "too many connections error"이 발생 합니다. max_connection 수가 늘어 나면 innodb 의 thread별 메모리 사용량이 늘어나 같이 고려해야 합니다. mysql> s..
MySQL Performance Cheat Sheet MySQL은 확장가능하고 원하는 성능을 위해 최적화하고 조정할 영역이 많습니다. 일부 변경은 동적으로 수행할 수 있고 다른 변경은 서버를 다시 시작해야 합니다. 기본 구성으로 MySQL 설치를 하는 것은 매우 일반적이지만 때로는 워크로드 및 설정 자체에 적합하지 않을 수 있습니다. MySQL의 주요 영역을 요약하여 이를 살펴보겠습니다. System Variables MySQL에는 변경을 고려할 수 있는 많은 변수가 있습니다. 일부 변수는 동적이므로 SET 문을 사용하여 설정할 수 있습니다. 다른 것들은 구성 파일(예: /etc/my.cnf, etc/mysql/my.cnf)에서 설정한 후 서버를 다시 시작해야 합니다. 서버를 최적화하기 위해 조정하는데 ..
MySQL 서버 하드웨어 및 OS 조정: 1. 전체 InnoDB 파일을 메모리에 로드하기에 충분한 물리적 메모리가 있어야 합니다. InnoDB는 디스크가 아닌 메모리에서 파일에 액세스할 수 있을때 훨씬 빠릅니다. 2. 스와핑을 피합니다. 스와핑은 디스크에서 읽는 것이므로 속도가 느립니다. 3. 배터리 지원 RAM(Battery-Backed RAM)을 사용합니다. 4. 고급 RAID를 사용합니다. 가급적이면 RAID10 이상을 사용합니다. 5. RAID5를 피합니다. 무결성을 보장하는데 필요한 체크섬은 비용이 많이 듭니다. 6. OS와 데이터 파티션을 논리적으로뿐만 아니라 물리적으로 분리합니다. 비용이 많이 드는 OS 쓰기 및 읽기는 데이터베이스 성능에 영향을 미칩니다. 7. mysql 임시 공간과 복제 ..
■ MySQL 기본 설정 • 하드웨어 CPU코어와 메모리는 많을수록 좋습니다. 어떤 DBMS던 이건 공통적인 내용입니다. 스토리지 측면에서 SSD 디스크는 기존의 스핀들을 성공적으로 대체하여 비용 대비 최고의 성능을 제공합니다. RAID 10은 여전히 대부분의 워크로드에 가장 권장되는 수준이지만 먼저 RAID 컨트롤러가 SSD 드라이브의 성능을 활용할 수 있고 실제 병목 현상이 되지 않는지 확인해보아야 합니다. 더 많은 IOPS가 필요한 경우 많은 PCI-e 플래시 드라이브도 있습니다. • 운영 체제 Linux는 고성능 MySQL 서버를 위한 가장 일반적인 운영 체제입니다. 최신 커널과 결합된 Linux의 EXT4 또는 XFS와 같은 최신 파일 시스템을 사용하는것이 좋습니다. 그리고 각각 고유한 한계..
■ PostgreSQL의 데이터베이스 속성 어떤 RDBMS든 스키마를 다루는 방법 혹은 개념이 약간 틀리듯이 PostgreSQL도 약간 스키마의 개념이 틀립니다. PostgreSQL에서 데이터 베이스는 스키마의 집합이며 이 스키마에는 테이블, 펑션등이 포함됩니다. 전체 구조로 본다면 인스턴스 -> 데이터베이스 -> 스미카 -> 테이블 또는 기타 객체 구조로 되어 있습니다. 그림 1 : PostgreSQL 클러스터 구조 ■ 데이터베이스 생성과정 postgresql 접속 후 데이터베이스를 조회하면 template0,1 이라는 데이터베이스가 있dp습니다. 이 데이터베이스는 템플릿 데이터베이스라고 해서 이름에서도 알수 있듯이 데이터베이스를 만드는 기초 정보들이 들어 있습니다. 그리고 이 템플릿 데이터베이스가 2..
GTID 복제 모드에서 1236 에러에 관련된 내용에 대해 알아보겠습니다. 원문 : https://www.percona.com/blog/2016/12/01/database-daily-ops-series-gtid-replication-binary-logs-purge/ mysql> show slave status Last_IO_Errno: 1236 Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'The slave is connecting using CHANGE MASTER TO MASTER_AUTO_POSITION = 1, but the master has purged binary logs containin..
■ 사용방법 일반적으로 log_bin 파라미터가 ON으로 설정되면 모든 DDL, DML이 로그 파일에 작성되며 사용자가 MySQL세션에 접속할 경우 DDL, DML을 수행할때도 역시 바이너리 로그에 작성됩니다. 그러나 서버에 접속한 세션에서 특정 이유(유지보수 작업이나 기타 설정작업)로 바이너리 로그에 DDL, DML에 작성되지 않게끔 하는게 필요할 수도 있습니다. 이때 사용하는 파라미터가 sql_log_bin입니다. 이 명령어에 대해 사용방법을 알아보겠습니다. 사용방법 바이로그 작성을 금지시킬 경우 mysql> SET sql_log_bin = OFF 바이너리 로그 작성을 원할 경우(기본값) mysql> SET sql_log_bin = ON ■ 제약사항 1. 트랜잭션 또는 하위 쿼리 내에서 sql_log..
■ RESET MASTER 명령어 사용방법 : mysql> RESET MASTER 바이너리 로깅이 활성화된(my.cnf에서 log_bin이 ON인) 서버의 경우 RESET MASTER는 기존의 모든 바이너리 로그 파일을 삭제하고 바이너리 로그 인덱스 파일을 재설정하여 서버를 바이너리 로깅이 시작되기 전의 상태로 재설정합니다. 바이너리 로깅을 다시 시작할 수 있도록 새로운 바이너리 로그 파일이 생성됩니다. GTID가 사용 중인 서버의 경우(gtid_mode가 ON임) RESET MASTER를 실행하면 GTID 실행 기록이 재설정됩니다. gtid_purged 시스템 변수의 값은 빈 문자열('')로 설정되고, gtid_executed 시스템 변수의 글로벌 값(세션 값은 아님)은 빈 문자열로 설정되며, mysq..
Java에서 쓰이는 MySQL Connector 8.0을 사용하면 다음과 같은 에러가 발생할 수 있습니다. 또한 MySQL 5.7에서 mysql 인증 플러그인을 mysql_native_password에서 sha256_password로 변경시 다음과 같은 에러가 발생할 수 있습니다. Exception in thread "main" java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed 즉 Public Key Retrieval 속성이 사용되지 않았다는 얘기입니다. 8.x부터는 강제 의무 사항으로 이 속성을 true로 반드시 변경해 주어야 합니다. 1. Java driver 속성 추가 방법 jdbc driver url속성..