700GB InnoDB 테이블이 있는데 더 이상 데이터를 쓰지 않습니다 (읽기 전용). 보유하고있는 오래된 데이터를 삭제하고 디스크 공간이 부족하기 때문에 해당 디스크 공간을 회수하고 싶습니다. auto-inc 기본 인덱스가 있기 때문에 삭제 부분은 매우 쉽습니다. 그것을 사용하여 청크를 반복하고 행을 삭제할 수는 있지만 공간을 다시 가져올 수는 없습니다. 나는 OPTIMIZE TABLE
의지를 가정 하지만 700GB 테이블에서 영원히 걸릴 수 있으므로 간과하는 다른 옵션이 있습니까?
RolandoMySQLDBA에 의해 편집
테이블이이라고 가정하면 mydb.mytable
다음 쿼리를 실행하고 여기에 게시하여 테이블 축소에 필요한 디스크 공간을 결정할 수 있습니다.
SELECT
FORMAT(dat/POWER(1024,3),2) datsize,
FORMAT(ndx/POWER(1024,3),2) ndxsize,
FORMAT((dat+ndx)/POWER(1024,3),2) tblsize
FROM (SELECT data_length dat,index_length ndx
FROM information_schema.tables WHERE
table_schema='mydb' AND table_name='mytable') A;
허용되는 경우 테이블 구조도 확인해야합니다.
노암 편집
이것은 쿼리의 출력입니다.
datsize ndxsize tblsize 682.51
47.57 730.08
이것은 테이블 구조입니다 ( SHOW CREATE TABLE
)
`CREATE TABLE `mybigtable` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`uid` int(11) NOT NULL,
`created_at` datetime NOT NULL,
`tid` bigint(20) NOT NULL,
`text` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`ft` tinyint(1) NOT NULL,
`irtsd` bigint(20) NOT NULL,
`irtuid` int(11) NOT NULL,
`rc` int(11) NOT NULL,
`r` tinyint(1) NOT NULL,
`e` text CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, `timezone` varchar(5) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `uid_tid` (`uid`,`tid`)) ENGINE=InnoDB AUTO_INCREMENT=2006963844 DEFAULT CHARSET=utf8`
ALTER TABLE ... ENGINE=InnoDB;
(빈 공간이있는 경우). 대부분은 매우 빠른 SSD에 만족하며 더 이상 걱정하지 않습니다.