■ LOCK TABLES 그리고 UNLOCK TABLES 문법 LOCK TABLES tbl_name [[AS] alias] lock_type [, tbl_name [[AS] alias] lock_type] ... lock_type: { READ [LOCAL] | [LOW_PRIORITY] WRITE } UNLOCK TABLES MySQL은 클라이언트 세션이 테이블에 액세스하기 위해 다른 세션과 협력하거나 세션에 독점 액세스가 필요한 기간 동안 다른 세션이 테이블을 수정하지 못하도록 하기 위해 명시적으로 테이블 잠금을 획득할 수 있도록 합니다. 세션은 자체 잠금만 획득하거나 해제할 수 있습니다. 한 세션은 다른 세션에 대한 잠금 또는 다른 세션이 보유한 잠금 해제를 획득할 수 없습니다. 잠금은 트랜잭션을 ..
■ tabe open cache 파라미터의 용도 MySQL은 다중 스레드방식으로 운영되는 DBMS입니다. 여러 클라이언트가 붙고 그 안에서 여러 쿼리를 날리는데 그 쿼리 안에는 여러 테이블이 사용될 수 있습니다. 이때 요청되는 테이블이 각 클라이언트에서 공유적으로 열리는것이 아니라 각각의 클라이언트별로 테이블이 열립니다. 이렇게 하면 추가적인 메모리는 사용되지만 각각의 클라이언트에서 독립적으로 사용되는것이기 때문에 속도가 높아지는 효과가 발생하게 됩니다. 이것이 바로 table open cache 파라미터의 용도입니다. mysqladmin status 명령을 실행하면 다음과 같은 내용이 표시되어야 합니다. Uptime: 426 Running threads: 1 Questions: 11082 Reloads..
■ 트랜잭션 격리 수준 [Isolation Level] 트랜잭션 격리는 데이터베이스 처리의 기초 중 하나입니다. 격리는 약어 ACID의 I입니다. 격리 수준은 여러 트랜잭션이 동시에 변경하고 쿼리를 수행 할 때 결과의 성능과 안정성, 일관성 및 재현성 간의 균형을 미세 조정하는 설정입니다. InnoDB는 SQL:1992 표준에 의해 기술 된 READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ 및 SERIALIZABLE의 4 가지 트랜잭션 격리 수준을 모두 제공합니다. InnoDB의 기본 격리 수준은 REPEATABLE READ입니다. 사용자는 단일 세션 또는 SET TRANSACTION문으로 모든 후속 연결에 대한 분리 레벨을 변경할 수 있습니다. 모든 연결에 대해 ..
■ InnoDB 모니터 타입 InnoDB 모니터에는 두 가지 유형이 있습니다. + 표준 InnoDB 모니터는 다음 유형의 정보를 표시합니다. - 메인 백그라운드 스레드에 의해 수행 된 작업 - 세마포어 대기 - 가장 최근의 외래 키 및 교착 상태 오류에 대한 데이터 - 트랜잭션에 의한 잠금대기 - 활성 트랜잭션이 보유한 테이블 및 레코드 잠금 - 보류중인 I/O 작업 및 관련 통계 - 삽입 버퍼 및 적응 형 해시 인덱스 통계 - 재실행 로그 데이터 - 버퍼 풀 통계 - 행 연산 데이터 + InnoDB 잠금 모니터는 표준 InnoDB 모니터 출력의 일부로 추가 잠금 정보를 인쇄합니다. ■ InnoDB 모니터 사용 InnoDB 모니터가 주기적인 출력을 위해 활성화되면 InnoDB는 약 15초마다 출력을 my..
■ MySQL 성능 스키마와 InnoDB 통합 MySQL 성능 스키마 기능을 사용하여 특정 내부 InnoDB 작업을 프로파일링 할 수 있습니다. 이 유형의 튜닝은 주로 성능 병목 현상을 극복하기 위해 최적화 전략을 평가하는 전문 사용자를위한 것입니다. 또한 DBA는 용량 계획에 이 기능을 사용하여 일반적인 워크로드에 특정 CPU, RAM 및 디스크 스토리지 조합의 성능 병목 현상이 발생하는지 확인할 수 있습니다. 이 결과로 시스템 일부의 처리량이나 용량을 늘려 성능을 향상시킬 수 있는지 판단할 수 있는 근거가 됩니다. 이 기능을 사용하여 InnoDB 성능을 검사하려면 : + 일반적으로 성능 스키마 기능을 사용하는 방법에 익숙해야 합니다. 예를 들어, 계측기와 소비자를 활성화하는 방법과 performanc..
원글 : https://www.percona.com/blog/2020/03/26/sysbench-and-the-random-distribution-effect/ Sysbench and the Random Distribution Effect - Percona Database Performance Blog How to customize sysbench to extend its use, with one way being the proper tuning of the random IDs generation. www.percona.com Sysbench의 난수 생성에 대해 알아야 할 사항 Sysbench는 벤치마킹을 수행하는 데 잘 알려져 있고 널리 사용되는 도구입니다. Peter Zaitsev가 2000 년 초에..
■ SysBench 히스토리 및 아키텍처 sysbench는 2004 년 Peter Zaitsev에 의해 만들어졌고 곧 Alexey Kopytov가 개발을 인수했습니다. 버전 0.4.12에서 개발이 중단되었습니다. Alexey는 2016년에 다시 작업하기 시작했습니다. 곧 LUA 기반 스크립트를 사용하도록 OLTP 벤치 마크를 다시 작성하여 버전 0.5가 릴리스되었습니다. 그런 다음 2017 년에 SysBench 1.0이 릴리스되었습니다. 이것은 0.4.12 이전 버전과는 비교할 수 없을 정도로 훌륭하게 만들어졌습니다. 하드코딩된 스크립트 대신 LUA를 사용하여 벤치마크를 사용자가 원하는 방법으로 정의하여 테스트할 수 있습니다. 이것은 굉장히 유연하게 테스트 할 수 있는 방법을 제공합니다. SysBench..
■ InnoDB 데드록 교착 상태는 각 트랜잭션마다 다른 잠금이 있기 때문에 다른 트랜잭션을 진행할 수 없는 상황입니다. 두 트랜잭션 모두 자원이 사용 가능할 때까지 대기하므로 보유한 잠금을 서로 해제않아 발생합니다. 트랜잭션이 여러 테이블에서 행을 잠글때(UPDATE 또는 SELECT ... FOR UPDATE와 같은 SQL을 통해) 교착 상태가 발생할 수 있지만 반대 순서로 발생합니다. 교착 상태는 이러한 명령문이 인덱스 레코드 및 간격 범위를 잠그고 각 트랜잭션이 타이밍 문제로 인해 일부 잠금을 획득하지만 다른 잠금은 획득하지 않는 경우에도 발생할 수 있습니다. 교착 상태의 가능성을 줄이려면 LOCK TABLES문 대신 트랜잭션을 사용합니다. 데이터를 삽입하거나 업데이트하는 트랜잭션을 장기간 열어 ..
잠금상태에서 읽기, UPDATE 또는 DELETE는 일반적으로 SQL문 처리시 스캔되는 모든 인덱스 레코드에 대해 레코드 잠금을 설정합니다. 명령문에 행을 제외시킬 WHERE조건이 있는지 여부는 중요하지 않습니다. InnoDB는 정확한 WHERE조건을 기억하지 않지만 스캔된 인덱스 범위만 알고 있습니다. 잠금 장치는 일반적으로 레코드 바로 앞의 "GAP"에 삽입을 차단하는 Next-Key 잠금 장치입니다. 그러나 GAP 잠금을 명시적으로 비활성화하여 Next-Key 잠금을 사용하지 않을 수 있습니다. 트랜잭션 격리 수준은 설정된 잠금에 영향을 줄 수 있습니다. 검색에 보조 인덱스가 사용되고 설정될 인덱스 레코드 잠금이 배타적 일 경우 InnoDB는 해당 클러스터형 인덱스 레코드를 검색하여 잠금을 설정합니..
■ 앞축에 관련된 InnoDB INFORMATION_SCHEMA 테이블 압축에 관한 InnoDB INFORMATION_SCHEMA 테이블에는 압축이 전체적으로 얼마나 잘 작동하는지에 대한 아주 유용한 정보를 제공하는 두개의 테이블이 있습니다. + INNODB_CMP 및 INNODB_CMP_RESET은 압축 조작 수 및 압축 수행에 소요된 시간에 대한 정보를 제공합니다. + INNODB_CMPMEM 및 INNODB_CMPMEM_RESET은 메모리가 압축을 위해 할당되는 방법에 대한 정보를 제공합니다. □ INNODB_CMP와 INNODB_CMP_RESET INNODB_CMP 및 INNODB_CMP_RESET 테이블은 압축 테이블 관련 작업에 대한 상태 정보를 제공합니다. PAGE_SIZE열은 압축된 페이지..
온라인 DDL 기능은 전체 테이블 변경 및 동시 DML을 지원합니다. 이 기능의 장점은 다음과 같습니다. + 몇 분 또는 몇 시간 동안 테이블을 사용할 수 없는 바쁜 생산 환경에서 응답 성과 가용성이 향상되었습니다. + LOCK 절을 사용하여 DDL 작업 중 성능과 동시성간의 균형을 조정하는 기능입니다. + 테이블 복사 방법보다 적은 디스크 공간 사용 및 I/O 오버 헤드를 가집니다. 일반적으로 온라인 DDL을 활성화하기 위해 특별한 작업을 수행 할 필요는 없습니다. 기본적으로 MySQL은 허용되는 한 적은 잠금으로 작업을 제 위치(in-place)에서 수행합니다. ALTER TABLE 문의 ALGORITHM 및 LOCK 절을 사용하여 DDL 조작의 측면을 제어 할 수 있습니다. 이 절은 명령문 끝에 테..
테이블의 행(Row) 형식에 따라 행이 실제로 저장되는 방식이 결정되어 쿼리 및 DML 작업의 성능에 영향을 줄 수 있습니다. 단일 디스크 페이지에 더 많은 행이 들어가므로 쿼리 및 인덱스 조회가 더 빠르게 작동 할 수 있으며 버퍼 풀에 필요한 캐시 메모리가 적고 업데이트 된 값을 기록하는 데 필요한 I/O가 적습니다. 각 테이블의 데이터는 페이지로 나뉩니다. 각 테이블을 구성하는 페이지는 B-트리 인덱스라고 하는 트리 데이터 구조로 정렬됩니다. 테이블 데이터와 보조 인덱스는 모두 이 유형의 구조를 사용합니다. 전체 테이블을 나타내는 B-트리 인덱스를 클러스터된 인덱스라고 하며 기본 키 열에 따라 구성됩니다. 클러스터형 인덱스 데이터 구조의 노드에는 행의 모든 열(Column) 값이 포함됩니다. 보조..