Lập trình 25/10/2026 7 phút

MVCC đo thật: giao dịch A vẫn đọc số dư 1000 sau khi B đã sửa thành 2000 và commit, nhờ dựng lại phiên bản cũ từ undo log — và vì đọc thường không khóa, B cập nhật xong trong 55 ms thay vì chờ 2035 ms như khi A khóa hàng

Phần 6 sê-ri MySQL và InnoDB: MVCC cho nhiều giao dịch đọc cùng một hàng mà không chặn nhau, bằng cách giữ các phiên bản cũ trong undo log. Đo thật trong mysql:8 ở mức REPEATABLE READ: giao dịch A đọc số dư 1000, giao dịch B sửa thành 2000 rồi commit, A đọc lại vẫn thấy 1000 (ảnh chụp nhất quán dựng từ undo log), chỉ sau khi A commit mới thấy 2000. Và vì đọc thường không lấy khóa, B cập nhật xong trong 55 ms khi A đang đọc thường, nhưng phải chờ 2035 ms khi A đọc bằng SELECT FOR UPDATE. Mỗi hàng mang khóa giao dịch và con trỏ undo để dựng lại phiên bản đúng cho từng ảnh chụp.