Tôi đang cung cấp câu trả lời này dưới dạng thông tin bổ sung cho câu trả lời của Rolando bên dưới.
Trước khi máy chủ được sản xuất
Tính toán innodb_buffer_pool_size dựa trên các bảng lớn nhất thường được sử dụng bởi MySQL. Để xác định các bảng lớn nhất dựa trên kích thước của chúng trong cơ sở dữ liệu, bạn có thể sử dụng tập lệnh này:
select table_schema, table_name, round(data_length/1024/1024,2) as size_mb
from information_schema.tables where table_schema like 'my_database'
order by size_mb desc;
+--------------+-------------------------+---------+
| table_schema | table_name | size_mb |
+--------------+-------------------------+---------+
| heavybidder | user | 522.55|
| heavybidder | bid | 121.52|
| heavybidder | item_for_sale | 10.52|
| heavybidder | account_user | 5.02 |
| heavybidder | txn_log | 4.02 |
| heavybidder | category | 0.02 |
+--------------+-------------------------+---------+
Bây giờ chúng ta biết bảng nào lớn nhất trong cơ sở dữ liệu của mình, chúng ta cần xác định bảng nào được sử dụng thường xuyên nhất. Để làm điều đó, tôi sẽ sử dụng một chương trình định hình như Jet Profiler (JP) để xem bảng nào đang được truy cập nhiều nhất. JP sẽ cho bạn thấy những bảng nào đang được truy cập thường xuyên nhất. Đây là một ảnh chụp màn hình từ phần đó trong JP
Vì vậy, với suy nghĩ này, bây giờ tôi biết rằng bảng người dùng và giá thầu chiếm khoảng 640 MB dung lượng ổ đĩa, chúng được sử dụng rất thường xuyên theo JP và điều đó có nghĩa là MySQL sẽ lưu trữ các chỉ mục và dữ liệu của họ trong nhóm bộ đệm dưới dạng Rolando đề cập dưới đây trong ý kiến của mình.
Để đảm bảo MySQL có đủ bộ nhớ để lưu trữ dữ liệu cho các bảng lớn nhất và được sử dụng thường xuyên nhất của tôi, sau đó tôi sẽ xác định innodb_buffer_pool_size ở 640MB.
Có một số cân nhắc bổ sung, nhưng chúng không áp dụng cho innodb_buffer_pool_size.
Đây là hệ thống 32Bit hay 64 bit? Trong hệ thống 32Bit, bạn bị giới hạn ở mức 4GB trừ khi bạn kích hoạt PAE. Trong Windows, điều này có nghĩa là chạy phiên bản Windows Enterprise hoặc Datacenter.
Các tiến trình khác đang chạy trên hệ thống của bạn cần bao nhiêu bộ nhớ? Trên một máy chủ MySQL chuyên dụng, tôi sẽ để lại từ 5% đến 10% cho HĐH. Trong Windows, bạn có thể sử dụng Process Explorer để phân tích việc sử dụng bộ nhớ. Trong Linux, bạn có sysstat, miễn phí, htop, top và vmstat.
Là cơ sở dữ liệu chỉ bao gồm các bảng Innodb hoặc hỗn hợp của Innodb và MyISAM? Nếu nó là hỗn hợp của cả hai, thì tôi sẽ đặt bộ nhớ cho key_cache, tham gia biến, bộ đệm truy vấn, v.v. Sau này, bạn có thể tính tỷ lệ trúng MyISAM của mình sau khi máy chủ được sản xuất.
Sau khi máy chủ được sản xuất.
Tỷ lệ trúng hiện tại của Innodb là gì?
1 - (innodb_buffer_pool_reads / innodb_buffer_pool_read_Vquests).
Tỷ lệ trúng bộ nhớ cache chính là gì
1 - (Key_reads / Key_read_Vquests)
Tôi thường cố gắng để có được tỷ lệ càng gần 100% càng tốt.
Làm thế nào tốt để bảng của bạn phù hợp trong vùng đệm
Bạn cũng có thể xem mức độ phù hợp của dữ liệu bảng trong bộ đệm của bạn bằng cách tham khảo liên kết này, cung cấp cách hiển thị "có bao nhiêu trang trong nhóm bộ đệm cho bảng đã cho (cnt), bao nhiêu trong số chúng bị bẩn (bẩn) và bao nhiêu phần trăm chỉ số phù hợp trong bộ nhớ (fit_pct). " Chỉ áp dụng cho máy chủ Percona
http://www.mysqlperformanceblog.com/2010/12/09/how-well-does-your-table-uits-in-innodb-buffer-pool/