programing

Optimize를 사용한 Mariadb 테이블 조각 모음

copyandpastes 2023. 1. 22. 22:49
반응형

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따라서 슬레이브는 최신 상태가 아닙니다.

대량 삭제

  • 행을 하면, 「」의 .OPTIMIZE69%입니다.

  • 대량 삭제가 자주 발생하는 경우 다른 작업을 수행해야 할 수도 있습니다.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

반응형