đa luồng mysql cho một truy vấn duy nhất


8

Tôi có db lớn kích thước 8GB và có 9 triệu liên hệ trong db này. Khi chúng tôi cố gắng truy xuất tất cả các liên hệ, phải mất gần 1 hoặc 2 giờ (trong một số trường hợp dẫn đến hết thời gian chờ) để truy xuất lại tất cả các liên hệ để thực hiện truy vấn cho một truy vấn duy nhất. Ngoài ra, tôi có 8 CPU và RAM 24 GB, Bộ xử lý Xeon, quy trình mysql sẽ không phân phối trên 8 CPU. Câu hỏi của tôi là, chúng ta có thể kích hoạt đa luồng cho một truy vấn không.

Đang chờ trả lời của bạn


Các bảng có 9 triệu hàng đó có định dạng InnoDB hoặc MyISAM không?
Craig Efrein

Câu trả lời:


8

Cả MyISAM và InnoDB đều không thực hiện truy vấn đa luồng. Cũng không làm XtraDB khác, TokuDB. Đây là một vấn đề lâu dài và hạn chế của MySQL. Tôi không biết rằng giới hạn là trong máy chủ MySQL, mà là trong triển khai công cụ lưu trữ. Không ai từng làm điều đó ...

Tôi hiện đang đánh giá InfiniDB và Infobright IEE lưu trữ cột. Cả hai đều hỗ trợ các truy vấn đa cpu và sự khác biệt là quá lớn (do nhiều lý do, nhưng CPU là một điều hiển nhiên).

Bạn có thể muốn xem Shard Query , một proxy cho MySQL để phân tách truy vấn của bạn thành nhiều truy vấn, thực hiện chúng trên các quy trình song song và trả về kết quả tổng hợp.


Thật kinh khủng vì điều này đã không được sửa chữa. Innodb: Tôi có tốc độ đọc 10-13mb / giây truy vấn duy nhất. Khi chia số lần đọc thành 20 truy vấn, tôi có thể đạt tới 400mb / giây đọc. Từ một số điểm IO, thật nực cười, nhưng đó chỉ là cách động cơ hoạt động.
Giăng

Đôi khi thật khó để nhận ra thứ tự nào mà truy vấn sẽ thực hiện nhiệm vụ của mình, nhưng tôi nghĩ sẽ tốt nếu MySQL có một tùy chọn, thừa nhận thứ tự truy vấn sẽ không thể đoán trước được. Ngoài ra, liên kết đến Shard Query dường như là: github.com/greenlion/swanhart-tools/tree/master/shard-query khi liên kết được đăng dẫn đến một cái gì đó không liên quan.
JVE999


0

MySQL không cung cấp một cách để phân chia việc xử lý một truy vấn duy nhất trên nhiều luồng. Thay vào đó, tôi khuyên bạn nên thực hiện song song trong lớp ứng dụng. MySQL sẽ vui vẻ xử lý các câu lệnh CHỌN song song. Nếu bạn có ID tăng tự động, bạn có thể chia bảng thành N phần bằng cách sử dụng SELECT ... WHERE id % N = 0. Sử dụng N process hoặc thread để xử lý từng câu lệnh select. Nhiều quy trình dễ thiết lập hơn một chút so với nhiều luồng. Bạn có thể sử dụng xargs để chạy song song nhiều tiến trình.

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.