Cara Membuat Indeks pada Jadual Pengeluaran MySQL yang Besar Tanpa Mengunci Jadual
Latar Belakang Masalah:
Mencipta indeks pada jadual MySQL yang besar boleh menjadi tugas yang sukar, terutamanya dalam persekitaran pengeluaran yang akses tanpa gangguan adalah penting. Penyataan CREATE INDEX tradisional boleh menghasilkan kunci jadual yang lengkap, menyekat semua operasi serentak.
Pertimbangan Versi MySQL:
- Dalam MySQL 5.6 dan lebih tinggi, kemas kini indeks dilakukan dalam talian, membenarkan operasi baca dan tulis diteruskan semasa penciptaan indeks.
- Walau bagaimanapun, dalam MySQL 5.5 dan lebih awal, termasuk jadual InnoDB dan MyISAM, kemas kini indeks akan menyekat tulisan pada jadual.
Pendekatan Sarjana Pekeliling:
Untuk versi MySQL sebelum 5.6, satu pendekatan yang berkesan ialah teknik tuan bulat:
- Sediakan tuan menengah ( Master B) mereplikasi daripada master utama (Master A).
- Lakukan kemas kini skema pada Master B (membenarkan ia ketinggalan semasa naik taraf).
- Pastikan perubahan skema serasi dengan replikasi arahan daripada skema downversion pada Master A.
- Tukar secara atom semua pelanggan daripada Master A kepada Master B.
- Kemas kini skema pada Master A dan jadikan ia master sekunder.
Alat pt-online-schema-change Percona:
Alat ini mengautomasikan pendekatan master bulat dengan:
- Mencipta jadual baharu dengan skema yang dikemas kini.
- Memastikan jadual baharu disegerakkan dengan jadual asal menggunakan pencetus.
- Menyalin baris dalam kelompok daripada jadual asal.
- Menggantikan jadual asal dengan jadual baharu.
Pertimbangan AWS RDS:
Untuk pangkalan data MySQL yang dihoskan pada RDS Amazon, ciri "Read Replica Promotion" boleh digunakan untuk memudahkan perubahan skema tanpa mengunci jadual. Ini melibatkan membuat perubahan pada hamba baca sahaja dan kemudian mempromosikannya untuk menjadi tuan baharu.
Teknik Alternatif:
-
Gunakan sementara jadual: Cipta jadual sementara dengan indeks baharu, masukkan data daripada jadual asal dan gantikan jadual asal dengan jadual sementara.
-
Pahasi jadual: Pisahkan jadual ke dalam partition yang lebih kecil, cipta indeks pada setiap partition secara berasingan, dan kemudian cantumkan partition kembali bersama.
-
Gunakan proses latar belakang: Cipta proses latar belakang berasingan yang secara beransur-ansur mencipta indeks semasa jadual kekal boleh diakses untuk operasi biasa. Pendekatan ini tidak disokong dalam semua versi MySQL.
Atas ialah kandungan terperinci Bagaimana untuk Mencipta Indeks pada Jadual Pengeluaran MySQL Besar Tanpa Mengunci Jadual?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!