Kamu bertanya
di mana data yang tidak terikat disimpan, sehingga transaksi READ_UNCOMMITTED dapat membaca data yang tidak terikat dari transaksi lain?
Untuk menjawab pertanyaan Anda, Anda perlu tahu seperti apa Arsitektur InnoDB.
Gambar berikut dibuat tahun lalu oleh Percona CTO Vadim Tkachenko
Menurut Dokumentasi MySQL tentang Model dan Penguncian Transaksi InnoDB
KOMIT berarti bahwa perubahan yang dibuat dalam transaksi saat ini dibuat permanen dan menjadi terlihat oleh sesi lain. Pernyataan ROLLBACK, di sisi lain, membatalkan semua modifikasi yang dilakukan oleh transaksi saat ini. Baik COMMIT maupun ROLLBACK melepaskan semua kunci InnoDB yang ditetapkan selama transaksi saat ini.
Karena COMMIT dan ROLLBACK mengatur visibilitas data, READ COMMITTED dan READ UNCOMMITTED harus bergantung pada struktur dan mekanisme yang merekam perubahan
- Rollback Segments / Undo Space
- Ulangi Log
- Kesenjangan Mengunci Tabel yang Terlibat
Segmen Rollback dan Undo Space akan tahu seperti apa perubahan data sebelum perubahan diterapkan. Redo Log akan tahu perubahan apa yang harus digulirkan ke depan agar data muncul diperbarui.
Anda juga bertanya
mengapa transaksi READ_COMMITTED tidak dapat membaca data yang tidak dikomit, yaitu melakukan "pembacaan kotor"? Mekanisme apa yang memberlakukan pembatasan ini?
Redo Logs, Undo Space dan Baris yang dikunci ikut bermain. Anda juga harus mempertimbangkan Kolam Penyangga InnoDB (tempat Anda dapat mengukur halaman kotor dengan innodb_max_dirty_pages_pct , innodb_buffer_pool_pages_dirty dan innodb_buffer_pool_bytes_dirty ).
Mengingat hal ini, READ COMMITTED akan tahu data seperti apa yang muncul secara permanen. Oleh karena itu, tidak perlu mencari halaman kotor yang tidak dilakukan. READ COMMITED tidak akan lebih dari sekadar pembacaan kotor yang telah dilakukan. READ UNCOMMITTED akan terus mengetahui baris apa yang harus dikunci dan apa yang harus dilakukan atau dibaca ulang log untuk membuat data terlihat.
Untuk memahami sepenuhnya Penguncian Baris untuk Mengelola Isolasi, baca Model dan Penguncian Transaksi InnoDB