Optimize를 사용한 Mariadb 테이블 조각 모음
MariaDB v 10.1.30을 실행하여 테이블 조각 모음 및 OPTIMIZE TABLE 명령을 사용하여 데이터베이스 유지보수 스크립트를 실행하고 innodb_management = 1의 새로운 10.1.1 패치를 사용하여 인덱스를 재구축하는 스크립트를 테스트하고 있습니다.
Alter Table을 Alter table = INPLACE로 테스트하여 정상적으로 동작하고 있습니다만, alter table INPLACE 알고리즘에 의해 테이블이 재구축될 때 optimize를 사용하여 임시 파일을 생성하지 않도록 하고 있습니다.
Optimize(최적화)를 사용하면 임시 테이블이 생성되지 않지만 테이블이 잠겨 Alter Table with Alogorithm = INPLACE(알터 테이블 = INPLACE)와 달리 동시 연결을 허용하지 않습니다. 그러나 설명서에는 최적화가 INPLACE 알고리즘을 사용하여 수행된다고 나와 있습니다.
https://mariadb.org/defragmenting-unused-space-on-innodb-tablespace/
이게 버그인가요, 아니면 제가 뭔가 놓치고 있는 건가요? 조언해 주세요.
속도에 대한 혜택은 거의 없다.
"포인트 쿼리"(키를 가지고 행으로 직접 이동할 수 있음)는 BTree의 깊이에 따라 달라집니다.100만 행의 경우 깊이는 약 3입니다.1조 행의 경우, 6개 정도 됩니다.표를 최적화해도 깊이가 줄어들 가능성은 거의 없습니다.
"범위 스캔" (
BETWEEN
,>
, 등)는 각 행을 보면서 블록을 횡단합니다.그런 다음 필요한 모든 행을 찾을 때까지 다음 블록으로 홉합니다.물론 최적화되지 않은 테이블에서 더 많은 블록을 터치하지만 대부분의 작업은 각 행에 액세스하는 것입니다.
공간에 대한 혜택은 한정되어 있습니다.
안
INSERT
완전하지 않은 블록에 추가할 수도 있고 전체 블록을 2개의 하프풀 블록으로 분할할 수도 있습니다.나중에 인접한 두 개의 다소 빈 블록이 병합됩니다.따라서 BTree는 자연스럽게 평균 블록이 69% 채워진 상태로 끌려간다.즉, 다음과 같은 이점이 있습니다.OPTIMIZE TABLE
공간이 한정되어 있습니다.다르게 표현하면
OPTIMIZE
는 테이블의 디스크 설치 공간을 이전 수준의 69%로 줄일 수 있지만 이후 작업을 수행하면 테이블이 다시 커질 뿐입니다.사용하시는 경우
innodb_file_per_table=OFF
,그리고나서OPTIMIZE
는 빈 블록을 운영체제로 되돌릴 수 없습니다.이러한 블록은 나중에 재사용할 수 있습니다.INSERTs
.
OPTIMIZE TABLE
침습적이야
테이블을 복사하여 프로세스 중에 잠급니다.이는 100% 가동시간이 필요한 사이트에서는 허용되지 않습니다.
레플리케이션을 하고 있는 는, 그 이, 「복제 「다」, 「다」의 에 쌓일 수 .
OPTIMIZE
따라서 슬레이브는 최신 상태가 아닙니다.
대량 삭제
행을 하면, 「」의 .
OPTIMIZE
69%입니다.대량 삭제가 자주 발생하는 경우 다른 작업을 수행해야 할 수도 있습니다.http://mysql.rjweb.org/doc.php/deletebig 를 참조해 주세요.
이력 및 내부
- 그랬다.
OPTIMIZE
간단한 방법: 새 테이블(동일한 스키마) 작성, 행 복사: 테이블 이름 변경, 삭제.아아아아아아아아아아아아아아아아아아아아. ALGORITHM=INPLACE
아마 몇 블럭을 잠그고, 한 블럭을 채우도록 결합시킨 다음 앞으로 미끄러지겠죠그러기 위해서는 어느 정도의 잠금이 필요합니다.질문에 따르면 테이블 전체를 잠그는 것 같습니다.- 각 BTree(PK+Data 또는 보조 인덱스)는 독립적으로 '최적화'될 수 있습니다.그러나 메인 BTree(PK+data)에만 이러한 작업을 수행할 수 있는 명령어는 없습니다.단일 보조 인덱스를 최적화하는 방법은 다음과 같습니다.
DROP INDEX
+ADD INDEX
됩니다. 을(를) 것을 해 주세요.NOCOPY
ADD INDEX
그럼INSTANT
DROP INDEX
이것은 을 줄 수 있습니다.USE_INDEX
★★★★★★★★★★★★★★★★★」FORCE INDEX
을 사용하다
(동굴:이 답변은 MyISAM이 아닌 InnoDB에 적용됩니다.)
언급URL : https://stackoverflow.com/questions/48569979/mariadb-table-defragmentation-using-optimize
'programing' 카테고리의 다른 글
장고: 선택지 값 표시 (0) | 2023.01.22 |
---|---|
Windows 서버의 Maria DB 데이터 변경 (0) | 2023.01.22 |
Netbeans(PHP)에서의 변수형 힌트 (0) | 2023.01.22 |
'dateAdded'의 기본값이 잘못되었습니다. (0) | 2023.01.22 |
원칙 2: 쿼리 작성기를 사용하여 쿼리 업데이트 (0) | 2023.01.02 |