Nếu có một điều tôi có thể nói về MySQL là InnoDB, công cụ lưu trữ giao dịch (tuân thủ ACID) của nó, thực sự là đa luồng. Tuy nhiên, nó cũng đa luồng như BẠN CẤU HÌNH NÓ !!! Ngay cả khi "ra khỏi hộp", InnoDB hoạt động rất tốt trong một môi trường CPU duy nhất với các cài đặt mặc định. Để tận dụng khả năng đa luồng của InnoDB, bạn phải nhớ kích hoạt rất nhiều tùy chọn.
innodb_thread_concurrency đặt giới hạn trên cho số lượng luồng đồng thời mà InnoDB có thể giữ mở. Số vòng tốt nhất để đặt cho điều này là (2 X Số lượng CPU) + Số lượng đĩa. CẬP NHẬT : Khi tôi đã học trực tiếp từ Hội nghị Percona NYC, bạn nên đặt giá trị này thành 0 để cảnh báo InnoDB Storage Engine để tìm số luồng tốt nhất cho môi trường mà nó đang chạy.
innodb_concurrency_tickets đặt số lượng chủ đề có thể bỏ qua việc kiểm tra đồng thời mà không bị trừng phạt. Sau khi đạt đến giới hạn đó, kiểm tra đồng thời luồng trở lại định mức.
innodb_commit_concurrency đặt số lượng giao dịch đồng thời có thể được cam kết. Vì mặc định là 0, không thiết lập điều này cho phép bất kỳ số lượng giao dịch nào được cam kết đồng thời.
innodb_thread_s ngủ_delay thiết lập số mili giây mà một chuỗi InnoDB có thể không hoạt động trước khi nhập lại hàng đợi InnoDB. Mặc định là 10000 (10 giây).
innodb_read_io_threads và innodb_write_io_threads (cả kể từ MySQL 5.1,38) phân bổ số lượng chủ đề được chỉ định để đọc và ghi. Mặc định là 4 và tối đa là 64.
innodb numplication_delay áp đặt độ trễ của luồng trên một nô lệ là đạt đến innodb_thread_concurrency.
innodb_read_ahead_thr Ngưỡng cho phép đọc tuyến tính số lượng phạm vi đã đặt (64 trang [page = 16K]) trước khi chuyển sang đọc không đồng bộ.
Thời gian sẽ thoát khỏi tôi nếu tôi đặt tên cho nhiều lựa chọn hơn. Bạn có thể đọc về chúng trong Tài liệu của MySQL .
Hầu hết mọi người không biết về các tính năng này và khá hài lòng với InnoDB chỉ thực hiện các giao dịch tuân thủ ACID. Nếu bạn điều chỉnh bất kỳ tùy chọn nào trong số này, bạn sẽ làm điều đó một cách nguy hiểm.
Tôi đã chơi với MySQL 5.5 Nhiều bộ đệm nhóm (162GB trong 9 trường hợp bộ đệm) và đã cố gắng tự động phân vùng dữ liệu trong bộ nhớ theo cách này. Một số chuyên gia nói rằng điều này sẽ giúp bạn cải thiện hiệu suất 50%. Những gì tôi nhận được là một tấn khóa luồng thực sự khiến InnoDB thu thập dữ liệu. Tôi đã chuyển sang 1 bộ đệm (162GB) và tất cả đã hoạt động tốt trở lại trên thế giới. Tôi đoán bạn cần các chuyên gia Percona theo ý của bạn để thiết lập điều này. Tôi sẽ có mặt tại Hội nghị Percona MySQL ở New York vào ngày mai và sẽ hỏi về vấn đề này nếu có cơ hội.
Cuối cùng, InnoDB hoạt động tốt trong một máy chủ nhiều CPU với các cài đặt mặc định cho các hoạt động đa luồng. Tinh chỉnh chúng cần sự chăm sóc tuyệt vời, sự kiên nhẫn tuyệt vời, tài liệu tuyệt vời và cà phê tuyệt vời (hoặc Red Bull, Jolt, v.v.).
Chào buổi sáng, chào buổi tối và chúc ngủ ngon !!!
CẬP NHẬT 2011-05-27 20:11
Đã trở lại từ Hội nghị Percona MySQL ở New York vào thứ năm. Thật là một hội nghị. Đã học được rất nhiều, nhưng tôi đã nhận được câu trả lời tôi sẽ xem xét về InnoDB. Tôi đã được Ronald Bradford thông báo rằng việc đặt innodb_thread_concurrency thành 0 sẽ để InnoDB quyết định hướng hành động tốt nhất trong nội bộ với sự tương tranh của luồng. Tôi sẽ thử nghiệm điều này hơn nữa trong MySQL 5.5.
CẬP NHẬT 2011-06-01 11:20
Theo như một truy vấn dài, InnoDB tuân thủ ACID và hoạt động rất tốt khi sử dụng Điều khiển đồng thời MultiVersion . Các giao dịch phải có khả năng mang các mức cô lập (đọc lặp lại theo mặc định) để ngăn chặn người khác truy cập dữ liệu.
Đối với các hệ thống đa lõi, InnoDB đã đi một chặng đường dài. Trước đây, InnoDB không thể hoạt động tốt trong môi trường đa lõi. Tôi nhớ phải chạy nhiều phiên bản mysql trên một máy chủ để có được nhiều lõi để phân phối nhiều quá trình mysqld trên các CPU. Điều này không còn cần thiết nữa, nhờ Percona và sau này là MySQL (eh, Oracle, nói rằng điều đó vẫn khiến tôi bịt miệng), vì họ đã phát triển InnoDB thành một công cụ lưu trữ trưởng thành hơn, có thể truy cập các lõi một cách đơn giản mà không cần điều chỉnh nhiều. Phiên bản hiện tại của InnoDB ngày nay có thể hoạt động tốt trong một máy chủ lõi đơn.