Làm cách nào để tối ưu hóa việc sử dụng bộ nhớ của MySQL?


9

CÀI ĐẶT CỦA TÔI ( ví dụ )

Tôi đang chạy Linux trên phiên bản Amazon High CPU Extra Large EC2 với các thông số kỹ thuật sau:

  • Bộ nhớ 7 GB
  • 20 đơn vị tính toán EC2 (8 lõi ảo với 2,5 đơn vị tính toán EC2 mỗi đơn vị)
  • 1690 GB dung lượng lưu trữ cục bộ
  • Nền tảng 64 bit

Tôi có hai cơ sở dữ liệu MySQL lớn đang chạy trên công cụ lưu trữ MyISAM. Một là 2GB và cái còn lại là 500MB. Tôi muốn chắc chắn rằng MySQL đang sử dụng nhiều RAM nhất có thể / cần để tối đa hóa tốc độ truy vấn. Tôi biết có một bó của MySQL tùy chọn bộ nhớ cấu hình thích key_buffer_sizeMyISAM_sort_buffer_size,nhưng tôi không quen với việc tối ưu hóa này.

CÂU HỎI

  1. Làm thế nào để kiểm tra bộ nhớ nào MySQL hiện đang sử dụng trên hệ thống Linux?
  2. Làm thế nào để tối đa hóa / tối ưu hóa việc sử dụng bộ nhớ MySQL?
  3. Giả sử các truy vấn và lược đồ của tôi được tối ưu hóa, tôi nên xem xét những thay đổi nào khác?

bạn có thể kiểm tra với chương trình htop.
newworld

Tối đa hóa việc sử dụng bộ nhớ sẽ không toàn bộ cơ sở dữ liệu vào bộ nhớ. Bạn phải có hệ thống tập tin dựa trên RAM ...

4
Hệ thống tập tin dựa trên RAM là không an toàn. Nếu máy chủ gặp sự cố, tất cả dữ liệu sẽ bị mất
newworld

Câu trả lời:


7

Đây là một chủ đề khó. Không thể trả lời ở đây, toàn bộ sách đã được viết về điều này. Tôi khuyên bạn nên làm cho innodb_buffer_pool_size của bạn đủ lớn. Nếu bạn đang sử dụng bảng myisam, thì hãy kiểm tra key_buffer_size. Ngoài ra bảng_cache và max_connections nên được xem xét.

Đây là một cái gì đó có thể giúp bạn:

http://www.mysqlperformanceblog.com/2006/09/29/what-to-tune-in-mysql-server-after-installation/ http://www.mysqlperformanceblog.com/2007/11/01/innodb- hiệu suất-tối ưu hóa-cơ bản / http://www.mysqlperformanceblog.com/2007/11/03/ch Mất -innodb_buffer_pool_size /

BIÊN TẬP:

Như @ drew010 đã nói là quan trọng để xem xét loại sử dụng mà DB có. Điều chỉnh cho một DB đọc nặng rất khác so với viết nặng. Ngoài ra, bạn có thể xem xét các chiến lược khác. Giống như Memcached, cơ sở dữ liệu nosql, v.v.


2
Đồng ý, họ là cơ sở dữ liệu khá nhỏ quá tương đối nói. Nếu bạn đang mong đợi một tấn truy cập đọc cơ sở dữ liệu, thì bạn có thể xem xét một số loại hệ thống bộ đệm như memcached mà ứng dụng của bạn có thể sử dụng để lưu trữ các giá trị từ cơ sở dữ liệu để giảm lượt truy cập vào cơ sở dữ liệu. Nếu bạn đang thực hiện phần lớn các phần chèn, thì đĩa sẽ là một yếu tố rất quan trọng. Ở một mức độ nào đó, câu hỏi phụ thuộc vào trường hợp sử dụng của bạn là gì. Nếu dữ liệu không thay đổi nhiều, thì bộ đệm truy vấn mysql cũng sẽ giúp ích rất nhiều với các truy vấn nhanh hơn. Cũng đảm bảo rằng các chỉ mục / khóa chính của bạn là tốt.
vẽ

+1 bạn đúng không anh em. Tôi cho rằng anh ta đã yêu cầu điều chỉnh cơ bản, nhưng điều quan trọng là phải xem xét việc sử dụng DB và những thứ khác. Một lần nữa, tôi không thể thảo luận ở đây, tôi nghĩ.
santiago.basulto

1

Nếu bạn cần chắc chắn rằng MySQL sử dụng tất cả bộ nhớ cần thiết, bạn phải chuyển sang InnoDB. Trừ khi bạn sử dụng FULLTEXTkhả năng tìm kiếm của MySQL , sẽ không có vấn đề nghiêm trọng nào.

Trong trường hợp MyISAM, một số bộ nhớ cache được sử dụng, bao gồm cả bộ đệm khóa MySQL bên trong và bộ đệm hệ thống. Nếu bạn muốn có hiệu suất tốt nhất, bạn cần phải chừa chỗ cho một trong hai bộ đệm, nhưng tôi vẫn không khuyến nghị MyISAM cho mục đích đó, đặc biệt nếu cơ sở dữ liệu của bạn bị ghi nặng: MyISAM khóa toàn bộ bảng khi ghi, trong khi InnoDB chỉ khóa các hàng bị ảnh hưởng.

Ngay cả khi bạn đặt tất cả các cơ sở dữ liệu vào bộ nhớ, bạn vẫn có thể có các truy vấn chạy chậm do không đủ chỉ mục hoặc các lý do khác.

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.