Cài đặt bộ đệm MySQL tốt nhất cho máy chủ MySQL dành riêng cho RAM 8gb chỉ sử dụng InnoDB (cơ sở dữ liệu 5gb)


20

Tôi là một người khá lớn khi thiết lập MySQL để thực hiện. Và thành thật mà nói, tôi không lo lắng về việc tinh chỉnh để loại bỏ mọi hiệu năng cuối cùng của MySQL, nhưng tôi biết rằng điều quan trọng nhất cần làm là cung cấp một số kết quả tốt nhất là thiết lập chính xác bộ đệm / bộ đệm.

Tôi đã cố gắng làm mọi thứ đơn giản bằng cách chỉ sử dụng InnoDB làm công cụ lưu trữ. Và tôi có một máy chủ chuyên dụng cho MySQL. Nó có 8gb RAM, tôi nên phân bổ như thế nào để tối đa hóa hiệu suất? Tôi muốn có thể điều chỉnh toàn bộ cơ sở dữ liệu của mình vào bộ nhớ để có hiệu suất tốt nhất. Cơ sở dữ liệu khoảng 5gb. Điều này có thể không?

Tôi nên phân bổ bao nhiêu bộ nhớ cho bộ đệm truy vấn? Bao nhiêu cho nhóm bộ đệm InnoDB? Bao nhiêu cho phần còn lại của máy tính (tức là các quá trình không liên quan đến MySQL)? V.v.

Vì tôi không sử dụng MyISAM nên tôi thực sự không cần phải đặt nhiều bộ nhớ vào bộ đệm chính?

Câu trả lời:


25

Điều này là khó mà không biết nhiều về cơ sở dữ liệu. Có một vài công cụ bạn nên biết;

Về lưu trữ toàn bộ cơ sở dữ liệu trong bộ nhớ; Bất kỳ truy vấn nào đang thực hiện thay đổi trên cơ sở dữ liệu sẽ vẫn mở cho đến khi việc ghi được thực hiện trên đĩa. Điều duy nhất có thể tránh cho đĩa bị tắc nghẽn, là bộ điều khiển đĩa có bộ đệm ghi.

Tôi sẽ bắt đầu với những thay đổi sau từ mặc định:

key_buffer_size = 128M
thread_stack = 128K
thread_cache_size = 8
table_cache = 8192
max_heap_table_size = 256M
query_cache_limit = 4M
query_cache_size = 512M

innodb_buffer_pool_size = 4G 

# This is crucial to avoid checkpointing all the time:
innodb_log_file_size = 512M

# If you have control on who consumes the DB, and you don't use hostnames when you've set up permissions - this can help as well.
skip_name_resolve

Sau đó, tôi sẽ thấy mọi thứ diễn ra như thế nào và thử những thứ khác nhau dựa trên (trong số những thứ khác) đầu ra của các công cụ được đề cập ở trên. Tôi cũng sẽ đảm bảo vẽ các xu hướng bằng một công cụ giám sát, chẳng hạn như Munin hoặc Cacti , để xem loại khối lượng công việc tôi thực sự phải xử lý. Cá nhân tôi có kinh nghiệm tuyệt vời với các plugin MySQL được cung cấp với Munin.


Cảm ơn tôi sẽ cho nó một shot và xem liệu tôi có thể học được điều gì mới không.
billmalarky

@billmalarky Chào mừng bạn đến với serverfault! :) Hãy nhớ upvote hoặc đánh dấu câu hỏi là chính xác, nếu bạn hài lòng với câu trả lời bạn nhận được.
Kvisle

+1 để giới thiệu mysqltuner.pl !!!
RolandoMySQLDBA

@Kvisle Cảm ơn đã chào đón! Tôi đã ở quanh stackoverflow được một thời gian (ờ ... vài tháng là ...) nhưng tôi mới biết về serverfault. Tôi thực sự lưu trữ với voxel.net và lưu trữ được quản lý trước của họ (hỗ trợ hệ thống IE) thực sự tuyệt vời nhưng tôi cho rằng nó cũng phù hợp để tìm kiếm một cái nhìn bên ngoài vì vậy tôi không nghe giống như một công cụ hoàn chỉnh khi nói chuyện với họ về điều này.
billmalarky

1
@Kvisle Ngoài ra, tôi sẽ đánh dấu một câu trả lời đúng nhưng tôi muốn điều này được hầm một chút để có được một động não tốt.
billmalarky

9

IMHO bạn sẽ có thể đi với

innodb_buffer_pool_size=5G

Đó sẽ là 62,5% RAM với một lượng RAM đủ cho HĐH máy chủ cộng với bộ nhớ cho các kết nối DB

@kvisle khuyên dùng mysqltuner.pl. Kịch bản đó là tuyệt vời để đánh giá dung lượng RAM dành cho tham gia_buffer_size, sort_buffer_size, read_buffer_size và read_rnd_buffer_size. 4 bộ đệm được thêm vào với nhau được nhân với max_connections. Câu trả lời đó được thêm vào bộ đệm tĩnh (innodb_buffer_pool_size + key_buffer_size). Các khoản tiền kết hợp được báo cáo. Nếu tổng kết hợp đó vượt quá 80% RAM, đó là khi bạn phải hạ thấp các kích thước bộ đệm đó. mysqltuner.pl sẽ rất hữu ích trong vấn đề này.

Vì tất cả dữ liệu của bạn là InnoDB, bạn có thể tạo key_buffer_size (bộ đệm bộ đệm chính cho các chỉ mục MyISAM) rất thấp (tôi khuyên dùng 64M).

Đây là một bài đăng tôi đã thực hiện trong DBA StackExchange để tính toán kích thước được đề xuất của innodb_buffer_pool_size .

CẬP NHẬT 2011-10-15 19:55 EDT

Nếu bạn biết bạn sẽ có 5GB dữ liệu, thì khuyến nghị đầu tiên của tôi là OK. Tuy nhiên, tôi đã quên thêm một điều:

[mysqld]
innodb_buffer_pool_size=5G
innodb_log_file_size=1280M

Kích thước tệp nhật ký phải là 25% của Bộ đệm InnoDB

CẬP NHẬT 2011-10-16 13:36 EDT

Quy tắc 25% dựa trên việc sử dụng hai tệp nhật ký. Mặc dù có thể sử dụng nhiều tệp nhật ký innodb, hai tệp thường hoạt động tốt nhất.

Những người khác đã thể hiện bằng cách sử dụng 25%

Tuy nhiên, trong tất cả các công bằng, một người nào đó từ công ty InnoBase Oy ban đầu bày tỏ không sử dụng quy tắc 25% vì có nhóm đệm InnoDB lớn hơn .

Đương nhiên, quy tắc 25% không thể hoạt động khi có lượng RAM lớn. Trên thực tế, innodb_log_file_size lớn nhất được phép chỉ sử dụng 2 tệp nhật ký là 2047M, vì kích thước kết hợp của tệp nhật ký phải nhỏ hơn 4G (4096M)

TRƯỜNG HỢP TRONG ĐIỂM: Một trong những khách hàng của chủ nhân của tôi có máy chủ DB với 192GB RAM. Không có cách nào để có tệp nhật ký 48G. Tôi simlpy sử dụng kích thước tệp tối đa cho tệp nhật ký innodb, 2047M. Nhận xét của @ Kvisle về câu trả lời của tôi chỉ đơn giản là đưa ra một liên kết nói rằng bạn không phải giới hạn hai tệp nhật ký. Nếu bạn có N tệp nhật ký, chúng không thể có tổng số 4G. Quy tắc 25% của tôi chỉ là trong một thế giới hoàn hảo (Máy chủ DB có 8GB trở xuống).


Cảm ơn, tôi chắc chắn sẽ sử dụng mysqltuner.pl. Tuy nhiên, tôi phải hỏi, liệu kịch bản đó có còn chính xác nếu cơ sở dữ liệu của tôi trống không? Tôi có tất cả các bảng và lược đồ được thiết lập chính xác, nhưng không có dữ liệu thực tế. Tôi đã sử dụng 5gb làm kích thước ví dụ mà tôi sẽ sử dụng trên máy chủ chuyên dụng hiện tại của mình (nghĩa là, một khi DB lớn hơn mức đó tôi có thể sẽ chuyển sang một máy chủ chuyên dụng tốt hơn). Hiện tại cơ sở dữ liệu trống (đây là một trang web hoàn toàn mới chưa ra mắt) nhưng tôi muốn điều chỉnh mysql để xử lý mở rộng quy mô trước khi ra mắt.
billmalarky

Cập nhật câu trả lời của tôi !!!
RolandoMySQLDBA

Tôi muốn nhận xét về "Phải là 25% của Bộ đệm InnoDB". Bởi vì nó không đúng 100%. Đọc dev.mysql.com/doc/refman/5.0/en/ Google để có câu trả lời công phu hơn. Hiệu suất khôn ngoan, nó giúp rất nhiều để tăng kích thước một chút so với mặc định, nhưng bạn không phải tối đa hóa nó.
Kvisle

Rolando, cảm ơn bạn đã giúp đỡ. Tôi đã đánh dấu chủ đề này như một tài liệu tham khảo. Ngoài ra, bây giờ tôi đang sử dụng tập lệnh mysqltuner đó.
billmalarky
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.