Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Bekerja dengan ruang meja InnoDB untuk meningkatkan waktu pemulihan kerusakan untuk My RDS SQL
Setiap tabel di My SQL terdiri dari definisi tabel, data, dan indeks. Mesin SQL penyimpanan Saya InnoDB menyimpan data tabel dan indeks di tablespace. InnoDB membuat tablespace bersama global yang berisi kamus data dan metadata relevan lainnya, serta dapat berisi data dan indeks tabel. InnoDB juga dapat membuat tablespace terpisah untuk setiap tabel dan partisi. Tablespace terpisah ini disimpan dalam file berekstensi .ibd dan judul setiap tablespace berisi nomor pengidentifikasi unik.
Amazon RDS menyediakan parameter dalam grup SQL parameter Saya yang disebutinnodb_file_per_table
. Parameter ini mengontrol apakah InnoDB menambahkan data dan indeks tabel baru ke tablespace bersama (dengan menetapkan nilai parameter ke 0) atau ke tablespace terpisah (dengan menetapkan nilai parameter ke 1). Amazon RDS menetapkan nilai default untuk innodb_file_per_table
parameter ke 1, yang memungkinkan Anda untuk menghapus tabel InnoDB individual dan merebut kembali penyimpanan yang digunakan oleh tabel tersebut untuk instans DB. Biasanya, penetapan parameter innodb_file_per_table
ke 1 adalah pengaturan yang direkomendasikan.
Anda harus mengatur innodb_file_per_table
parameter ke 0 ketika Anda memiliki sejumlah besar tabel, seperti lebih dari 1000 tabel saat Anda menggunakan penyimpanan standar (magnetik) atau tujuan umum atau lebih dari 10.000 tabel saat Anda menggunakan SSD penyimpanan yang disediakanIOPS. Saat Anda menetapkan parameter ini ke 0, tablespace terpisah tidak dibuat dan hal ini dapat meningkatkan waktu yang diperlukan untuk pemulihan crash basis data.
Saya SQL memproses setiap file metadata, yang mencakup ruang tabel, selama siklus pemulihan kerusakan. Waktu yang dibutuhkan My SQL untuk memproses informasi metadata di tablespace bersama dapat diabaikan dibandingkan dengan waktu yang diperlukan untuk memproses ribuan file tablespace ketika ada beberapa tablespace. Karena nomor tablespace disimpan di judul setiap file, waktu gabungan untuk membaca semua file tablespace tersebut bisa mencapai beberapa jam. Misalnya, pemrosesan sejuta tablespace InnoDB pada penyimpanan standar selama siklus pemulihan crash dapat memakan waktu mulai lima hingga delapan jam. Dalam beberapa kasus, InnoDB dapat menentukan apakah pembersihan tambahan diperlukan setelah siklus pemulihan crash selesai sehingga siklus pemulihan crash akan dimulai lagi. Hal ini akan memperpanjang waktu pemulihan. Perlu diperhatikan bahwa siklus pemulihan crash juga melibatkan transaksi rolling back, perbaikan halaman yang rusak, dan operasi lain selain pemrosesan informasi tablespace.
Karena parameter innodb_file_per_table
berada di grup parameter, Anda dapat mengubah nilai parameter dengan mengedit grup parameter yang digunakan oleh instans DB Anda tanpa perlu melakukan boot ulang instans DB. Setelah pengaturan diubah, misalnya, dari 1 (buat tabel terpisah) ke 0 (gunakan tablespace bersama), tabel InnoDB baru akan ditambahkan ke tablespace bersama sedangkan tabel yang ada tetap memiliki tablespace terpisah. Untuk memindahkan tabel InnoDB ke tablespace bersama, Anda harus menggunakan perintah ALTER TABLE
.
Memigrasikan beberapa tablespace ke tablespace bersama
Anda dapat memindahkan metadata tabel InnoDB dari tablespace-nya ke tablespace bersama. Hal ini akan membuat ulang metadata tabel sesuai dengan pengaturan parameter innodb_file_per_table
. Pertama sambungkan ke instans My SQL DB Anda, lalu keluarkan perintah yang sesuai seperti yang ditunjukkan berikut. Untuk informasi selengkapnya, lihat Menghubungkan ke instans DB yang menjalankan mesin SQL database Saya.
ALTER TABLE
table_name
ENGINE = InnoDB, ALGORITHM=COPY;
Misalnya, kueri berikut mengembalikan pernyataan ALTER TABLE
untuk setiap tabel InnoDB yang tidak ada di tablespace bersama.
Untuk instans SQL 5.7 DB Saya:
SELECT CONCAT('ALTER TABLE `', REPLACE(LEFT(NAME , INSTR((NAME), '/') - 1), '`', '``'), '`.`', REPLACE(SUBSTR(NAME FROM INSTR(NAME, '/') + 1), '`', '``'), '` ENGINE=InnoDB, ALGORITHM=COPY;') AS Query FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE SPACE <> 0 AND LEFT(NAME, INSTR((NAME), '/') - 1) NOT IN ('mysql','');
Untuk instans SQL 8.0 DB Saya:
SELECT CONCAT('ALTER TABLE `', REPLACE(LEFT(NAME , INSTR((NAME), '/') - 1), '`', '``'), '`.`', REPLACE(SUBSTR(NAME FROM INSTR(NAME, '/') + 1), '`', '``'), '` ENGINE=InnoDB, ALGORITHM=COPY;') AS Query FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE SPACE <> 0 AND LEFT(NAME, INSTR((NAME), '/') - 1) NOT IN ('mysql','');
Membangun kembali SQL tabel Saya untuk memindahkan metadata tabel ke ruang meja bersama memerlukan ruang penyimpanan tambahan sementara untuk membangun kembali tabel, sehingga instans DB harus memiliki ruang penyimpanan yang tersedia. Selama pembuatan ulang, tabel dikunci dan tidak dapat diakses oleh kueri. Untuk tabel kecil atau tabel yang jarang diakses, hal ini mungkin tidak menjadi masalah. Untuk tabel besar atau tabel yang sering diakses dalam lingkungan yang sangat serentak, Anda dapat membuat ulang tabel pada replika baca.
Anda dapat membuat replika baca dan memigrasi metadata tabel ke tablespace bersama pada replika baca. Sementara ALTER TABLE pernyataan memblokir akses pada replika baca, instance DB sumber tidak terpengaruh. Instans DB sumber akan terus membuat log binernya, sementara replika baca mengalami lag selama proses pembuatan ulang tabel. Karena pembuatan ulang ini memerlukan ruang penyimpanan tambahan dan file log pemutaran ulang bisa menjadi besar, Anda harus membuat replika baca dengan alokasi penyimpanan yang lebih besar dari instans DB sumber.
Guna membuat replika baca dan membuat ulang InnoDB untuk menggunakan tablespace bersama, lakukan langkah-langkah berikut:
-
Pastikan retensi cadangan diaktifkan di instans DB sumber sehingga pencatatan biner diaktifkan.
-
Gunakan AWS Management Console atau AWS CLI untuk membuat replika baca untuk instance DB sumber. Karena pembuatan replika baca melibatkan banyak proses yang sama seperti pemulihan crash, proses pembuatannya dapat memakan waktu lama jika ada tablespace InnoDB dalam jumlah besar. Alokasikan lebih banyak ruang penyimpanan pada replika baca dibandingkan dengan yang saat ini digunakan pada instans DB sumber.
-
Setelah replika baca dibuat, buat grup parameter dengan pengaturan parameter
read_only = 0
daninnodb_file_per_table = 0
. Kemudian hubungkan grup parameter dengan replika baca. -
Keluarkan SQL pernyataan berikut untuk semua tabel yang ingin dimigrasikan pada replika:
ALTER TABLE
name
ENGINE = InnoDB -
Saat semua pernyataan
ALTER TABLE
Anda pada replika baca selesai, pastikan bahwa replika baca tersebut telah terhubung ke instans DB sumber dan bahwa kedua instans tersebut sudah sinkron. -
Gunakan konsol atau CLI untuk mempromosikan replika baca menjadi instance. Pastikan grup parameter yang digunakan untuk instans DB mandiri baru telah menetapkan parameter
innodb_file_per_table
ke 0. Ubah nama instans DB mandiri baru, lalu arahkan aplikasi apa pun ke instans DB mandiri baru.