Hiệu suất đa lõi và MySQL


38

Tầm quan trọng của RAM là một thực tế đã được thiết lập nhưng có rất ít tài liệu về tầm quan trọng của lõi và đa luồng khi nói đến việc sử dụng CPU của MySQL. Tôi đang nói về sự khác biệt của việc chạy MySQL trên 4 điểm so với 6 điểm so với 8 điểm và v.v.

Các công cụ lưu trữ khác nhau sử dụng CPU khác nhau?



nó liên quan nhưng không giải quyết các hành vi của các công cụ lưu trữ khác nhau đối với CPU đa lõi.
Rick James

1
Thật. Đó là lý do tại sao không có phiếu bầu "gần như trùng lặp" ...
gbn

Đây là một cộng đồng tuyệt vời, tôi vẫn đang học cách sử dụng trang web này.
Rick James

Xin chào bạn thân hãy xem tại đây: mysql-cluster-blog.com bạn tìm thấy ít nhất một cái gì đó

Câu trả lời:


30

Khi nói đến MySQL, không có sự so sánh giữa các công cụ lưu trữ ngoại trừ việc nó thuộc hai loại cơ bản:

MySQL có tính năng sử dụng một số công cụ lưu trữ

Đối với các công cụ lưu trữ được liệt kê, những công cụ duy nhất có tuân thủ ACID là InnoDB và NDB. Tại sao điều này quan trọng để đề cập đến? Hai lý do:

  • Các công cụ lưu trữ khác đơn giản là không được hưởng lợi với sự hiện diện của nhiều lõi hơn, ngoài I / O đĩa cơ bản, sử dụng CPU và thông lượng tổng thể.
  • Mã cho mỗi công cụ lưu trữ không giao dịch, cơ bản chỉ ra 14 hoạt động nội bộ bất kể công cụ lưu trữ, không được thiết kế để thúc đẩy truy cập của nhiều lõi.

InnoDB trong MySQL 5.5, Plugin InnoDB) và XtraDB của Percona Server có các tùy chọn bạn có thể đặt để truy cập nhiều lõi (Percona Server đã hoạt động lâu hơn). Trên thực tế, Percona tiêm khoảng 30.000 dòng mã đặc biệt để tăng cường hiệu năng của InnoDB với mỗi bản phát hành GA mới của mã nguồn MySQL. Chúng ta có thể chắc chắn rằng Oracle đã bao gồm các cải tiến của riêng mình từ bể tư duy của riêng họ để chạy trong InnoDB cho hoạt động đa lõi (kể từ MySQL 5.1,38).

Với nhu cầu thực hiện MVCC trên dữ liệu kết hợp với khóa hàng / trang, hiệu suất giao dịch giờ đây có thể được đo lường, đo lường và định cấu hình.

Nếu có một điều tôi đã học được về việc sử dụng nhiều lõi, đó là bạn phải điều chỉnh InnoDB một cách hiệu quả và không chỉ dựa vào InnoDB .

CẬP NHẬT 2011-09-20 08:03 EDT

Liên quan đến việc InnoDB được hưởng lợi từ tất cả các lõi, chúng ta cần giữ mọi thứ liên tục. Các lõi cũng phải có xu hướng các vấn đề khác (HĐH, Đĩa, Bộ nhớ, Ứng dụng, Giám sát, v.v.) trong Máy chủ Cơ sở dữ liệu. Đối với những người có ngân sách khiêm tốn, nhiều người có xu hướng có Máy chủ cơ sở dữ liệu cũng cung cấp NFS, giám sát từ Munin, hỗ trợ ứng dụng cho JBoss, PHP và danh sách sẽ tiếp tục. Nếu bạn muốn MySQL, cụ thể hơn là InnoDB, để sử dụng nhiều lõi hơn, Máy chủ cơ sở dữ liệu phải được dành riêng cho MySQL và HĐH / Đĩa / Bộ nhớ phải chỉ dành cho MySQL . Với quan điểm này, InnoDB sẽ tham gia nhiều lõi hơn mà không nghi ngờ gì .

Đối với Plugin InnoDB, nó được đề cập đơn giản là hiển thị các sáng kiến ​​trước đó để có InnoDB tốt hơn trên một phần của MySQL (eh, Oracle. Xin lỗi, vẫn chưa thể thực hiện được). Các biến mới để triệu tập thêm hoạt động cốt lõi trở nên rõ ràng từ MySQL 5.1,38.

Ví dụ: innodb_read_io_threadsinnodb_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. Cài đặt mặc định và tối đa quá khác nhau (4 - 64) cho thấy InnoDB là đa luồng và chuyên sâu như bạn định cấu hình !!!

Việc giải quyết các nhu cầu của cộng đồng MySQL để truy cập nhiều lõi hơn với InnoDB được dẫn dắt bởi Percona. Do đó, MySQL bắt đầu làm theo. Tôi phải thừa nhận rằng Oracle (yuck) đã thực hiện những cải tiến cần thiết cho hoạt động cốt lõi hơn.


InnoDB trong MySQL 5.5 được điều chỉnh như bạn đề xuất ở trên có thể hưởng lợi từ tất cả các lõi? {bit nhầm lẫn về plugin InnoDB}
Rick James

@Rick - Tiếp tục giải quyết bình luận của bạn trong câu trả lời của tôi
RolandoMySQLDBA

Đây dường như là một câu chuyện hoàn toàn khác và MyISAM dường như trở nên thẳng thắn khi sử dụng nhiều lõi nhưng mặt khác tại dba.stackexchange.com/questions/5974/best-of-myisam-and-innodb MyISAM có lợi thế. Vì vậy, nó dường như là một sự ràng buộc để quyết định con đường nào để đi.
Rick James

2
Tất cả phụ thuộc vào mục đích bạn sử dụng MyISAM hoặc InnoDB. Những gì và bao nhiêu bạn sẵn sàng để lưu trữ? Bạn có dựa vào MySQL hoặc các cơ chế lưu trữ khác (như véc ni và memcached) để truy xuất dữ liệu không? Phần cứng của bạn có được mở rộng đúng cách cho InnoDB không? Là 98% CHỌN SQL của bạn? Bảng ở định dạng tốt nhất để đọc tốc độ cao? Trả lời những câu hỏi này trước đây sẽ hướng dẫn chúng ta lựa chọn công cụ lưu trữ, cấu hình phù hợp, lựa chọn phần cứng, thậm chí tiếp cận những thứ sâu hơn như tính sẵn sàng cao, cấu trúc liên kết DB, phân tách đọc / ghi và danh sách này có thể tiếp tục.
RolandoMySQLDBA

9

Tôi thấy việc nói về các công cụ lưu trữ sử dụng lõi có thể gây hiểu lầm cho người mới bắt đầu. Với điều kiện là một chương trình đủ đa luồng, hệ điều hành sẽ lên lịch cho nó qua càng nhiều lõi càng tốt.

Vấn đề cụ thể giới hạn tỷ lệ cpu là khi mã khóa nội bộ ( mutexes ) có sự tranh chấp và chặn các luồng chạy đồng thời. Tất cả các công cụ lưu trữ sẽ yêu cầu mutexes, nhưng chắc chắn có một số công cụ nóng trong MyISAM.

Nếu chúng ta bỏ qua sự tranh chấp trong một giây và quay lại câu hỏi chính của bạn: việc có nhiều lõi quan trọng như thế nào? -

Tôi thích có nhiều lõi cho khối lượng công việc phục vụ các yêu cầu của người dùng. Có nhiều có thể làm giảm phương sai giữa các lần truy vấn. Hãy nghĩ về điều này giống như xếp hàng tại siêu thị với 12 lối đi mở so với chỉ 2.

Cập nhật : Tôi đã viết một bài đăng trên blog về lý do tại sao khả năng mở rộng theo chiều dọc (đa lõi) là quan trọng.


5
+1 để đề cập đến con voi trong phòng: sự tranh chấp
cerd
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.