Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Tính toán kích thước vùng đệm InnoDB cho Máy chủ MySQL của bạn

Nhóm đệm InnoDB là gì?

Vùng đệm InnoDB là không gian bộ nhớ chứa nhiều cấu trúc dữ liệu trong bộ nhớ của InnoDB, bộ đệm, bộ nhớ đệm, chỉ mục và thậm chí cả dữ liệu hàng. innodb_buffer_pool_size là tham số cấu hình MySQL chỉ định lượng bộ nhớ được MySQL phân bổ cho vùng đệm InnoDB. Đây là một trong những cài đặt quan trọng nhất trong cấu hình lưu trữ MySQL và phải được định cấu hình dựa trên RAM hệ thống có sẵn.

Trong bài đăng này, chúng tôi sẽ hướng dẫn bạn hai cách tiếp cận để đặt giá trị kích thước vùng đệm InnoDB của bạn, xem xét ưu và nhược điểm của các phương pháp đó và cũng đề xuất một phương pháp duy nhất để đạt đến giá trị tối ưu dựa trên kích thước RAM hệ thống của bạn.

Phương pháp tiếp cận 1. Quy tắc ngón tay cái

Cách thực hành phổ biến nhất là đặt giá trị này ở 70% - 80% RAM hệ thống. Mặc dù nó hoạt động tốt trong hầu hết các trường hợp, phương pháp này có thể không tối ưu trong tất cả các cấu hình. Hãy lấy ví dụ về một hệ thống có 192GB RAM. Dựa trên phương pháp trên, chúng tôi nhận được khoảng 150GB cho kích thước vùng đệm. Tuy nhiên, đây không thực sự là một con số tối ưu vì nó không tận dụng hết dung lượng RAM lớn có sẵn trong hệ thống và để lại khoảng 40GB bộ nhớ. Sự khác biệt này có thể còn đáng kể hơn khi chúng tôi chuyển sang các hệ thống có cấu hình lớn hơn, nơi chúng tôi nên sử dụng RAM khả dụng ở mức độ lớn hơn.

Phương pháp tiếp cận 2. Phương pháp tiếp cận linh hoạt hơn

Cách tiếp cận này dựa trên sự hiểu biết chi tiết hơn về nội bộ của vùng đệm InnoDB và các tương tác của nó, được mô tả rất kỹ trong cuốn sách MySQL Hiệu suất cao.

Hãy xem phương pháp sau để tính kích thước vùng đệm InnoDB.

  1. Bắt đầu với tổng số RAM còn trống.
  2. Trừ số tiền phù hợp cho nhu cầu của Hệ điều hành.
  3. Trừ số tiền phù hợp cho tất cả các nhu cầu của MySQL (như các bộ đệm MySQL khác nhau, bảng tạm thời, nhóm kết nối và các bộ đệm liên quan đến sao chép).
  4. Chia kết quả cho 105%, là giá trị ước tính của chi phí cần thiết để tự quản lý vùng đệm.

Ví dụ:hãy xem xét một hệ thống có RAM 192 GB chỉ sử dụng InnoDB và có tổng kích thước tệp nhật ký khoảng 4GB. Chúng tôi có thể sử dụng quy tắc như "tối đa 2GB hoặc 5% tổng RAM" để phân bổ nhu cầu hệ điều hành như được đề xuất trong cuốn sách trên, khoảng 9,6GB. Sau đó, chúng tôi cũng sẽ phân bổ khoảng 4GB cho các nhu cầu MySQL khác, chủ yếu tính đến kích thước tệp nhật ký. Phương pháp này dẫn đến khoảng 170GB cho kích thước vùng đệm InnoDB của chúng tôi, tức là sử dụng khoảng 88,5% kích thước RAM có sẵn.

Mặc dù chúng tôi đã sử dụng quy tắc 'tối đa là 2GB hoặc 5% tổng RAM' để tính toán phân bổ bộ nhớ của chúng tôi cho các nhu cầu hệ điều hành ở trên, quy tắc tương tự không hoạt động tốt trong mọi trường hợp , đặc biệt dành cho các hệ thống có RAM cỡ trung bình từ 2GB đến 32GB. Ví dụ:trong hệ thống có RAM 3GB, việc phân bổ 2GB cho nhu cầu hệ điều hành không để lại nhiều cho vùng đệm InnoDB, trong khi phân bổ 5% RAM chỉ là quá ít so với nhu cầu hệ điều hành của chúng ta.

Vì vậy, hãy tinh chỉnh quy tắc cấp phát hệ điều hành ở trên và kiểm tra phương pháp tính toán InnoDB trên các cấu hình RAM khác nhau:

Dành cho Hệ thống có RAM kích thước nhỏ (<=1GB)

Đối với các hệ thống chạy với RAM dưới 1GB, tốt hơn nên sử dụng giá trị cấu hình mặc định của MySQL là 128MB cho kích thước vùng đệm InnoDB.

Dành cho Hệ thống có RAM cỡ trung bình (1GB - 32GB)

Xem xét trường hợp hệ thống có kích thước RAM từ 1GB - 32GB, chúng ta có thể tính toán nhu cầu hệ điều hành bằng cách sử dụng phương pháp heuristics sau:

256MB + 256 * log2 (kích thước RAM tính bằng GB)

Sự hợp lý hóa ở đây là, đối với cấu hình RAM thấp, chúng tôi bắt đầu với giá trị cơ bản là 256 MB cho nhu cầu của hệ điều hành và tăng phân bổ này theo thang logarit như số lượng RAM tăng lên. Bằng cách này, chúng tôi có thể đưa ra một công thức xác định để phân bổ RAM cho nhu cầu hệ điều hành của chúng tôi. Chúng tôi cũng sẽ phân bổ cùng một lượng bộ nhớ cho các nhu cầu khác của MySQL. Ví dụ:trong một hệ thống có 3GB RAM, chúng tôi sẽ phân bổ hợp lý 660MB cho nhu cầu hệ điều hành và 660MB khác cho MySQL cho các nhu cầu khác, dẫn đến giá trị khoảng 1,6GB cho kích thước vùng đệm InnoDB của chúng tôi.

Dành cho Hệ thống có RAM kích thước cao hơn (> 32GB)

Đối với hệ thống có kích thước RAM lớn hơn 32 GB, chúng tôi sẽ quay lại tính toán nhu cầu hệ điều hành bằng 5% kích thước RAM hệ thống của chúng tôi và số lượng tương tự cho MySQL nhu cầu khác. Vì vậy, đối với hệ thống có kích thước RAM là 192GB, phương pháp của chúng tôi sẽ đạt khoảng 165GB cho kích thước vùng đệm InnoDB, một lần nữa, đây là giá trị tối ưu được sử dụng.

Máy tính Kích thước Vùng đệm InnoDB

Tính giá trị tối ưu cho RAM có kích thước bất kỳ:





InnoDB Buffer Pool Size Calculator - Tính toán con số tối ưu cho bất kỳ kích thước RAM hệ thống nào Nhấp để Tweet

Lô kích thước vùng đệm InnoDB cho các kích cỡ RAM khác nhau

Lời cảnh báo khi tính toán kích thước nhóm đệm InnoDB

Những điều cần cân nhắc trong bài đăng trên blog này là dành cho các hệ thống Linux dành riêng cho MySQL. Đối với hệ thống Windows hoặc hệ thống chạy nhiều ứng dụng cùng với MySQL, những quan sát này có thể không chính xác. Cũng cần lưu ý rằng, mặc dù chúng tôi có thể sử dụng các công cụ này làm tài liệu tham khảo, nhưng thực sự cần có kinh nghiệm tốt, thử nghiệm, theo dõi liên tục và tinh chỉnh để có được kích thước phù hợp cho innodb_buffer_pool_size của bạn.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách hoạt động của toán tử RLIKE trong MySQL

  2. Hành vi GROUP BY khi không có hàm tổng hợp nào trong mệnh đề SELECT

  3. Tại sao password_verify trả về false?

  4. MySQL INT nghĩa

  5. Cách cải thiện hiệu suất AWS của MySQL gấp 2 lần trên Amazon RDS với cùng chi phí