Chạy MySQL ở cài đặt tối ưu cho các tài nguyên cụ thể giúp xử lý tải máy chủ lớn hơn và ngăn máy chủ chạy chậm. Nói chung, sau khi sửa đổi Apache để xử lý tải lớn hơn, sẽ có lợi khi điều chỉnh MySQL thành các kết nối bổ sung.
Điều chỉnh cơ sở dữ liệu là một chủ đề mở rộng và hướng dẫn này chỉ bao gồm những điều cơ bản về chỉnh sửa cấu hình MySQL của bạn. Cơ sở dữ liệu MySQL lớn có thể yêu cầu một lượng bộ nhớ đáng kể. Vì lý do này, chúng tôi khuyên bạn nên sử dụng aHigh Memory Linode cho các thiết lập như vậy.
Lưu ý Các bước trong hướng dẫn này yêu cầu quyền root. Đảm bảo chạy các bước bên dưới với tư cách là root hoặc với sudo
tiếp đầu ngữ. Để biết thêm thông tin về các đặc quyền, hãy xem hướng dẫn Người dùng và Nhóm của chúng tôi.
Các công cụ có thể giúp tối ưu hóa MySQL
Để xác định xem cơ sở dữ liệu MySQL của bạn có cần được cấu hình lại hay không, cách tốt nhất là xem các tài nguyên của bạn hiện đang hoạt động như thế nào. Điều này có thể được thực hiện bằng lệnh dừng hoặc với dịch vụ LinodeLongview. Ít nhất, bạn nên tự làm quen với việc sử dụng RAM và CPU của máy chủ của mình, bạn có thể khám phá điều này bằng các lệnh sau:
echo [PID] [MEM] [PATH] && ps aux | awk '{print $2, $4, $11}' | sort -k2rn | head -n 20
ps -eo pcpu,pid,user,args | sort -k 1 -r | head -20
MySQLTuner
Tập lệnh TheMySQLTuner đánh giá cài đặt MySQL của bạn, sau đó đưa ra các đề xuất để tăng hiệu suất và độ ổn định cho máy chủ của bạn.
-
Tải xuống tập lệnh MySQLTuner:
wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.pl
-
Thay đổi các quyền của tập lệnh để có thể thực thi được:
chmod +x mysqltuner.pl
-
Chạy
mysqltuner.pl
kịch bản. Bạn sẽ được nhắc nhập thông tin đăng nhập và mật khẩu quản trị MySQL của mình:./mysqltuner.pl
-
Tập lệnh sẽ trả về kết quả tương tự như kết quả bên dưới:
MySQLTuner đưa ra các đề xuất về cách cải thiện hiệu suất của cơ sở dữ liệu. Nếu bạn lo lắng về việc tự cập nhật cơ sở dữ liệu của mình, thì việc làm theo các đề xuất của MySQLTuner là một trong những cách an toàn hơn để cải thiện hiệu suất cơ sở dữ liệu của bạn.>> MySQLTuner 1.4.0 - Major Hayden <[email protected]> >> Bug reports, feature requests, and downloads at http://mysqltuner.com/ >> Run with '--help' for additional options and output filtering Please enter your MySQL administrative login: root Please enter your MySQL administrative password: [OK] Currently running supported MySQL version 5.5.41-0+wheezy1 [OK] Operating on 64-bit architecture -------- Storage Engine Statistics ------------------------------------------- [--] Status: +ARCHIVE +BLACKHOLE +CSV -FEDERATED +InnoDB +MRG_MYISAM [--] Data in InnoDB tables: 1M (Tables: 11) [--] Data in PERFORMANCE_SCHEMA tables: 0B (Tables: 17) [!!] Total fragmented tables: 11 -------- Security Recommendations ------------------------------------------- [OK] All database users have passwords assigned -------- Performance Metrics ------------------------------------------------- [--] Up for: 47s (113 q [2.404 qps], 42 conn, TX: 19K, RX: 7K) [--] Reads / Writes: 100% / 0% [--] Total buffers: 192.0M global + 2.7M per thread (151 max threads) [OK] Maximum possible memory usage: 597.8M (60% of installed RAM) [OK] Slow queries: 0% (0/113) [OK] Highest usage of available connections: 0% (1/151) [OK] Key buffer size / total MyISAM indexes: 16.0M/99.0K [!!] Query cache efficiency: 0.0% (0 cached / 71 selects) [OK] Query cache prunes per day: 0 [OK] Temporary tables created on disk: 25% (54 on disk / 213 total) [OK] Thread cache hit rate: 97% (1 created / 42 connections) [OK] Table cache hit rate: 24% (52 open / 215 opened) [OK] Open file limit used: 4% (48/1K) [OK] Table locks acquired immediately: 100% (62 immediate / 62 locks) [OK] InnoDB buffer pool / data size: 128.0M/1.2M [OK] InnoDB log waits: 0 -------- Recommendations ----------------------------------------------------- General recommendations: Run OPTIMIZE TABLE to defragment tables for better performance Enable the slow query log to troubleshoot bad queries Variables to adjust: query_cache_limit (> 1M, or use smaller result sets)
Điều chỉnh MySQL
Khi thay đổi cấu hình MySQL, hãy cảnh giác với những thay đổi và cách chúng ảnh hưởng đến cơ sở dữ liệu của bạn. Ngay cả khi làm theo hướng dẫn của các chương trình như MySQLTuner, tốt nhất bạn nên hiểu rõ về quy trình.
Tệp cấu hình MySQL được lưu trữ ở vị trí sau:/etc/mysql/my.cnf
.
Lưu ýTrước khi cập nhật cấu hình MySQL của bạn, hãy tạo một bản sao lưu của
my.cnf
tệp:cp /etc/mysql/my.cnf ~/my.cnf.backup
Phương pháp hay nhất khuyên bạn nên thực hiện các thay đổi nhỏ, lần lượt và sau đó theo dõi máy chủ sau mỗi lần thay đổi. Bạn nên khởi động lại MySQL sau mỗi lần thay đổi:
Đối với các bản phân phối sử dụng systemd:
systemctl restart mysqld
Đối với các bản phân phối với các hệ thống init khác nhau:
service mysql restart
Khi thay đổi các giá trị trong
my.cnf
tệp, hãy đảm bảo rằng dòng bạn đang thay đổi không bị nhận xét bằng bảng Anh (#
) tiền tố.
key_buffer
Thay đổi key_buffer
phân bổ thêm bộ nhớ cho MySQL, điều này về cơ bản có thể tăng tốc cơ sở dữ liệu của bạn, giả sử bạn có bộ nhớ trống. key_buffer
kích thước thường không chiếm quá 25 phần trăm bộ nhớ hệ thống khi sử dụng công cụ bảng MyISAM và tối đa 70 phần trăm đối với InnoDB. Nếu giá trị được đặt quá cao, tài nguyên sẽ bị lãng phí.
Theo tài liệu của MySQL, đối với các máy chủ có RAM 256MB (hoặc nhiều hơn) với nhiều bảng, nên cài đặt 64M. Máy chủ có RAM 128MB và ít bảng hơn có thể được đặt thành 16M, giá trị mặc định. Các trang web có ít tài nguyên và bảng hơn có thể có giá trị này được đặt thấp hơn.
max_allowed_packet
Tham số này cho phép bạn đặt kích thước tối đa của một gói có thể gửi được. Một gói là một trạng thái SQL duy nhất, một hàng được gửi đến một máy khách hoặc một nhật ký được gửi từ cơ sở dữ liệu nguồn đến một bản sao. Nếu bạn biết rằng máy chủ MySQL của bạn sẽ xử lý các gói lớn, tốt nhất là tăng kích thước này lên kích thước của gói lớn nhất của bạn. Nếu giá trị này được đặt quá nhỏ, bạn sẽ nhận được lỗi trong nhật ký lỗi của mình.
thread_stack
Giá trị này chứa kích thước ngăn xếp cho mỗi luồng. MySQL coi giá trị mặc định của thread_stack
đủ biến để sử dụng bình thường; tuy nhiên, nếu xảy ra lỗi liên quan đến thread_stack
được ghi lại, điều này có thể được tăng lên.
thread_cache_size
Nếu thread_cache_size
bị “tắt” (đặt thành 0), khi đó bất kỳ kết nối mới nào đang được thực hiện đều cần một luồng mới được tạo cho nó. Khi các kết nối ngắt ra, luồng sẽ bị phá hủy. Nếu không, giá trị này đặt số luồng không sử dụng để lưu trữ trong bộ đệm cho đến khi chúng cần được sử dụng cho kết nối. Nói chung, cài đặt này ít ảnh hưởng đến hiệu suất, trừ khi bạn nhận được hàng trăm kết nối mỗi phút, lúc đó giá trị này sẽ được tăng lên để phần lớn kết nối có thể được thực hiện trên các chuỗi đã lưu trong bộ nhớ cache.
max_connections
Tham số này đặt số lượng tối đa của đồng thời kết nối. Tốt nhất là nên xem xét số lượng kết nối tối đa mà bạn đã có trước đây trước khi đặt con số này, vì vậy bạn sẽ có khoảng đệm giữa số trên đó và max_connections
giá trị. Lưu ý, điều này không cho biết số lượng người dùng tối đa trên trang web của bạn cùng một lúc; thay vào đó, nó hiển thị số lượng tối đa người dùng thực hiện yêu cầu đồng thời.
table_cache
Giá trị này phải được giữ cao hơn open_tables
của bạn giá trị. Để xác định giá trị này, hãy sử dụng:
| |
Thông tin khác
Bạn có thể tham khảo các nguồn sau đây để biết thêm thông tin về chủ đề này. Mặc dù những điều này được cung cấp với hy vọng rằng chúng sẽ hữu ích, xin lưu ý rằng chúng tôi không thể đảm bảo tính chính xác hoặc kịp thời của các tài liệu được lưu trữ bên ngoài.
- Thư viện Tài liệu MySQL
- Thông số máy chủ điều chỉnh MySQL
- MySQLTuner