Wow, bạn có một số phần cứng khủng khiếp cho vấn đề này. Không có nhiều hơn nữa bạn có thể sử dụng phần cứng một cách khôn ngoan, ngoại trừ việc nâng cấp lên CPU Sandy / Ivy Bridge có thể cho hiệu suất tốt hơn 20-50% trong các tìm kiếm Btree, v.v.
Xin lưu ý rằng sở trường của tôi là Innodb, vì vậy tôi sẽ
- Bỏ qua rằng bạn là myisam và hành động như thể nó sẽ không tạo ra sự khác biệt.
- Giả sử vấn đề này là đủ động lực để giúp bạn nâng cấp. Vâng, nó là một bản nâng cấp.
Innodb có thể giúp tận dụng lợi thế của tất cả bộ nhớ đó bằng cách lưu trữ các hàng thường xuyên truy cập này trong vùng đệm của nó. Bạn có thể điều chỉnh nó lớn đến mức bạn muốn (giả sử 80% bộ nhớ) và đọc / ghi mới vẫn còn trong bộ nhớ cho đến khi cần đẩy chúng vào đĩa để có thêm chỗ cho dữ liệu truy cập mới nhất. Trong bộ nhớ là một thứ tự cường độ nhanh hơn so với FusionIO của bạn.
Có nhiều tính năng khác của Innodb, chẳng hạn như băm thích ứng, cơ chế khóa tự động, vv có thể là một lợi ích cho môi trường của bạn. Bạn, tuy nhiên, biết dữ liệu của bạn tốt hơn tôi.
Trong thế giới innodb, một giải pháp ngắn hạn tốt là tối ưu hóa nô lệ của bạn - bạn có thực sự cần mọi chỉ số về nô lệ mà bạn có trên chủ của mình không? Các chỉ mục là một quả bóng và chuỗi trên các chèn / cập nhật / xóa, NGAY với các thẻ Fusion IO. IOPS không phải là tất cả mọi thứ ở đây. Các procs cầu Sandy / Ivy có thông lượng bộ nhớ và hiệu năng tính toán tốt hơn nhiều - chúng có thể tạo ra sự khác biệt rất lớn của Westmeres mà bạn có bây giờ. (Hình 20-50% tổng thể). Xóa tất cả các chỉ mục bạn không cần trên nô lệ!
Thứ hai, và gần như chắc chắn chỉ áp dụng cho innodb, là mk-prefetch có thể biết bản cập nhật nào và trước khi nô lệ viết chúng. Điều này cho phép mk-prefetch chạy một truy vấn đọc trước, do đó buộc dữ liệu phải ở trong bộ nhớ vào thời điểm đơn thay thế chạy truy vấn ghi. Điều này có nghĩa là dữ liệu nằm trong bộ nhớ chứ không phải trong fusionIO, một thứ tự tăng nhanh hiệu suất cường độ. Điều này làm cho một HUGE khác biệt, hơn người ta có thể mong đợi. Rất nhiều công ty sử dụng điều này như một giải pháp lâu dài. Tìm hiểu thêm bằng cách kiểm tra Bộ công cụ Percona .
Thứ ba, và quan trọng nhất, một khi bạn đã nâng cấp lên Innodb, hãy kiểm tra Tokutek. Những kẻ này có một số thứ tuyệt vời xấu xa vượt quá hiệu suất ghi / cập nhật / xóa của Innodb bằng một cú sút xa. Họ khuyến khích tốc độ sao chép được cải thiện như một trong những lợi ích chính và bạn có thể thấy từ điểm chuẩn của họ tại sao Fusions crazy IOPS vẫn không giúp bạn trong trường hợp Btrees . (Lưu ý: Không được tôi xác minh độc lập.) Họ sử dụng thay thế chỉ số btree, trong khi phức tạp hơn nhiều, cải thiện nhiều hạn chế về tốc độ thuật toán của các chỉ mục btree.
Tôi đang trong quá trình xem xét việc áp dụng Tokutek. Nếu họ giải phóng quá nhiều tốc độ ghi, điều đó cho phép tôi thêm nhiều chỉ mục hơn. Vì họ nén dữ liệu và chỉ mục theo tỷ lệ tuyệt vời như vậy (25 lần họ trích dẫn), bạn thậm chí không phải trả giá (hiệu suất, bảo trì) cho dữ liệu tăng. Bạn phải trả ($) cho công cụ của họ, $ 2500 / năm cho mỗi GB, IIRC được nén trước. Họ có giảm giá nếu bạn sao chép dữ liệu, nhưng bạn thậm chí có thể chỉ cần cài đặt Tokutek trên nô lệ của mình và giữ nguyên chủ của mình. Kiểm tra các chi tiết kỹ thuật trong bài giảng Khóa học mở MIT Algoritms . Ngoài ra, họ có hàng tấn công cụ kỹ thuật trên blog và các trang trắng thông thường cho những người không có 1:20 để xem video. Tôi tin rằng video này cũng cung cấp công thức Big-O cho tốc độ đọc nhanh như thế nào. Tôi cógiả sử rằng việc đọc chậm hơn (Luôn có sự đánh đổi!), nhưng công thức quá phức tạp đối với tôi để đánh giá mức độ. Họ cho rằng nó gần giống nhau, nhưng tôi thích hiểu toán hơn (không có khả năng!). Bạn có thể ở trong một tình huống tốt hơn để khám phá điều này hơn tôi.
Ps tôi không liên kết với Tokutek, tôi chưa bao giờ chạy sản phẩm của họ và họ thậm chí không biết tôi đang nhìn họ.
Cập nhật :
Tôi thấy bạn có một số câu hỏi khác trên trang này và nghĩ rằng tôi sẽ tham gia:
Đầu tiên, tìm nạp trước nô lệ gần như chắc chắn sẽ không hoạt động cho myisam trừ khi bạn có một môi trường đặc biệt. Điều này chủ yếu là do việc tìm nạp trước sẽ khóa chính các bảng bạn định ghi hoặc chủ đề nô lệ có bảng bị khóa mà trình nền tìm nạp trước cần. Nếu các bảng của bạn được cân bằng cực kỳ tốt để sao chép và các bảng khác nhau được viết theo kiểu vòng tròn, thì điều này có thể hoạt động - nhưng hãy nhớ rằng điều này rất lý thuyết. Cuốn sách "Hiệu suất cao Mysql" có nhiều thông tin hơn trong phần "Các vấn đề sao chép".
Thứ hai, có lẽ nô lệ của bạn giữ tải 1.0-1.5, có thể cao hơn nếu bạn có các procs hoặc truy vấn khác đang chạy nhưng đường cơ sở là 1.0. Điều này có nghĩa là bạn có khả năng bị ràng buộc CPU, có khả năng với FusionIO của bạn trên tàu. Như tôi đã đề cập trước đó, Sandy / Ivy Bridge sẽ cung cấp thêm một chút sức mạnh, nhưng có lẽ không đủ để giúp bạn vượt qua thời điểm khó khăn hơn với độ trễ tối thiểu. Nếu tải trên nô lệ này chủ yếu là chỉ ghi (nghĩa là không đọc nhiều), CPU của bạn gần như chắc chắn sẽ dành thời gian để tính toán vị trí cho các lần chèn / xóa btree. Điều này sẽ củng cố quan điểm của tôi ở trên về việc loại bỏ các chỉ mục không quan trọng - bạn luôn có thể thêm lại chúng sau này. Vô hiệu hóa siêu phân luồng sẽ không hoạt động, nhiều CPU không phải là kẻ thù của bạn. Khi bạn nhận được ram trên 32 GB, giả sử là 64 GB, bạn cần lo lắng về việc phân phối ram, nhưng ngay cả sau đó các triệu chứng là khác nhau.
Cuối cùng, và quan trọng nhất (đừng bỏ qua phần này;)), tôi cho rằng bạn hiện đang chạy RBR (sao chép dựa trên hàng) vì bạn đã đề cập đến việc tăng hiệu suất không tầm thường khi chuyển đổi quá. Tuy nhiên - có thể có một cách để có được hiệu suất cao hơn ở đây. Lỗi Mysql 53375 có thể hiển thị nếu bạn có các bảng được sao chép mà không có khóa chính. Các nô lệ về cơ bản không đủ thông minh để sử dụng bất cứ thứ gì ngoại trừ một khóa chính, do đó, việc không có một chủ đề sao chép để thực hiện quét toàn bộ bảng cho mỗi bản cập nhật. Một sửa chữa chỉ đơn giản là thêm một khóa chính tự động thay thế lành tính. Tôi chỉ làm điều này nếu cái bàn lớn (ví dụ vài hàng ngàn hàng hoặc lớn hơn). Điều này, tất nhiên, đi kèm với chi phí có một chỉ số khác trên bàn, điều này làm tăng giá mà bạn phải trả trong CPU. Lưu ý rằng có rất ít đối số lý thuyết chống lại điều này, vì InnoDB sẽ thêm một lý do phía sau hậu trường nếu bạn không. Tuy nhiên, bóng ma không phải là một biện pháp phòng thủ hữu ích chống lại 53375. Vonfram cũng có thể khắc phục vấn đề này, nhưng bạn cần chắc chắn khi sử dụng Vonfram mà bạn có mã hóa thẳng. Lần cuối cùng tôi chơi với nó, nó sẽ chết một cách khủng khiếp khi bất kỳ chuỗi không phải UTF8 nào cần sao chép. Đó là khoảng thời gian tôi từ bỏ nó.