Rumah  >  Artikel  >  pangkalan data  >  Balik semula MySQL (perkongsian ringkasan)

Balik semula MySQL (perkongsian ringkasan)

WBOY
WBOYke hadapan
2022-06-24 12:54:455974semak imbas

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.

Balik semula MySQL (perkongsian ringkasan)

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.

Pemulihan urus niaga

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:

Balik semula MySQL (perkongsian ringkasan)

  • buat asal fail

    Balik semula MySQL (perkongsian ringkasan)

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.

Balik semula MySQL (perkongsian ringkasan)

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.

Mekanisme pusing balik:

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:

Balik semula MySQL (perkongsian ringkasan)

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:

Balik semula MySQL (perkongsian ringkasan)

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:

Balik semula MySQL (perkongsian ringkasan).

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.

Ringkasan

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:

  • Untuk operasi kelompok, anda boleh menyerahkan dalam kelompok, seperti 1000 hingga 5000 baris
  • ruang asal dan ruang meja sementara global boleh dilaraskan dengan sewajarnya. Adalah disyorkan untuk menggunakan 4 fail buat asal dan mulakan ibtmp1 global kepada 1G
  • Dalam persekitaran ketersediaan tinggi dan memastikan konsistensi data, anda boleh mempromosikan hamba kepada tuan baharu, menyediakan perkhidmatan dan menunggu transaksi besar untuk digulung semula.
  • Dalam kes yang melampau, anda boleh menggunakan kill -9 untuk memulakan semula operasi Kerana jumlah data adalah sangat besar, pemulihan mysql akan menjadi perlahan pemulihan ranap. Masa menunggu akan berbeza bergantung pada jumlah data
  • Jika halaman data rosak atau rollback dilangkau semasa proses mulakan semula, anda boleh lulus innodb_force_recovery=3 (tiada operasi rollback transaksi dilakukan .)

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!

Kenyataan:
Artikel ini dikembalikan pada:csdn.net. Jika ada pelanggaran, sila hubungi admin@php.cn Padam