Khi nào an toàn để tắt bộ đệm đôi InnoDB?


7

MySQL InnoDB cho phép chúng tôi vô hiệu hóa bộ đệm đôi bằng cách cài đặt innodb_doublewrite = 0. Các cơ sở dữ liệu khác dường như không cho phép điều chỉnh cài đặt này .

Làm thế nào InnoDB vẫn có thể duy trì tính toàn vẹn dữ liệuACID nếu chúng tôi vô hiệu hóa bộ đệm đôi?

Trong những tình huống nào sẽ an toàn để tắt bộ đệm đôi InnoDB?

Câu trả lời:


12

Tình huống duy nhất tôi có thể nghĩ đến là tải lại một mysqldump lớn. Tại sao ?

Hãy xem Đại diện hình ảnh này của InnoDB (Percona CTO Vadim Tkachenko)

Kiến trúc InnoDB

Từ hình ảnh, bạn có thể thấy rằng Bộ đệm InnoDB ghi các trang bẩn vào

  • Đăng nhập bộ đệm
  • Chèn bộ đệm vào ibdata1
  • Bộ đệm ghi đôi trong ibdata1
  • .ibd tệp cho mỗi bảng InnoDB

Tắt Bộ đệm ghi đôi sẽ cho phép mysqldump ghi dữ liệu và các trang chỉ mục vào các bảng nhanh hơn vì nó không phải ghi cùng một trang 16K vào ibdata1.

Máy chủ sản xuất không bao giờ nên tắt Bộ đệm ghi đôi. Nếu bạn làm như vậy để tải dữ liệu nhanh hơn (trong quá trình bảo trì), hãy bật nó ngay lập tức sau khi tải lại Máy chủ DB.

Nói cách khác,

  • Thêm innodb_doublewrite = 0vàomy.cnf
  • Chạy SET GLOBAL innodb_fast_shutdown = 0;
  • Khởi động lại mysql
  • Tải mysqldump
  • Xóa innodb_doublewrite = 0khỏimy.cnf
  • Chạy SET GLOBAL innodb_fast_shutdown = 0;
  • Khởi động lại mysql

Ý của bạn là nói SET GLOBAL innodb_fast_shutdown = 0;từ điểm thứ 2 đến điểm cuối? Không nên đặt nó trở lại 1?
Tyler Christian

1
@TylerChristian Không, phải 0hai lần. Khi mysqld hoạt động trở lại, nó sẽ trở lại với giá trị mặc định là 1 (Trừ khi innodb_fast_shutdown=0có trong my.cnf)
RolandoMyQueryDBA

8

Vấn đề này đã được giải quyết tốt trong bài đăng này của Yves Trudeau, người dường như cho rằng nó an toàn - kết luận của ông là

Phần kết luận

Giống như ZFS, ext4 có thể là giao dịch và thay thế bộ đệm ghi đôi InnoDB bằng nhật ký giao dịch hệ thống tệp mang lại hiệu suất tăng 55% cho khối lượng công việc chuyên sâu. Hiệu suất cũng được dự kiến ​​cho SSD và cấu hình kéo sợi / SSD hỗn hợp

Về cơ bản, ông nói rằng nếu bạn có một hệ thống tập tin phù hợp thì có, nó có thể an toàn.

Người của Percona thực sự biết công cụ của họ.


3
Sau khi điều này được đăng, Trudeau đã thêm một bản cập nhật cho bài đăng của mình: đừng làm điều này, điều này đã được chứng minh là dữ liệu bị hỏng!
carla

Trudeau đã cập nhật nói rằng nó ổn với ZFS: percona.com/blog/2015/06/17/ triệt Một nguồn khác: nội dung.en.oreilly.com / 1 / event / 21 / trộm
ItalyPaleAle

@Qualcuno - Thông báo tôi nhận được là các hệ thống tệp nhật ký đều ổn khi vô hiệu hóa bộ đệm ghi đôi - hãy để FS / OS xử lý mọi việc - với bộ đệm được hỗ trợ bằng pin.
Vérace

4

Cập nhật trên blog của Yves Trudeau: https://www.percona.com/blog/2015/06/17/update-on-the-innodb-double-write-buffer-and-ext4-transilities/

Nói tóm lại, nó có lẽ không an toàn.

Các ý kiến ​​dường như chỉ ra rằng - mặc dù nó sẽ sống sót qua thử nghiệm kéo nếu FS là ext4 với tạp chí, hoặc ZFS, nhưng nó sẽ không tồn tại một vụ giết người đơn giản (hoặc OOM tôi nghi ngờ) vì FS sẽ không từ chối dữ liệu được viết một phần từ lớp ứng dụng.


Không chắc chắn rằng tôi đã nắm bắt mọi thứ, nhưng từ các nhận xét (gần cuối), có vẻ như nếu kích thước cam kết là 16kb trở xuống, nó có vẻ đáng tin cậy (tìm kiếm nhận xét "32K append16kb.txt" của Yves Trudeau. cam kết kích thước, nó có vẻ không đáng tin cậy (xem bình luận với dòng "Tôi thấy phân phối ngay bây giờ" - nhưng, vì kích thước trang của InnoDB là 16kb, có vẻ như không phải là rủi ro. Yves Trudeau cho biết ông sẽ kiểm tra nhưng không đăng bất cứ điều gì kể từ khi. Có vẻ như điểm vẫn còn mở? :-)
Vérace

Sau khi điều này được đăng, Trudeau đã thêm một bản cập nhật cho bài đăng của mình: QUAN TRỌNG: ĐỪNG THỬ NÀY TRONG SẢN XUẤT. Như được chứng minh bởi Marko (xem bình luận), nó có thể làm hỏng dữ liệu của bạn.
carla

1
Theo percona.com/blog/2015/06/17/, thật an toàn khi làm điều này với ZFS, không phải với EXT4
ItalyPaleAle

1
Nhận xét cuối cùng của Trudeau là "ZFS hoàn toàn khác với ext4, ZIL hoạt động như bộ đệm doublewrite nên an toàn trên ZFS để vô hiệu hóa bộ đệm ghi kép." - vì vậy, đối với một số hệ thống tập tin, nó ổn!
Vérace

0

Danh sách dự kiến của tôi về các tình huống có thể tắt bộ đệm doublewrite:

  • FusionIO (hoặc bất cứ tên nào bây giờ) - Ổ đĩa xử lý nó
  • Galera - Xây dựng lại nút nếu nó gặp sự cố
  • Nô lệ - Xây dựng lại nô lệ nếu nó gặp sự cố
  • ZFS - Trình điều khiển xử lý 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.