Beberapa tabel INNODB di basis data produksi kami akan mencapai batas INT AUTO_INCREMENT dari 2147483647 dan kami perlu mengubahnya ke BIGINT jika tidak, penulisan akan mulai gagal.
Tabel-tabel tersebut dalam database MySQL 5.6.19a produksi yang berjalan di Amazon RDS.
Bagaimana kita bisa melakukan ALTER seperti ini tanpa mengganggu produksi membaca dan memasukkan yang terjadi setiap saat?
ALTER TABLE MYTABLE
CHANGE id
id
BIGINT NOT NULL AUTO_INCREMENT;
Inilah DDL untuk tabel:
CREATE TABLE `MYTABLE` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`siteId` int(11) NOT NULL,
`filter` varchar(10) NOT NULL DEFAULT 'ALL',
`date` varchar(10) NOT NULL,
`cards` varchar(250) NOT NULL,
`apples` varchar(45) NOT NULL,
`carrots` varchar(45) NOT NULL,
`corn` varchar(45) NOT NULL,
`peas` varchar(45) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `unique` (`siteId`,`filter`,`date`,`cards`),
KEY `date_k` (`date`),
KEY `cards_k` (`cards`),
KEY `apples_k` (`apples`),
KEY `siteId_k` (`siteId`)
) ENGINE=InnoDB AUTO_INCREMENT=1748961482 DEFAULT CHARSET=utf8
percona toolkit adalah jalan yang harus ditempuh, setidaknya jika Anda tidak kekurangan waktu. Konversi mengambil alih meja kami (500Gb, pengaturan master-slave) ketika kami mengujinya sedikit lebih dari 24jam, dalam produksi dibutuhkan (dengan perangkat keras yang lebih baik) hampir 1 bulan (sidenote lucu yang kami miliki sekitar 30 hari sebelum kami kehabisan id, karena itu kami sudah mulai merencanakan untuk rencana B dan C, bekerja dengan cadangan offline, menghapus budak, ...). Penundaan itu terutama karena menunggu replikasi terjadi pada budak (kami mengizinkan jeda waktu maksimal 50 detik). Pastikan juga untuk membatasi jumlah utas bersamaan. Kami memiliki lebih dari 2 juta sisipan / hari dan jutaan baca.
Perlu diketahui juga bahwa setelah peliputan dimulai Anda tidak dapat menghentikannya (atau setidaknya kami tidak menemukan cara untuk memulai kembali) :-(
sumber
Baik....
KEY TOP_QUERIES_LAST_30DAYS_fk (siteId)
berlebihan dengan KUNCI UTAMA, jadi Anda juga dapat MENGHENTIKANnya.INT UNSIGNED akan membuat Anda mencapai 4 miliar, apakah itu cukup?
Pertimbangkan
filter
untuk mengubah keENUM
.Apakah Anda memiliki 1,75 miliar baris? Atau apakah Anda "membakar" banyak id? Jika demikian, mungkin kita bisa memperbaikinya? Misalnya
REPLACE
dan rasa tertentuINSERT
akan melontarkan id.INSERT...ON DUPLICATE KEY
biasanya bisa digantiREPLACE
. Proses 2 langkah dapat menghindariINSERT IGNORE
pembakaran id.Kembali ke pertanyaan ...
Lihat apakah pt-online-schema-change akan melakukan trik: http://www.percona.com/doc/percona-toolkit/2.2/pt-online-schema-change.html
sumber