Những bảng nào nên hoặc có thể được di chuyển sang InnoDB và bảng nào vẫn là MyISAM?


10

Theo tiêu đề: Có một danh sách nhanh các ứng cử viên cho các bảng để di chuyển sang InnoDB không? Và những gì nên vẫn là MyISAM.

Một số thông tin bổ sung

  • Trang web có tải đọc khá nặng, nhưng chèn khoảng 10 nút mỗi giờ, với các thẻ và như vậy.
  • Chúng tôi sử dụng rất nhiều CCK (một lượng lớn các bảng được chuẩn hóa ở dạng content_field%).
  • Chúng tôi cũng sử dụng Chế độ xem cho tất cả các khối và trang của mình; nhưng nhiều trong số đó là ứng cử viên để thay thế bằng các mô-đun tùy chỉnh (như để giảm các truy vấn cơ sở dữ liệu và độ nặng của các truy vấn đó).
  • Người dùng đều ẩn danh; ngoại trừ một vài người đăng nhập và biên tập viên web.

Thật buồn cười là toàn bộ internet không biết làm thế nào để trả lời câu hỏi này. Những bảng Drupal nào được viết nhiều nhất và bị khóa .... ai biết được.
JM Becker

Câu trả lời:


8

Bạn nên chuyển đổi tất cả dữ liệu sang InnoDB để ngăn chặn sự cố khóa bảng. Tuy nhiên, đây là đôi khi để suy nghĩ về:

Lập chỉ mục FULLTEXT

Hiện tại, chỉ MyISAM hỗ trợ lập chỉ mục FULLTEXT. Lập chỉ mục FULLTEXT cho InnoDB hiện đang hoạt động cho MySQL 5.6 nhưng chưa sẵn sàng sản xuất . Nếu bạn có bất kỳ bảng Drupal nào có chỉ mục FULLTEXT, chúng không thể được chuyển đổi thành InnoDB tại thời điểm này.

CẬP NHẬT về lập chỉ mục FULLTEXT

MySQL 5.6 hiện là GA (không dùng cho sản xuất). Vui lòng thử lập chỉ mục FULLTEXT trong InnoDB.

Để xác định các bảng có FULLTEXTchỉ mục, hãy chạy truy vấn này:

SELECT table_schema,table_name
FROM information_schema.statistics
WHERE index_type='FULLTEXT';

Nếu không có hàng nào quay lại, hãy chuyển đổi tất cả các bảng InnoDB thành nội dung trái tim của bạn. Tôi đã viết một bài đăng trước đó về cách chuyển đổi tất cả các bảng MyISAM sang InnoDB chỉ bằng mysql .

Bản sao MySQL

Nếu bạn có môi trường đọc nặng, việc đọc có thể diễn ra nhanh hơn trong MyISAM nếu bạn làm như sau:

  • Thiết lập bản sao Master / Slave
  • Tạo một hoặc nhiều nô lệ đọc dưới Master
  • Thêm --skip-innodbvào /etc/my.cnf trên tất cả các nô lệ (chuyển đổi bảng thành MyISAM khi tải dữ liệu vào Slave)
  • Thay đổi định dạng hàng của tất cả các bảng MyISAM trên mỗi Slave thành CỐ ĐỊNH bằng lệnh này: ALTER TABLE tblname ROW_FORMAT=FIXED;
  • Tôi đã đăng một cái gì đó về điều này trong DBA StackExchange
  • Cuốn sách Thiết kế và điều chỉnh cơ sở dữ liệu MySQL khuyên bạn nên sử dụng ROW_FORMAT=FIXEDtrên các trang 72,73. Điều này sẽ chuyển đổi nội bộ tất cả các trường VARCHAR thành CHAR. Nó sẽ làm cho bảng MyISAM lớn hơn, nhưng thực hiện các lệnh CHỌN đối với nó sẽ nhanh hơn nhiều. Cá nhân tôi có thể chứng thực điều này. Tôi đã từng có một bảng là 1,9 GB. Tôi đã thay đổi định dạng với ALTER TABLE tblname ROW_FORMAT=FIXED. Bảng kết thúc 3,7 GB. Tốc độ của các CHỌN so với nó nhanh hơn 20-25% mà không cải thiện hoặc thay đổi bất cứ điều gì khác.

Điều đau đầu duy nhất với điều này là làm cho ứng dụng của bạn nhận thức được các nô lệ đọc riêng biệt.

TIẾNG VIỆT

Nếu bạn đang xem xét các lợi ích khác mà mỗi công cụ lưu trữ có, hãy kiểm tra DBA StackExchange:


4

Vì trang web của bạn ở phía nặng về đọc, tôi chỉ cần chuyển đổi tất cả các bảng sang InnoDB. Sau đó, bạn sẽ có thể tối ưu hóa hiệu suất đọc bằng cách định cỡ nhóm bộ đệm InnoDB và bộ đệm truy vấn một cách thích hợp. Bằng cách này, chúng tôi đạt được hàng nghìn truy vấn mỗi giây trên các máy chủ cơ sở dữ liệu chuyên dụng trong cơ sở hạ tầng lưu trữ Drupal của chúng tôi.

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.