Một truy vấn mysql nên mất bao lâu?

Đối với các trang web và ứng dụng kết hợp cơ sở dữ liệu vào ngăn xếp công nghệ của họ, phần lớn trải nghiệm người dùng có thể bị ảnh hưởng bởi hiệu suất cơ sở dữ liệu. Truy vấn chậm có thể trì hoãn việc truy xuất dữ liệu, hiển thị trang và bất kỳ thao tác nào khác tương tác với lớp dữ liệu. Do khả năng gây ảnh hưởng nặng nề này, điều quan trọng là phải biết cách xác định và khắc phục những sự cố đó

Show

Trong bài viết này, chúng ta sẽ thảo luận về nhiều cách khác nhau để xác định các truy vấn hoạt động kém trong cơ sở dữ liệu MySQL. Điều này sẽ đặt nền tảng cho việc tối ưu hóa các truy vấn này và cải thiện hiệu suất của chúng

Kiểm tra các truy vấn và quy trình đang hoạt động

Một trong những nơi đơn giản nhất để kiểm tra trước để có cái nhìn tổng quan về trạng thái hoạt động hiện tại của MySQL là trong danh sách quy trình của nó

Hiển thị danh sách quy trình đầy đủ

Để hiển thị tất cả các hoạt động hiện tại mà các luồng xử lý của MySQL đang thực hiện, hãy nhập

SHOW FULL PROCESSLIST;

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

Đầu ra ở trên hiển thị một máy chủ nhàn rỗi chỉ có truy vấn của riêng chúng tôi cũng như trình xử lý sự kiện đang chạy dài. Một máy chủ đang hoạt động sẽ hiển thị nhiều quy trình hơn, một số quy trình có thể đang chạy trong thời gian dài. Nếu không có công cụ sửa đổi

SHOW CREATE TABLE <database>.<table>\G

2, lệnh này sẽ chỉ hiển thị 100 quy trình đầu tiên, có thể hoặc không thể cắt bớt kết quả của bạn tùy thuộc vào hoạt động máy chủ của bạn

Một số phần quan trọng cần xem xét là cột

SHOW CREATE TABLE <database>.<table>\G

3 và

SHOW CREATE TABLE <database>.<table>\G

4. Cột

SHOW CREATE TABLE <database>.<table>\G

3 đếm số giây mà chủ đề đã ở trong

SHOW CREATE TABLE <database>.<table>\G

4 được đề cập. Nếu bạn tìm thấy các quy trình có giá trị

SHOW CREATE TABLE <database>.<table>\G

3 không phù hợp với mong đợi của bạn đối với hoạt động nhất định, có lẽ đã đến lúc điều tra thêm

Kiểm tra trạng thái động cơ lưu trữ

Một nơi khác để kiểm tra là trạng thái của công cụ lưu trữ thực tế

Bạn có thể tìm thấy công cụ lưu trữ được liên kết với một bảng nhất định bằng cách nhập

SHOW CREATE TABLE <database>.<table>\G

Chẳng hạn, để hiển thị công cụ lưu trữ mà bảng

SHOW CREATE TABLE <database>.<table>\G

8 sử dụng, hãy nhập

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

0

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

1

SHOW CREATE TABLE <database>.<table>\G

9 chỉ ra rằng bảng đang sử dụng công cụ lưu trữ InnoDB. Đây là công cụ lưu trữ mặc định trong hầu hết các cấu hình, vì vậy bạn có thể muốn kiểm tra trạng thái của nó

Bạn có thể hiển thị trạng thái của công cụ InnoDB bằng cách nhập

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

3

Mở rộng để xem kết quả

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

4

Đầu ra sẽ chứa một lượng lớn thông tin về các tài nguyên mà công cụ đang sử dụng, các quy trình đang được thực thi, v.v. Bạn có thể sử dụng điều này để biết liệu có nút cổ chai nào trong quá trình thực thi hay liệu số lượng quy trình đang tranh chấp có gây ra vấn đề về hiệu suất hay không

Bật ghi nhật ký truy vấn chậm

Một cách để có thêm thông tin về các truy vấn chạy lâu hoặc thực hiện chậm là ghi nhật ký truy vấn chậm. Ghi nhật ký truy vấn chậm yêu cầu MySQL ghi lại bất cứ khi nào truy vấn vượt qua ngưỡng thực thi nhất định. Nó có thể rất hữu ích trong việc xác định chính xác các truy vấn cụ thể đang chạy kém mà không cần phải nắm bắt nó trong danh sách quy trình trong thời gian thực

Kiểm tra xem MySQL có ghi lại các truy vấn chậm không

Điều đầu tiên bạn nên làm là xác minh trạng thái ghi nhật ký truy vấn chậm hiện tại. Nếu ghi nhật ký truy vấn chậm đã được bật, bạn không phải làm gì cả

Bạn có thể kiểm tra xem ghi nhật ký truy vấn chậm có được bật hay không bằng cách nhập

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

5

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

6

Đầu ra ở trên cho biết rằng các truy vấn chậm hiện không được ghi lại vì chức năng này đã bị tắt

Nếu ghi nhật ký truy vấn chậm được bật, thay vào đó, đầu ra của bạn sẽ trông giống như thế này

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

7

Bây giờ bạn đã biết trạng thái hiện tại, bạn có thể thay đổi nó khi cần thiết

Định cấu hình MySQL để ghi lại các truy vấn chậm

Trước khi chúng ta tiếp tục, điều quan trọng cần lưu ý là mặc dù ghi nhật ký truy vấn chậm cực kỳ hữu ích, nhưng nó có thể có tác động bổ sung đến hiệu suất. MySQL phải thực hiện các thao tác bổ sung để tính thời gian cho mỗi truy vấn và ghi lại kết quả vào nhật ký. Điều này có thể ảnh hưởng đến hiệu suất và làm đầy dung lượng ổ cứng một cách bất ngờ

Có thể không phải lúc nào cũng nên ghi lại các truy vấn chậm. Thay vào đó, hãy bật chức năng này khi bạn đang tích cực điều tra sự cố và tắt chức năng đó khi bạn hoàn tất

Với ý nghĩ đó, bạn có thể định cấu hình ghi nhật ký truy vấn chậm bằng cách sửa đổi tệp cấu hình của máy chủ MySQL. Bạn cũng có thể sửa đổi các giá trị này một cách tương tác, nhưng việc đặt giá trị mặc định tốt trong cấu hình sẽ giúp bạn dễ dàng điều chỉnh tương tác hơn sau này

Mở tệp cấu hình của MySQL. Trên hầu hết các hệ thống dựa trên Debian Linux, tệp cấu hình sẽ được đặt tại

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

00

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

0

Chúng tôi sẽ muốn sửa đổi hoặc có khả năng thêm các cài đặt sau

BiếnCài đặtMô tả_______101

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

02Bật xem truy vấn chậm có được bật hay không.

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

03

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

04Tệp nhật ký nơi các truy vấn chậm sẽ được ghi lại.

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

05(thời gian tính bằng giây)Ngưỡng, tính bằng giây, mà truy vấn phải vượt qua trước khi được coi là truy vấn "chậm".

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

06(số lượng hàng)Số lượng hàng mà một truy vấn phải xem xét trước khi nó là ứng cử viên truy vấn chậm.

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

07

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

02Bật xem các lệnh quản trị cũng có thể được ghi nhật ký hay không.

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

09

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

02Bật xem các truy vấn có được ghi lại hay không nếu chúng không tham khảo một chỉ mục.

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

11

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

02Đối với máy chủ MySQL phiên bản 8. 0. 14 trở lên, thao tác này sẽ chuyển đổi xem có ghi lại thông tin bổ sung về truy vấn hay không.

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

13

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

02Dành cho máy chủ MySQL phiên bản 8. 0. 26 trở lên, thao tác này chuyển đổi xem có ghi lại các câu lệnh chậm đã được thực thi trên bản sao hay không. Điều này chỉ áp dụng cho các câu lệnh trong đó

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

15 được đặt thành

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

16 hoặc

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

17.

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

18

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

02Đối với máy chủ MySQL phiên bản 8. 0. 25 trở về trước, thao tác này sẽ chuyển đổi xem có ghi nhật ký các câu lệnh chậm đã được thực thi trên bản sao hay không. Điều này chỉ áp dụng cho các câu lệnh trong đó

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

15 được đặt thành

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

16 hoặc

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

17

Vì vậy, ví dụ: nếu chúng tôi muốn bật tất cả tính năng đăng nhập tùy chọn và ghi nhật ký bất kỳ câu lệnh nào kiểm tra ít nhất 100 hàng và mất 2 giây hoặc lâu hơn để thực thi, chúng tôi có thể sử dụng các cài đặt này

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

1

Sau khi lưu và đóng tệp, bạn có thể xác thực các thay đổi cấu hình của mình bằng cách nhập

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

2

Nếu không có lỗi nào được trả về, tệp cấu hình máy chủ MySQL của bạn hợp lệ về mặt cú pháp. Bạn có thể khởi động lại quá trình máy chủ MySQL bằng cách gõ

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

3

Bạn có thể xác thực rằng truy vấn chậm hiện đã được bật bằng cách chạy lại truy vấn khám phá ban đầu

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

5

Khi bạn đã định cấu hình truy vấn chậm theo cách bạn muốn, bạn có thể bật và tắt nó nếu cần trong chính MySQL. Cú pháp để điều chỉnh các giá trị trông như thế này

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

5

Sử dụng +----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+ | Id | User | Host | db | Command | Time | State | Info | +----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+ | 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL | | 50 | root | localhost | NULL | Query | 0 | init | show full processlist | +----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+ 2 rows in set (0.00 sec)33 để phân tích nhật ký truy vấn chậm

Khi bạn có nhật ký do quá trình ghi nhật ký truy vấn chậm tạo ra, bạn có thể phân tích nhật ký đó theo một số cách khác nhau để tìm ra chính xác vấn đề nằm ở đâu

Cách đơn giản nhất để phân tích nhật ký là sử dụng tiện ích

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

33 vì tiện ích này có trong cài đặt máy chủ MySQL. Để sử dụng nó, bạn có thể trỏ nó vào nhật ký truy vấn chậm mà bạn đã tạo

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

6

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

7

Đầu ra ở trên cho thấy rằng chúng tôi có bốn truy vấn được coi là "chậm" theo tiêu chí của chúng tôi. Tất cả chúng đều là các biến thể của truy vấn

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

35 với các số khác nhau (được biểu thị bằng trình giữ chỗ

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

36) trong lệnh (nếu bạn muốn kiểm tra điều này, hãy đảm bảo rằng bạn không đặt

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

06). Thời gian thực để thực hiện các câu lệnh là khoảng 17 giây

Lệnh

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

33 bao gồm một vài tùy chọn để kiểm soát việc sắp xếp và hiển thị đầu ra. Ví dụ: bạn có thể sử dụng tùy chọn

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

39 để giới hạn kết quả ở "N" kết quả hàng đầu. Ví dụ: phần sau đây hiển thị năm kết quả hàng đầu

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

8

Bạn có thể thay đổi thứ tự sắp xếp bằng cách sử dụng tùy chọn

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

40. Bạn có thể sắp xếp theo thời gian truy vấn (

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

41), thời gian khóa (

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

42), số hàng đã gửi (

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

43) hoặc theo giá trị trung bình của các số liệu đó (lần lượt là ___144,

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

45 và

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

46). Theo mặc định,

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

33 sắp xếp theo thời gian truy vấn trung bình (

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

44)

Để hiển thị ba truy vấn hàng đầu theo lượng thời gian khóa của chúng, bạn có thể nhập

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

9

Sử dụng +----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+ | Id | User | Host | db | Command | Time | State | Info | +----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+ | 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL | | 50 | root | localhost | NULL | Query | 0 | init | show full processlist | +----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+ 2 rows in set (0.00 sec)49 để phân tích nhật ký truy vấn chậm

Một tiện ích phổ biến khác để phân tích nhật ký truy vấn chậm là công cụ

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

49 do Percona phát triển. Công cụ

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

49 là một phần của Bộ công cụ Percona, một bộ công cụ dòng lệnh nguồn mở được tạo để giúp quản trị viên cơ sở dữ liệu quản lý cơ sở dữ liệu dễ dàng hơn

Bước đầu tiên là tải xuống Bộ công cụ Percona về máy chủ của bạn. Bạn có thể tìm thấy tệp thích hợp bằng cách chọn phiên bản bộ công cụ bạn muốn và nền tảng mà bạn sẽ sử dụng nó trên trang tải xuống Bộ công cụ Percona

Sau khi tải xuống và cài đặt phiên bản bộ công cụ phù hợp với nền tảng của bạn, bạn sẽ có quyền truy cập vào công cụ

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

49

Chạy

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

49 đối với nhật ký truy vấn chậm của bạn sẽ tạo ra nhiều đầu ra hơn so với

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

33

SHOW CREATE TABLE <database>.<table>\G

0

Mở rộng để xem kết quả

SHOW CREATE TABLE <database>.<table>\G

1

Đầu ra hiển thị thời gian thực hiện, kích thước truy vấn, thời gian khóa, các hàng được kiểm tra và gửi, v.v. Lệnh

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

| 5 | event_scheduler | localhost | NULL | Daemon | 1834441 | Waiting on empty queue | NULL |

| 50 | root | localhost | NULL | Query | 0 | init | show full processlist |

+----+-----------------+-----------+------+---------+---------+------------------------+-----------------------+

2 rows in set (0.00 sec)

49 có rất nhiều tùy chọn khác nhau để định hình đầu ra và chỉ hiển thị những mục mà bạn quan tâm. Khám phá trang hướng dẫn để có ý tưởng về những gì có thể

Sự kết luận

Khả năng khám phá các nút cổ chai trong quá trình thực thi truy vấn của bạn là vô giá để có thể duy trì hiệu suất của cơ sở dữ liệu và ứng dụng của bạn. Khi tình trạng chậm lại xảy ra, điều quan trọng là phải có các chiến lược để xác định vị trí các khu vực có vấn đề này và tìm hiểu mức độ ảnh hưởng của chúng

Hệ sinh thái MySQL có rất nhiều công cụ được xây dựng để thực hiện các tác vụ này dễ dàng hơn. Xem xét trạng thái công cụ lưu trữ và quy trình đang hoạt động, đồng thời kích hoạt và phân tích thông tin nhật ký truy vấn chậm cung cấp cho bạn thông tin bạn cần để nhắm mục tiêu các truy vấn tốn kém nhất. Trong hướng dẫn tiếp theo của chúng tôi, chúng tôi sẽ thảo luận cách thực sự tối ưu hóa các truy vấn bạn khám phá và những điều cần lưu ý để giữ cho hiệu suất của bạn tối ưu

LIÊN QUAN ĐẾN PRISMA. IO

Nếu bạn đang sử dụng Prisma với cơ sở dữ liệu MySQL của mình, bạn có thể đọc về các cách tối ưu hóa truy vấn của mình trong phần tối ưu hóa truy vấn của tài liệu. Điều này sẽ giúp bạn hiểu các cấu trúc truy vấn khác nhau có thể ảnh hưởng như thế nào đến hiệu suất cơ sở dữ liệu của bạn khi sử dụng Prisma

Một truy vấn SQL nên mất bao lâu?

Chà, thông thường, chúng tôi nói rằng 1 mili giây là đủ tốt cho thời lượng truy vấn SQL, trong khi 100 mili giây là đáng lo ngại. Và 500-1000 ms là thứ mà chúng tôi chắc chắn cần phải tối ưu hóa, trong khi 10 giây là một thảm họa hoàn toàn.

Các truy vấn MySQL nhanh như thế nào?

MySQL có thể chạy hơn 50.000 truy vấn đơn giản mỗi giây trên phần cứng máy chủ thông thường và hơn 2.000 truy vấn mỗi giây từ một đối tác duy nhất trên mạng Gigabit, so running multiple queries isn't necessarily such a bad thing.

Làm cách nào để tăng tốc truy vấn MySQL?

Tối ưu hóa truy vấn với Nguyên tắc tối ưu hóa truy vấn MySQL .
Tránh sử dụng các chức năng trong vị ngữ. .
Tránh sử dụng ký tự đại diện (%) ở đầu vị ngữ. .
Tránh các cột không cần thiết trong mệnh đề SELECT. .
Sử dụng nối bên trong, thay vì nối ngoài nếu có thể. .
Chỉ sử dụng DISTINCT và UNION nếu cần thiết

Tại sao MySQL rất chậm?

Nếu cơ sở dữ liệu của bạn đang được sử dụng với số lượng lớn , điều này có thể làm chậm cơ sở dữ liệu. Khi có quá nhiều truy vấn cần xử lý cùng lúc, CPU sẽ bị nghẽn cổ chai dẫn đến cơ sở dữ liệu bị chậm.