InnoDB 테이블에서 오버 헤드와 효과적인 문제를 해결하는 방법은 무엇입니까?
질문 :
1 - 오버 헤드 무슨 뜻입니까? MyISAM 테이블에서 "테이블 최적화"버튼을 클릭하면 오버 헤드 및 유효 데이터가 사라집니다. 나는 그것이 내 테이블에 무슨 일을하는지 궁금해?
2 - 실제로 오버 헤드와 유효 가치를 고려해야합니까? InnoDB 테이블에서 오버 헤드와 효과적인 문제를 해결하는 방법은 무엇입니까?
InnoDB 테이블에서 오버 헤드와 효과적인 문제를 해결하는 방법은 무엇입니까?
질문 :
1 - 오버 헤드 무슨 뜻입니까? MyISAM 테이블에서 "테이블 최적화"버튼을 클릭하면 오버 헤드 및 유효 데이터가 사라집니다. 나는 그것이 내 테이블에 무슨 일을하는지 궁금해?
2 - 실제로 오버 헤드와 유효 가치를 고려해야합니까? InnoDB 테이블에서 오버 헤드와 효과적인 문제를 해결하는 방법은 무엇입니까?
InnoDB를 고정하는 것은 버튼 클릭처럼 간단하지 않습니다. MyISAM입니다.
이유 # 1 : 이노 스토리지 레이아웃이 기본적으로
, 이노을 사용할 수 innodb_file_per_table을 가지고 10
OPTMIZE 표는 두 가지 이유로 이노와 그런 식으로 작동하지 않습니다. InnoDB와 그 할머니는 ibdata1에 도착합니다.
불행하게도, mytb 축소에 사용되는 임시 테이블이 ibdata1에 추가됩니다. 즉시 성장 ibdata1에 대한 !!! 이 점에서 ibdata1은 결코 줄어들지 않습니다. 설상가상으로, ANALYZE TABLE은 쓸모가 없다. (이유 # 2에서 설명했다.)
innodb_file_per_table이 활성화되어 있으면 데이터가 ibdata1에 저장되어 있지 않지만 처음 4 단계가 작동하지만 외부 테이블 스페이스 파일 mytb.ibd. 그것은 줄어들 수 있습니다.
이유 # 2 : 인덱스 통계는 항상 효율적으로 인덱스 통계를 저장하지 않습니다
이노
을 다시 계산된다. 사실 mytb에서 ANALYZE TABLE을 실행하면 통계가 작성되어 저장됩니다. 안타깝게도 InnoDB는 guessimate 주요 카디널리티 인덱스의 BTREE 페이지로 들어가서 그 숫자를 사용하여 MySQL Query Optimizer를 작성합니다. 이것은 진행중인 과정입니다. 결과적으로 계산 된 인덱스 통계는 해당 테이블에 대해 실행 된 각 쿼리로 덮어 쓰므로 ANALYZE TABLE은 쓸모가 없습니다. I wrote about this in the DBA StackExchange June 21, 2011. 오버 헤드의 MyISAM로서는Percona explained this thoroughly in www.mysqlperformanceblog.com
, 즉 숫자가 파악 될 수있다.MyISAM 테이블의 경우 오버 헤드는 내부 조각화를 나타냅니다. 특히 BLOB 데이터 나 VARCHAR 열이있는 경우 이는 경험, INSERT, UPDATE 및 DELETE가있는 테이블에서 매우 일반적입니다. OPTIMIZE TABLE을 실행하면 임시 테이블 (자연스럽게 빈 공간을 복사하지 않음)에 복사하여 그러한 단편화가 사라집니다.
InnoDB로 돌아가서 낭비 공간을 어떻게 효과적으로 제거합니까? 적은 정보를 유지하려면 ibdata1을 다시 설계해야합니다.
당신은 permamnently 테이블 및 인덱스를 밖으로 이동할 수 있습니다에 대한 : 당신은 데이터의 네 가지 유형을을 ibdata1 withing에 영원히 ibdata1. ibdata1에 이미 저장된 데이터 및 색인은 어떻게됩니까?
내가 10 월 29, 게시 2010 년 InnoDB의 정리 계획에 따라 : Howto: Clean a mysql InnoDB storage engine? 당신이 그것을해야 할 경우, 데이터베이스가 토스트가 이미 있기 때문에 "OPTIMIZE 표가"의 MyISAM에 시간의 쓸모없는 낭비입니다 사실
.
큰 테이블에서는 매우 오랜 시간이 걸리고 테이블에 대한 쓰기 액세스는 차단됩니다. 또한, 그것은의 MyISAM keycache 등
그래서 요약
스키마 변경을하지 않는 ALTER TABLE 문 (일반적으로 ALTER TABLE t ENGINE = InnoDB)을 사용하여 InnoDB에서 동일한 작업을 간단히 수행 할 수 있습니다. 그것은 MyISAM만큼 빠르지 않습니다. 왜냐하면 다양한 작은 테이블에서 메모리에 최적화 된 최적화를 수행하지 않기 때문입니다.
MyISAM은 인덱스 최적화를 통해 인덱스 페이지를 압축합니다. 인덱스 페이지를 압축하면 일반적으로 인덱스가 매우 작아집니다. InnoDB는 이것도 가지고 있지 않습니다.
데이터베이스가 작 으면 필요하지 않습니다. 크기가 클 경우 어차피 MyISAM을 사용할 수 없다. (예기치 않은 시스템 종료로 인해 테이블을 재구성해야하기 때문에 대형 테이블에서 너무 오래 걸린다.) 내구성, 안정성, 트랜잭션, 모든 동시성 수준이 필요하거나 일반적으로 어떤 방식 으로든 견고성에 관심이 있다면 MyISAM을 사용하지 마십시오.
실제로 실제로 오버 헤드와 효과적인 문제를 신경 쓸 필요가 없습니까?오버 헤드 필드에 붉은 색 값이 표시됩니까? – zac1987
아무 것도 업데이트 나 삽입 또는 삭제하지 않았고, myisam을 innodb로 변경 한 다음 오버 헤드 값이 3,072.0KiB까지 올라 갔으며 유효 값은 -3,129,344로 떨어졌습니다. 정상입니까? 아니면 실제로 오버 헤드/효과적인 문제를 방지하기 위해 innodb 변경 myisam 전에 뭔가를 설정해야합니까? – zac1987
@ zac1987이 답장은 조금 늦은 것 같지만, InnoDB로 바꾸기 전에 OPTIMIZE TABLE을 시도해 볼 수 있습니다. – Raptor