■ 메타데이터 Locking(잠금)MySQL은 메타 데이터 잠금을 사용하여 데이터베이스 객체에 대한 동시 액세스를 관리하고 데이터 일관성을 유지합니다. 메타 데이터 잠금은 테이블뿐만 아니라 스키마, 저장된 프로그램 (프로시저, 펑션, 트리거, 예약된 이벤트), 테이블 스페이스, GET_LOCK() 함수로 획득한 사용자 잠금 및 잠금 서비스로 획득한 잠금에도 적용됩니다. 성능 스키마 metadata_locks 테이블은 메타 데이터 잠금 정보를 표시합니다. 이 정보는 잠금을 보유하는 세션을 확인하고 잠금 대기등을 차단하는데 유용합니다.performance_schema의 meta_lock 테이블을 조회하면 관련된 정보를 얻을수 있습니다. 메타 데이터 잠금에는 약간의 오버 헤드가 수반되며 쿼리 볼륨이 증가함에 ..
■ Internal Locking Methods이 섹션에서는 내부 잠금에 대해 설명합니다. 즉, 여러 세션으로 테이블 내용에 대한 경합을 관리하기 위해 MySQL서버 자체에서 잠금이 수행됩니다. 이 유형의 잠금은 전적으로 서버에 의해 수행되며 다른 프로그램과 관련이 없기 때문에 내부적입니다.+ Row-Level(행 수준) 잠금+ 테이블 레벨(Table-Level) 잠금+ 잠금 유형 선택 ▶︎ 행 단위(Row-Level) LockingMySQL은 InnoDB 테이블에 Row-level(행 수준) 잠금을 사용하여 여러 세션의 동시 쓰기 액세스를 지원하므로 다중 사용자, 동시성이 높은 OLTP 애플리케이션에 적합합니다. 단일 InnoDB 테이블에서 여러 개의 동시 쓰기 작업을 수행 할 때 교착 상태를 피하려면..
이 글에서는 InnoDB 테이블, 인덱스, 테이블 스페이스 및 InnoDB 스토리지 엔진의 다른 측면에 대한 제한 사항에 대해 설명합니다. + 테이블은 최대 1017 개의 컬럼을 포함 할 수 있습니다 (MySQL 5.6.9에서 초기 제한 인 1000에서 발생). 가상 생성 컬럼이 이 제한에 포함됩니다. + 테이블은 최대 64 개의 보조(secondary) 인덱스를 포함 할 수 있습니다. + innodb_large_prefix가 활성화 된 경우(기본값) 인덱스키에 정의된 제한은 DYNAMIC 또는 COMPRESSED 행 형식을 사용하는 InnoDB 테이블에 대해 3072바이트입니다. innodb_large_prefix를 비활성화하면 모든 행 형식의 테이블에 대해 인덱스키에 정의된 제한이 767 바이트입니다..
MySQL에서 파티션 삭제시 조심해야 할 사항이 있습니다. 바로 대용량의 파티션을 DROP하는 일입니다. 파티션 테이블을 사용하는 이유는 아마 대부분 로그성 데이터 때문일 것입니다. 이 로그성 테이블은 회사마다 틀리겠지만 보통 기가단위로 되어 있을 것입니다. 댜량의 트랜잭션이 발생되고 있는 운영 데이터베이스에서 파티션 테이블의 특정 파티션 삭제 시도시 테이블이 순간 Freezing되는 현상이 발생할 수 있습니다. 크기에 따라 달라지긴 하겠지만 큰 사이즈의 파티션일 경우 몇초가 걸릴수도 있습니다. 또한 파일시스템의 종류에 따라 발생하는 문제가 조금 상이할 수 있습니다. 이는 운영환경에서 사용시 크게 문제가 발생할 수 있습니다. Drop중일때 해당 테이블에 Table Lock을 걸기 때문에 다른 트랜잭션이 ..
■ Purge 명령어 관련binary logs 파일을 삭제하는 명령어입니다.'bin log' 파일을 지정하면, 그 이전의 bin log 파일을 지우며, 지울 날짜를 지정하면 '지정한 날짜' 이전에 만들어진 bin log 파일을 지우게 됩니다.또한 mysqlbinlog 명령을 사용하여 그 내용을 볼 수 있습니다. RESET MASTER;bin log 파일을 모두 지움가장 최근 것 bin log 파일만 존재함PURGE [MASTER] LOGS TO 'logname';PURGE [MASTER] LOGS BEFORE 'date';binlog-name까지 지움date이전까지 지움 [형식]PURGE [MASTER] LOGS TO 'binlog-name'PURGE [MASTER] LOGS BEFORE 'date' 여..
1. 실행중인 MySQL을 종료합니다. # /etc/init.d/mysql stop 2. "./mysqld_safe --skip-grant-table &" 로 사용자 인증과정 없이 MySQL를 실행합니다. # ./mysqld_safe --skip-grant-table & 3. 패스워드 없이 MySQL root 계정으로 MySQL에 접속합니다. # ./mysql -u root mysql 4. update문으로 MySQL 데이터베이스의 user 테이블에 있는 MySQL root사용자의 패스워드를 변경합니다. mysql> update user set password=password('1111') where user = 'root'; 5. "flush privileges" 명령어로 변경된 MySQL 권한테이블(..
■ show 명령. ▶︎ Binlog 리스트 출력.mysql> SHOW BINARY LOGS;mysql> SHOW MASTER LOGS;mysql> SHOW BINARY LOGS;+---------------+-----------+| Log_name | File_size |+---------------+-----------+| binlog.000015 | 724935 || binlog.000016 | 733481 |+---------------+-----------+show binary logs와 show master logs는 출력내용이 같습니다. ▶︎ 이벤트 출력.명령어 형식---------------------------------------------SHOW BINLOG EVE..
■ CHECKSUM TABLE 문CHECKSUM TABLE tbl_name [, tbl_name] ... [QUICK | EXTENDED]CHECKSUM TABLE은 테이블 내용에 대한 체크섬을 보고합니다. 이 명령문을 사용하여 백업, 롤백 또는 데이터를 알려진 상태로 되돌리려는 기타 작업 전후의 내용이 동일한지 확인할 수 있습니다. 이 명령문에는 테이블에 대한 SELECT권한이 필요합니다. 이 명령문은 뷰에 지원되지 않습니다. 뷰에 대해 CHECKSUM TABLE을 실행하면 체크섬 값은 항상 NULL이며 경고가 리턴됩니다. 존재하지 않는 테이블의 경우 CHECKSUM TABLE은 NULL을 반환하고 경고를 생성합니다. 체크섬 작업 중에 테이블은 InnoDB 및 MyISAM에 대한 읽기 잠금으로 잠 깁니..
■ CHECK TABLE 명령CHECK TABLE tbl_name [, tbl_name] ... [option] ...option: { FOR UPGRADE | QUICK | FAST | MEDIUM | EXTENDED | CHANGED}CHECK TABLE은 테이블에 오류가 있는지 확인합니다. MyISAM 테이블의 경우 주요 통계도 업데이트됩니다. CHECK TABLE은 뷰 정의에서 더 이상 존재하지 않는 테이블을 참조하는 문제같은 것들을 확인할 수도 있습니다. 테이블을 확인하려면 테이블에 대한 권한이 있어야합니다. CHECK TABLE은 InnoDB, MyISAM, ARCHIVE 및 CSV 테이블에서 작동합니다. InnoDB 테이블에서 CHECK TABLE을 실행하기 전에 InnoDB ..
MyISAM 테이블의 REPAIR TABLE 명령은 수리 작업에 myisamchk를 사용하는 것과 유사하며 동일한 성능 최적화중 일부가 적용됩니다. + myisamchk에는 메모리 할당을 제어하는 변수가 있습니다. 변수를 설정하여 성능을 향상시킬 수 있습니다. 아래에서 설명합니다. + REPAIR TABLE의 경우에도 동일한 원칙이 적용되지만 수리는 서버에서 수행하므로 myisamchk 변수 대신 서버 시스템 변수를 설정합니다. 또한 메모리 할당 변수를 설정하는 것 외에도 myisam_max_sort_file_size시스템 변수를 늘리면 복구가 더 빠른 파일 정렬 방법을 사용하고 키 캐시 방법에 의해 느린 복구를 회피할 가능성이 높아집니다. 테이블 파일의 사본을 보유하기에 충분한 여유 공간이 있는지 확인..
■ ANALYZE TABLE StatementANALYZE [NO_WRITE_TO_BINLOG | LOCAL] TABLE tbl_name [, tbl_name] ... ANALYZE TABLE은 키 분포 분석을 수행하고 명명된 테이블에 대한 분포를 저장합니다. MyISAM 테이블의 경우, 이 명령문은 myisamchk --analyze를 사용하는 것과 같습니다. 이 명령문에는 테이블에 대한 SELECT 및 INSERT 권한이 필요합니다. ANALYZE TABLE은 InnoDB, NDB 및 MyISAM 테이블에서 작동합니다. 뷰에서는 작동하지 않습니다. ANALYZE TABLE은 파티션된 테이블에 대해 지원되며 ALTER TABLE ... ANALYZE PARTITION을 사용하여 하나, 또는 그 이..
■ SHOW PROCES 문법사용법 : SHOW [FULL] PROCESSLIST SHOW PROCESSLIST는 실행중인 스레드를 보여줍니다. PROCESS 권한이 있으면 다른 사용자에게 속한 스레드까지 모든 스레드를 볼 수 있습니다. 그렇지 않으면 (PROCESS없이) 비 익명 사용자는 자신의 스레드에 대한 정보에 액세스 할 수 있지만 다른 사용자의 스레드에는 액세스 할 수 없으며 익명 사용자는 스레드 정보에 액세스 할 수 없습니다. FULL 키워드가 없으면 각 문장의 처음 100 자만 정보 필드에 표시됩니다. SHOW PROCESSLIST 명령문은“too many connections”오류 메시지가 표시되고 현재 진행중인 작업을 찾으려면 매우 유용합니다. MySQL은 SUPER 권한이 있는 계정에서..