Artikel ini membawakan anda pengetahuan yang berkaitan tentang mysql terutamanya menganjurkan isu berkaitan rollback dan terutamanya memperkenalkan mekanisme rollback dan rollback kedai buku Mari kita lihat bersama-sama.
Pembelajaran yang disyorkan: tutorial video mysql
Saya sering menghadapi pengendalian meja besar dan mendapati masa operasi terlalu lama atau menjejaskan proses dalam talian Perniagaan perlu melancarkan operasi meja besar. Selepas menghentikan operasi jadual yang besar, menunggu rollback adalah proses yang sangat lama Walaupun anda mungkin tahu beberapa kaedah untuk memendekkan masa dan kagum dengan integriti data dalam persekitaran pengeluaran, anda boleh memilih untuk tidak campur tangan.
Urus niaga ialah unit pelaksanaan dalam pangkalan data hubungan dan anda boleh memilih untuk melakukan atau melancarkan semula melalui kawalan peringkat akhir. Lakukan operasi rollback dalam pelbagai senario di mana integriti tidak dapat dijamin. Rollback dalam MySQL dicapai melalui log Undo, yang mengandungi maklumat tentang cara untuk membuat asal perubahan terkini yang berkaitan dengan transaksi. Buat asal log wujud dalam segmen Buat asal log dan segmen Buat asal log disertakan dalam segmen tarik balik. Segmen rollback terletak di ruang jadual asal dan ruang jadual Sementara global.
Hubungannya adalah seperti berikut:
mysql > show variables like '%undo%'; +--------------------------+--------------------+ | Variable_name | Value | +--------------------------+--------------------+ | innodb_max_undo_log_size | 1073741824 | | innodb_undo_directory | /opt/data8.0/mysql | | innodb_undo_log_encrypt | OFF | | innodb_undo_log_truncate | ON | | innodb_undo_tablespaces | 2 | +--------------------------+--------------------+ 5 rows in set (0.00 sec)
Global Temporary Merujuk kepada ruang jadual sementara (ibtmp1) yang digunakan untuk menyimpan segmen rollback untuk perubahan yang dibuat pada jadual sementara ciptaan pengguna.
mysql > SELECT @@innodb_temp_data_file_path; +-------------------------------+ | @@innodb_temp_data_file_path | +-------------------------------+ | ibtmp1:128M:autoextend:max:30G | +-------------------------------+
Selepas memahami fail yang disertakan dalam rollback, teruskan membaca.
Kawalan balik balik MySQL diselaraskan oleh enjin innodb dalaman dan tidak menyediakan mekanisme kawalan manusia. Parameter rollback MySQL yang disediakan pada masa ini adalah seperti berikut:
mysql> SHOW VARIABLES LIKE '%ROLL%'; +----------------------------+-------+ | Variable_name | Value | +----------------------------+-------+ | innodb_rollback_on_timeout | OFF | | innodb_rollback_segments | 128 | +----------------------------+-------+
innodb_rollback_on_timeout:
InnoDB lalai untuk melancarkan penyata terakhir hanya apabila transaksi tamat. Jika --InnoDB -rollback-on-timeout ditentukan, tamat masa transaksi akan menyebabkan InnoDB membatalkan dan melancarkan keseluruhan transaksi. Ia dimatikan secara lalai, sebaik sahaja masa yang ditetapkan, seperti pemulangan gagal. Adalah boleh dibayangkan bahawa akan ada ketidakkonsistenan dalam data. Kaedah ini tidak digalakkan.
Innodb_rollback_segments (1~128):
mentakrifkan bilangan segmen rollback yang diperuntukkan kepada setiap ruang jadual buat asal dan bilangan ruang jadual sementara global yang diperuntukkan untuk transaksi yang menjana rekod buat asal .
Bilangan transaksi yang disokong oleh segmen rollback: bergantung pada bilangan slot buat asal dalam segmen rollback dan bilangan log buat asal yang diperlukan untuk setiap transaksi
Bilangan slot buat asal dalam rollback yang disediakan secara rasmi segmen adalah berdasarkan saiz halaman InnoDB yang berkaitan:
Daripada pelaksanaan kod sumber MySQL8.0.27 terkini, storageinnobaseincludetrx0rseg.h:
/* Number of undo log slots in a rollback segment file copy 这里 UNIV_PAGE_SIZE正常页面的大小 即 1024*/ #define TRX_RSEG_N_SLOTS (UNIV_PAGE_SIZE / 16) /* Maximum number of transactions supported by a single rollback segment 单个回滚段支持的最大事务数1024/2=512 */ #define TRX_RSEG_MAX_N_TRXS (TRX_RSEG_N_SLOTS / 2)
dibahagikan kepada halaman secara lalai Terdapat 1024 slot (TRX_RSEG_N_SLOTS), dan setiap slot sepadan dengan objek log batal, jadi secara teorinya InnoDB boleh menyokong 128 * 512 = 65536 transaksi biasa.
Untuk bahagian prinsip, sila rujuk MySQL · Ciri Enjin · InnoDB batalkan perayauan log
Secara rasmi menyediakan undbo rollback senario baca dan tulis serentak:
Kembali dari prinsip rayuan Dalam senario aplikasi sebenar:
Keupayaan untuk menyokong segmen rollback masih besar, tetapi selalunya sangat perlahan apabila melaksanakan kumpulan rollback yang besar. Terutama semasa pemprosesan dalam talian, ia mungkin mengambil masa 10 minit untuk melancarkan 100,000 baris. Atau lebih lama lagi.
Seterusnya, sediakan 50 juta data jadual tunggal melalui sysbench Tanpa beban, padamkannya selama kira-kira 1 minit Kemudian gunakan kill -9 untuk menghentikan transaksi secara paksa dan melancarkan transaksi:
.
Jelas sekali kesan mulakan semula adalah lebih baik.
Walau bagaimanapun, kaedah kill -9 boleh merosakkan halaman data dengan mudah dan menimbulkan risiko yang besar. Pangkalan data juga di bawah beban dalam kehidupan seharian Ia boleh dibayangkan bahawa kos melancarkan transaksi besar adalah sangat tinggi.
Operasi rollback yang besar harus dielakkan sebanyak mungkin, yang menggunakan sumber dan prestasi pangkalan data, serta boleh menyebabkan kemalangan pengeluaran besar dalam persekitaran pengeluaran. Jika rollback transaksi yang besar tidak dapat dielakkan, anda boleh menggunakan kaedah berikut:
Pembelajaran yang disyorkan: tutorial video mysql
Atas ialah kandungan terperinci Balik semula MySQL (perkongsian ringkasan). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!