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

Hiệu suất MySQL:Xác định các truy vấn dài

Mọi ứng dụng được MySQL hỗ trợ đều có thể hưởng lợi từ một máy chủ cơ sở dữ liệu được tinh chỉnh. Trong những năm qua, nhóm Hỗ trợ anh hùng của Liquid Web đã gặp phải nhiều tình huống khi một số điều chỉnh nhỏ đã tạo ra sự khác biệt về hiệu suất trang web và ứng dụng. Trong loạt bài viết này, chúng tôi đã đưa ra một số đề xuất phổ biến hơn có tác động lớn nhất đến hiệu suất.

Kiểm tra trước khi khởi hành

Bài viết này áp dụng cho hầu hết các máy chủ MySQL VPS dựa trên Linux. Điều này bao gồm, nhưng không giới hạn, cả máy chủ Cloud VPS và Máy chủ chuyên dụng truyền thống chạy nhiều bản phân phối Linux phổ biến khác nhau. Bài viết có thể được sử dụng với các loại hệ thống Liquid Web sau:

  • CentOS 6x / 7x được quản lý lõi
  • Ubuntu 14.04 / 16.04 được quản lý lõi
  • CentOS 6/7 cPanel được quản lý hoàn toàn
  • CentOS 7 Plesk Onyx 17 được quản lý hoàn toàn
  • Máy chủ Linux tự quản lý
Lưu ý Các hệ thống do chính mình quản lý, đã chọn không hỗ trợ trực tiếp có thể tận dụng các kỹ thuật được thảo luận ở đây, tuy nhiên, Nhóm hỗ trợ anh hùng của Liquid Web không thể cung cấp hỗ trợ trực tiếp trên các loại máy chủ này.

Loạt bài viết này giả định bạn đã quen với các khái niệm quản trị hệ thống cơ bản sau:

  • kết nối SSH và điều hướng cơ bản của môi trường trình bao dòng lệnh Linux tiêu chuẩn.
  • Mở, chỉnh sửa và lưu tệp trong Vim hoặc một trình chỉnh sửa hệ thống đã chọn.
  • Chế độ tương tác MySQL và cú pháp truy vấn MySQL chung.

Tối ưu hóa MySQL là gì?

Không có định nghĩa rõ ràng cho thuật ngữ Tối ưu hóa MySQL. Nó có thể có nghĩa khác nhau tùy thuộc vào người, quản trị viên, nhóm hoặc công ty. Đối với loạt bài viết về Tối ưu hóa MySQL này, chúng tôi sẽ định nghĩa Tối ưu hóa MySQL là:Cấu hình của máy chủ MySQL hoặc MariaDB đã được định cấu hình để tránh các nút cổ chai thường gặp được thảo luận trong loạt bài này.

Điểm nghẽn là gì?

Rất giống với phần cổ chai nước ngọt, nút cổ chai như một thuật ngữ kỹ thuật là một điểm trong cấu hình ứng dụng hoặc máy chủ nơi một lượng nhỏ lưu lượng truy cập hoặc dữ liệu có thể đi qua mà không có vấn đề gì. Tuy nhiên, khối lượng lớn hơn của cùng một loại lưu lượng hoặc dữ liệu bị cản trở hoặc bị chặn và không thể hoạt động thành công như hiện tại. Xem ví dụ sau về nút cổ chai cấu hình:

Trong ví dụ này, máy chủ có khả năng xử lý 10 kết nối đồng thời. Tuy nhiên, cấu hình chỉ chấp nhận 5 kết nối. Sự cố này sẽ không hiển thị miễn là có 5 kết nối trở xuống cùng một lúc. Tuy nhiên, khi lưu lượng truy cập tăng lên đến 10 kết nối, một nửa trong số đó bắt đầu bị lỗi do không sử dụng tài nguyên trong cấu hình máy chủ. Các ví dụ trên minh họa hình dạng nút cổ chai nơi nó lấy tên so với cấu hình được tối ưu hóa để khắc phục nút cổ chai .

Khi nào tôi nên Tối ưu hóa cơ sở dữ liệu MySQL của mình?

Tốt nhất, việc điều chỉnh hiệu suất cơ sở dữ liệu nên diễn ra thường xuyên và trước khi năng suất bị ảnh hưởng. Cách tốt nhất là tiến hành đánh giá hàng tuần hoặc hàng tháng về hiệu suất cơ sở dữ liệu để ngăn chặn các vấn đề ảnh hưởng xấu đến ứng dụng. Các triệu chứng rõ ràng nhất của các vấn đề về hiệu suất là:

  • Các truy vấn xếp chồng lên nhau và không bao giờ hoàn thành trong bảng quy trình MySQL.
  • Các ứng dụng hoặc trang web sử dụng cơ sở dữ liệu trở nên chậm chạp.
  • Lỗi hết thời gian kết nối, đặc biệt là trong giờ cao điểm.

Mặc dù việc có một số truy vấn đồng thời chạy cùng một lúc trên một hệ thống bận là điều bình thường, nhưng nó sẽ trở thành một vấn đề khi các truy vấn này mất quá nhiều thời gian để hoàn thành thường xuyên. Mặc dù ngưỡng cụ thể khác nhau trên mỗi hệ thống và mỗi ứng dụng, thời gian truy vấn trung bình vượt quá vài giây sẽ biểu hiện là sự chậm lại trong các trang web và ứng dụng được đính kèm. Những sự chậm lại này đôi khi có thể bắt đầu nhỏ và không được chú ý cho đến khi một lượng truy cập lớn chạm đến một nút cổ chai cụ thể.

Xác định các vấn đề về hiệu suất

Biết cách kiểm tra bảng quy trình MySQL là rất quan trọng để chẩn đoán nút cổ chai cụ thể đang gặp phải. Có một số cách để xem bảng quy trình tùy thuộc vào máy chủ và tùy chọn cụ thể của bạn. Để ngắn gọn, loạt bài này sẽ tập trung vào các phương pháp phổ biến nhất được sử dụng thông qua truy cập Secure Shell (SSH):

Phương pháp 1. Sử dụng Bảng quy trình MySQL

Sử dụng ‘ mysqladmin 'Công cụ dòng lệnh với cờ' danh sách xử lý ’Hoặc‘ proc Viết tắt là '. (Thêm cờ ‘ thống kê ’Hoặc‘ thống kê Viết tắt là 'sẽ hiển thị số liệu thống kê đang chạy cho các truy vấn kể từ lần khởi động lại cuối cùng của MySQL.)

Lệnh:

mysqladmin proc stat

Đầu ra:

 +-------+------+-----------+-----------+---------+------+-------+
 | Id    | User | Host      | db        | Command | Time | State | Info               | Progress |
 +-------+------+-----------+-----------+---------+------+-------+--------------------+----------+
 | 77255 | root | localhost | employees | Query   | 150  |       | call While_Loop2() | 0.000    |
 | 77285 | root | localhost |           | Query   | 0    | init  | show processlist   | 0.000    |
 +-------+------+-----------+-----------+---------+------+-------+--------------------+----------+
 Uptime: 861755  Threads: 2  Questions: 20961045  Slow queries: 0  Opens: 2976  Flush tables: 1  Open tables: 1011  Queries per second avg: 24.323
Lưu ý: Pro :Được sử dụng trên giao diện shell, điều này giúp việc xuất đường ống tới các tập lệnh và công cụ khác trở nên dễ dàng. Con :Cột thông tin của bảng quy trình luôn bị cắt ngắn nên không cung cấp truy vấn đầy đủ cho các truy vấn dài hơn

Phương pháp 2:Sử dụng Bảng quy trình MySQL

Chạy truy vấn ‘show processlist;’ từ bên trong lời nhắc chế độ tương tác MySQL. (Đ ghi dấu ‘ đầy đủ Bổ ngữ ’cho lệnh vô hiệu hóa việc cắt ngắn Thông tin cột . Điều này là cần thiết khi xem các truy vấn dài.)

Lệnh:

show processlist;

Đầu ra:

MariaDB [(none)]> show full processlist;
 +-------+------+-----------+-----------+---------+------+-------+-----------------------+----------+
 | Id    | User | Host      | db        | Command | Time | State | Info                  | Progress |
 +-------+------+-----------+-----------+---------+------+-------+-----------------------+----------+
 | 77006 | root | localhost | employees | Query   |  151 | NULL  | call While_Loop2()    |    0.000 |
 | 77021 | root | localhost | NULL      | Query   |    0 | init  | show full processlist |    0.000 |
 +-------+------+-----------+-----------+---------+------+-------+-----------------------+----------+
Chuyên nghiệp :Sử dụng công cụ sửa đổi đầy đủ cho phép xem toàn bộ truy vấn trên các truy vấn dài hơn. Con :Chế độ Tương tác MySQL không thể truy cập các tập lệnh và công cụ có sẵn trong giao diện trình bao.

Sử dụng Nhật ký truy vấn chậm

Một công cụ có giá trị khác trong MySQL là tính năng ghi nhật ký truy vấn chậm đi kèm. Tính năng này là phương pháp ưa thích để tìm kiếm các truy vấn chạy dài thường xuyên. Có một số chỉ thị có sẵn để điều chỉnh tính năng này. Tuy nhiên, các cài đặt cần thiết phổ biến nhất là:

slow_query_log bật / tắt nhật ký truy vấn chậm
slow_query_log_file tên và đường dẫn của tệp nhật ký truy vấn chậm
long_query_time thời gian tính bằng giây / micro giây xác định truy vấn chậm

Các chỉ thị này được đặt trong phần [mysqld] của tệp cấu hình MySQL nằm tại /etc/my.cnf và sẽ yêu cầu khởi động lại dịch vụ MySQL trước khi chúng có hiệu lực. Xem ví dụ bên dưới để biết định dạng:

Cảnh báo:Có vấn đề về dung lượng ổ đĩa lớn với tệp nhật ký truy vấn chậm, tệp này cần được tham gia liên tục cho đến khi tính năng nhật ký truy vấn chậm bị vô hiệu hóa. Hãy nhớ rằng chỉ thị long_query_time của bạn càng thấp thì nhật ký truy vấn chậm càng nhanh lấp đầy phân vùng đĩa
[mysqld]
 log-error=/var/lib/mysql/mysql.err
 innodb_file_per_table=1
 default-storage-engine=innodb
 innodb_buffer_pool_size=128M
 innodb_log_file_size=128M
 max_connections=300
 key_buffer_size = 8M
 slow_query_log=1
 slow_query_log_file=/var/lib/mysql/slowquery.log
 long_query_time=5

Khi nhật ký truy vấn chậm được bật, bạn sẽ cần phải theo dõi định kỳ nó để xem xét các truy vấn ngỗ ngược cần được điều chỉnh để có hiệu suất tốt hơn. Để phân tích tệp nhật ký truy vấn chậm, bạn có thể phân tích cú pháp trực tiếp để xem lại nội dung của nó. Ví dụ sau cho thấy thống kê cho truy vấn mẫu chạy lâu hơn 5 giây được định cấu hình:

Thận trọng Có một lần truy cập hiệu suất được thực hiện khi bật tính năng nhật ký truy vấn chậm. Điều này là do các quy trình bổ sung cần thiết để phân tích từng truy vấn cũng như I / O cần thiết để ghi các truy vấn cần thiết vào tệp nhật ký. Bởi vì điều này, nó được coi là phương pháp hay nhất trên các hệ thống sản xuất để vô hiệu hóa nhật ký truy vấn chậm. Nhật ký truy vấn chậm sẽ chỉ được bật trong một khoảng thời gian cụ thể khi tích cực tìm kiếm các truy vấn rắc rối có thể ảnh hưởng đến ứng dụng hoặc trang web.
# Time: 180717  0:23:28
 # User@Host: root[root] @ localhost []
 # Thread_id: 32  Schema: employees  QC_hit: No
 # Query_time: 627.163085  Lock_time: 0.000021  Rows_sent: 0  Rows_examined: 0
 # Rows_affected: 0
 use employees;
 SET timestamp=1531801408;
 call While_Loop2();

Theo tùy chọn, bạn có thể sử dụng công cụ dòng lệnh mysqldumpslow, công cụ này phân tích cú pháp tệp nhật ký truy vấn chậm và nhóm các truy vấn giống như các truy vấn lại với nhau ngoại trừ các giá trị của dữ liệu số và chuỗi:

~ $ mysqldumpslow -a /var/lib/mysql/slowquery.log
 Reading mysql slow query log from /var/lib/mysql/slowquery.log
 Count: 2  Time=316.67s (633s)  Lock=0.00s (0s)  Rows_sent=0.5 (1), Rows_examined=0.0 (0), Rows_affected=0.0 (0), root[root]@localhost
 call While_Loop2()

(Để biết thông tin sử dụng, hãy truy cập tài liệu MySQL tại đây - mysqldumpslow - Tóm tắt các tệp nhật ký truy vấn chậm)

Kết luận

Vì vậy, kết thúc phần đầu tiên của loạt bài Tối ưu hóa cơ sở dữ liệu của chúng tôi và cung cấp cho chúng tôi cơ sở vững chắc để tham khảo cho các mục đích điểm chuẩn. Mặc dù các vấn đề về cơ sở dữ liệu có thể phức tạp, loạt bài của chúng tôi sẽ chia nhỏ các khái niệm này để cung cấp các phương tiện tối ưu hóa cơ sở dữ liệu của bạn thông qua chuyển đổi cơ sở dữ liệu, chuyển đổi bảng và lập chỉ mục.

Chúng tôi có thể hỗ trợ như thế nào?

Chúng tôi tự hào vì đã trở thành những con người hữu ích nhất trong Hosting ™!

Nhóm hỗ trợ của chúng tôi bao gồm các kỹ thuật viên Linux giàu kinh nghiệm và quản trị viên hệ thống tài năng, những người có kiến ​​thức sâu rộng về nhiều công nghệ lưu trữ web, đặc biệt là những công nghệ được thảo luận trong bài viết này.

Nếu bạn có bất kỳ câu hỏi nào liên quan đến thông tin này, chúng tôi luôn sẵn sàng giải đáp mọi thắc mắc về các vấn đề liên quan đến bài viết này, 24 giờ một ngày, 7 ngày một tuần 365 ngày một năm.

Nếu bạn là máy chủ VPS được Quản lý Hoàn toàn, Đám mây Chuyên dụng, Đám mây Riêng của VMWare, Máy chủ Riêng của Mẹ, Máy chủ Đám mây Được Quản lý hoặc Chủ sở hữu Máy chủ Chuyên dụng và bạn không thoải mái khi thực hiện bất kỳ bước nào đã nêu, chúng tôi có thể được liên hệ qua điện thoại tại @ 800.580.4985, một tấm vé trò chuyện hoặc hỗ trợ để hỗ trợ bạn trong quá trình này.

Series NavigationNext Article>>

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lưu mảng PHP vào MySQL?

  2. Cách hàm OCTET_LENGTH () hoạt động trong MySQL

  3. Sử dụng đối chiếu nhị phân có những tác dụng gì?

  4. Tạo biến bảng trong MySQL

  5. Mysql_real_escape_string () và mysql_escape_string () có đủ để bảo mật ứng dụng không?