(Sadece okuma) için daha fazla veri yazmıyorum 700GB InnoDB tablo var. Daha eski verileri silmek ve (boş kaldığım gibi) bu disk alanı geri almak istiyorum. Silme kısmı oldukça kolaydır, çünkü bir auto-inc birincil dizinim var, bu yüzden onu kullanarak parçalar halinde yineleyebilir ve satırları silebilirim, ancak bu bana alanı geri getirmeyecek. OPTIMIZE TABLE
Irade varsayalım ama bu sonsuza kadar 700GB bir tablo alabilir, bu yüzden göz ardı başka bir seçenek var mı?
RolandoMySQLDBA tarafından düzenleyin
Tablonuzun olduğu varsayılırsa mydb.mytable
, lütfen aşağıdaki sorguyu çalıştırın ve tablonun büzülmesi için gereken disk alanını belirleyebilmeniz için buraya gönderin:
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;
İzin verilirse, tablo yapısını da görmemiz gerekir.
Noam tarafından düzenle
Sorgunun çıktısı budur:
datsize ndxsize tblsize
682.51 47.57 730.08
Bu tablo yapısı ( 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;
(eğer bunu yapmak için odanız varsa). Çoğu çok hızlı SSD'lerinden memnunlar ve artık endişelenmiyorlar.