Việc sử dụng bộ nhớ tối đa của MySQL phụ thuộc rất nhiều vào phần cứng, cài đặt của bạn và chính cơ sở dữ liệu.
Phần cứng
Phần cứng là phần hiển nhiên. Càng nhiều RAM càng vui, ổ đĩa nhanh hơn ftw . Tuy nhiên, đừng tin những bức thư tin tức hàng tháng hoặc hàng tuần. MySQL không mở rộng quy mô tuyến tính - ngay cả trên phần cứng Oracle. Nó phức tạp hơn một chút.
Điểm mấu chốt là: không có quy tắc chung cho những gì được khuyến nghị cho thiết lập MySQL của bạn . Tất cả phụ thuộc vào việc sử dụng hiện tại hoặc dự đoán.
Cài đặt & cơ sở dữ liệu
MySQL cung cấp vô số biến và thiết bị chuyển mạch để tối ưu hóa hành vi của nó. Nếu bạn gặp sự cố, bạn thực sự cần phải ngồi xuống và đọc hướng dẫn sử dụng (f'ing).
Đối với cơ sở dữ liệu - một vài ràng buộc quan trọng:
- động cơ bảng (
InnoDB
, MyISAM
, ...)
- kích thước
- chỉ số
- sử dụng
Hầu hết các thủ thuật MySQL trên stackoverflow sẽ cho bạn biết khoảng 5-8 cái gọi là cài đặt quan trọng. Trước hết, không phải tất cả chúng đều quan trọng - ví dụ: phân bổ nhiều tài nguyên cho InnoDB và không sử dụng InnoDB không có ý nghĩa nhiều vì những tài nguyên đó bị lãng phí.
Hoặc - nhiều người đề nghị nâng cấp max_connection
biến - à , họ ít biết điều đó cũng ngụ ý rằng MySQL sẽ phân bổ nhiều tài nguyên hơn để phục vụ những biến đó max_connections
- nếu cần. Giải pháp rõ ràng hơn có thể là đóng kết nối cơ sở dữ liệu trong DBAL của bạn hoặc hạ thấp wait_timeout
để giải phóng các luồng đó.
Nếu bạn nắm bắt được hướng đi của tôi - thực sự có rất nhiều thứ để đọc và học hỏi.
Động cơ
Công cụ bảng là một quyết định khá quan trọng, nhiều người quên mất những điều đó sớm và sau đó đột nhiên thấy mình phải chiến đấu với một MyISAM
bảng có kích thước 30 GB khóa và chặn toàn bộ ứng dụng của họ.
Tôi không có ý nói MyISAM tệ , nhưng InnoDB
có thể được tinh chỉnh để phản hồi gần như hoặc gần như nhanh nhất MyISAM
và cung cấp tính năng như khóa hàng UPDATE
trong khi MyISAM
khóa toàn bộ bảng khi nó được ghi vào.
Nếu bạn có thể tự do chạy MySQL trên cơ sở hạ tầng của riêng mình, bạn cũng có thể muốn kiểm tra máy chủ percona bởi vì trong số đó có rất nhiều đóng góp từ các công ty như Facebook và Google (họ biết nhanh), nó cũng bao gồm bản thả của riêng Percona- thay thế cho InnoDB
, được gọi là XtraDB
.
Xem ý chính của tôi về thiết lập percona-server (và -client) (trên Ubuntu): http://gist.github.com/637669
Kích thước
Kích thước cơ sở dữ liệu là rất, rất quan trọng - bạn tin hay không thì tùy, hầu hết mọi người trên Intarwebs chưa bao giờ xử lý một thiết lập MySQL lớn và dữ dội nhưng chúng thực sự tồn tại. Một số người sẽ troll và nói điều gì đó như, "Sử dụng PostgreSQL !!! 111", nhưng hãy bỏ qua chúng ngay bây giờ.
Điểm mấu chốt là: đánh giá từ kích thước, quyết định về phần cứng sẽ được thực hiện. Bạn thực sự không thể làm cho cơ sở dữ liệu 80 GB chạy nhanh trên 1 GB RAM.
Chỉ số
Nó không phải: càng nhiều, càng vui. Chỉ các chỉ số cần thiết được thiết lập và việc sử dụng phải được kiểm tra với EXPLAIN
. Thêm vào đó là MySQL EXPLAIN
thực sự rất hạn chế, nhưng đó là một bước khởi đầu.
Các cấu hình được đề xuất
Về những thứ này my-large.cnf
và my-medium.cnf
các tập tin - tôi thậm chí không biết chúng được viết cho ai. Cuộn của riêng bạn.
Điều chỉnh lớp sơn lót
Một khởi đầu tuyệt vời là mồi điều chỉnh . Đó là một tập lệnh bash (gợi ý: bạn sẽ cần linux) lấy đầu ra SHOW VARIABLES
và SHOW STATUS
và kết thúc nó thành một đề xuất hữu ích. Nếu máy chủ của bạn đã chạy một thời gian, đề xuất sẽ tốt hơn vì sẽ có dữ liệu để làm cơ sở cho chúng.
Tuy nhiên, mồi điều chỉnh không phải là một loại nước sốt thần kỳ. Bạn vẫn nên đọc tất cả các biến mà nó đề xuất để thay đổi.
đọc hiểu
Tôi thực sự muốn giới thiệu mysqlperformanceblog . Đó là một tài nguyên tuyệt vời cho tất cả các loại mẹo liên quan đến MySQL. Và không chỉ MySQL, họ còn biết rất nhiều về phần cứng phù hợp hoặc đề xuất thiết lập cho AWS, v.v. Những người này có nhiều năm kinh nghiệm.
Tất nhiên, một nguồn tài nguyên tuyệt vời khác là Planet-mysql .