Tôi có thể giết BẢNG TỐI ƯU một cách an toàn trên bảng InnoDB không?


9

Tài liệu của MySQL để kill cảnh báo :

Cảnh báo

Giết một REPAIR TABLEhoặc OPTIMIZE TABLEhoạt động trên một MyISAMbảng dẫn đến một bảng bị hỏng và không thể sử dụng. Bất kỳ việc đọc hoặc ghi vào bảng như vậy đều thất bại cho đến khi bạn tối ưu hóa hoặc sửa chữa lại (không bị gián đoạn).

Đó là cho MyISAM.

Có phải nó cũng không an toàn khi giết một OPTIMIZE TABLEtiến trình chạy trên bảng InnoDB?

Câu trả lời:


8

Theo Hướng dẫn chứng nhận MySQL:

Câu lệnh TỐI ƯU HÓA làm sạch bảng MyISAM bằng cách chống phân mảnh. Điều này liên quan đến việc lấy lại không gian không sử dụng do xóa và cập nhật, và các bản ghi liên kết đã bị phân tách và lưu trữ không liên tục. TỐI ƯU BẢNG cũng sắp xếp các trang chỉ mục nếu chúng không theo thứ tự và cập nhật số liệu thống kê chỉ mục

Cũng hoạt động cho các bảng InnoDB, nhưng ánh xạ tới ALTER TABLE, để xây dựng lại bảng. Điều này cập nhật số liệu thống kê chỉ mục và giải phóng không gian trong chỉ mục cụm.

Vì vậy, trong trường hợp của InnoDB:

Innodb tuân thủ ACID, bảng tối ưu hóa chỉ cần sao chép tất cả các bản ghi vào một bảng mới

  1. Nếu các trang chỉ mục không được sắp xếp, sắp xếp chúng,
  2. Nếu số liệu thống kê của bảng không cập nhật (và không thể thực hiện sửa chữa bằng cách sắp xếp chỉ mục), hãy cập nhật chúng.
  3. Nếu bảng đã bị xóa hoặc tách hàng, hãy sửa chữa bảng.

Và nếu bạn cố giết nó khi nó chạy, bạn sẽ không mất bất kỳ hồ sơ nào.

Ngoài ra, trường hợp của InnoDB với innodb_defragment=1, sẽ không có ROLLBACK được yêu cầu, vì trong trường hợp OPTIMIZE TABLEnày là tăng dần.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.