Ưu điểm chính của nhóm luồng là nó thường giới hạn số lượng hoạt động đang chạy ở giá trị thread_pool_size
thường được đặt thành số lượng CPU trên máy chủ hoặc số lượng MySQL sẽ sử dụng. Nó ngăn chặn các vấn đề chuyển đổi và tranh chấp bối cảnh với các cấu trúc nội bộ khác. Nó đặc biệt hữu ích khi có nhiều truy vấn để chạy hơn so với các CPU có sẵn.
Giới hạn kết nối với max-connections
sẽ giới hạn số lượng truy vấn đang chạy bằng cách giới hạn số lượng kết nối nhưng mọi kết nối vượt quá giới hạn đó đều bị từ chối với một lỗi. Khi sử dụng nhóm luồng, nhiều kết nối được phép hơn nhưng các truy vấn được xếp theo nhóm luồng. Một điều khác cần xem xét là các kết nối không phải lúc nào cũng chạy truy vấn nên việc giới hạn kết nối không giới hạn hiệu quả các truy vấn đang chạy.
Đối với vấn đề về bộ đệm của luồng, nó có ích khi sử dụng luồng trên mỗi kết nối nhưng nhóm luồng thực hiện công việc của riêng nó với việc sử dụng lại các luồng.
max-connections
vẫn có thể được sử dụng để giới hạn các kết nối nhưng như một biện pháp bảo vệ có giá trị tương đương 10000 chứ không phải là giới hạn cho số lượng công việc cho máy chủ.
Ví dụ: nếu bạn có 100 máy khách muốn chạy các truy vấn với giới hạn 10 truy vấn mong muốn chạy đồng thời, đặt giới hạn kết nối thành 10 sẽ chỉ cho phép 10 máy khách kết nối với các máy khách khác bị từ chối do lỗi. Sẽ có tối đa 10 truy vấn chạy cùng một lúc nhưng có khả năng trung bình sẽ có ít hơn 10 truy vấn chạy cùng một lúc. Không giới hạn các kết nối, nếu tất cả 100 khách hàng muốn chạy truy vấn cùng một lúc, sẽ có 100 luồng thực thi cùng lúc có thể gây ra sự cố tranh chấp dẫn đến thông lượng ít hơn so với 10 kết nối.
Nếu bạn sử dụng kích thước nhóm luồng là 10 thay vào đó, tất cả 100 khách hàng sẽ có thể kết nối và chạy các truy vấn của họ. Nếu tất cả các máy khách cố gắng chạy một truy vấn cùng một lúc, nhóm luồng sẽ xếp hàng các truy vấn và thường thực hiện song song 10 có thể có thông lượng cao hơn 100 truy vấn đồng thời trong ví dụ trước.