Xác định các truy vấn chậm bằng Công cụ phân tích của MySQL. Tạp chí cơ sở dữ liệu


Rob Gravelle xem xét lệnh Slow Query Log và Giải thích, cả hai lệnh này đều giúp xác định các truy vấn chậm và có thể được sử dụng để xác định và tối ưu hóa các truy vấn chậm nhằm loại bỏ các nút cổ chai do chúng gây ra

Khi bạn
Hãy nghĩ về lượng dữ liệu đáng kinh ngạc được truy cập hàng ngày bởi
Mọi người ở mọi nơi đều nhận thức được công việc mà cơ sở dữ liệu quan hệ thực hiện
Tuy nhiên, không giống như phép lạ thực sự, những phép lạ được cung cấp bởi cơ sở dữ liệu
Giống như MySQL, chúng cần một chút hỗ trợ từ các nhà thiết kế của chúng,
Các công cụ phân tích MySQL phục vụ các nhà phát triển và quản trị viên
Với sự trợ giúp của các công cụ này, bạn có thể xác định chính xác và nâng cao các truy vấn chậm để
loại bỏ các tắc nghẽn mà họ tạo ra. Hôm nay, chúng ta sẽ xem xét Chậm
Lệnh Giải thích và Nhật ký truy vấn đều có khả năng xác định các truy vấn chậm

Kích hoạt Nhật ký truy vấn chậm

Chậm
Tất cả các câu lệnh SQL chiếm nhiều hơn một số lượng xác định trước
giây để thực hiện

Một số
Đầu tiên, lưu ý rằng MySQL thêm một câu lệnh vào nhật ký truy vấn chậm
sau khi thực hiện và giải phóng tất cả các khóa, do đó, thứ tự nhật ký
Thứ hai, hãy nhớ rằng khoảng thời gian cần thiết để có được
Khóa bảng ban đầu không được bao gồm trong thời gian thực hiện
cả truy vấn và truy vấn được lưu trong bộ đệm truy vấn đều không được thêm vào nhật ký truy vấn chậm
rằng vì bảng chứa số 0 sẽ không được hưởng lợi từ chỉ mục
hàng hoặc một hàng

To lớn
Kích hoạt nhật ký truy vấn chậm và khởi chạy máy chủ mysqld bằng các tùy chọn -
tùy chọn cho long_query_time và log-slow-queries[=file_name]
Tùy chọn long_query_time tối thiểu cho phép bạn chỉ định giới hạn thời gian cho các truy vấn chậm tính bằng giây
Nếu không có file_name nào được chỉ định cho -log-slow-queries, giá trị mặc định là 1 và
tên mặc định là host_name-slow. đăng nhập
Trừ khi một tên đường dẫn tuyệt đối được chỉ định, máy chủ sẽ tạo tệp trong thư mục dữ liệu
được sử dụng để chỉ định một cái khác

Đây là
cú pháp cho phép
Nhật ký truy vấn chậm trong phần mysqld của tệp cấu hình máy chủ MySQL

_10

A
ví dụ thực tế

________Đầu tiên

Sử dụng
các bước để định cấu hình nhật ký truy vấn chậm bằng tham số lệnh

root> ./bin/mysqld_safe --log_slow_queries=/mysql/logs/slow_query.log --long_query_time=20

To lớn
Sử dụng mysqldumpslow để kiểm tra các truy vấn trong nhật ký truy vấn chậm dài dễ dàng hơn
lệnh trên một số phiên bản MySQL

Truy vấn
không sử dụng các chỉ mục có thể được ghi lại trong nhật ký truy vấn chậm bằng cách thêm vào như sau
tùy chọn — log-queries-not-using-indexes

Tuyên bố GIẢI THÍCH

GIẢI THÍCH
câu lệnh cung cấp bảng phân tích của một câu lệnh CHỌN cụ thể
Chỉ cần bao gồm từ khóa EXPLAIN trong câu lệnh EXPLAIN, sau đó là bảng hoặc
Như được minh họa bằng cú pháp sau, một câu lệnh SELECT

EXPLAIN tbl_name
 
Or:
 
EXPLAIN SELECT select_options

trong sử dụng
Bài viết của chúng tôi Tạo bảng trong truy vấn MySQL của bạn để cải thiện hiệu suất
một phép tính tổng số tiền thưởng cho mỗi
Đây là kết quả mà câu lệnh EXPLAIN mang lại cho nó

EXPLAIN
SELECT e.name, 
       e.salary, 
       COUNT[b.bonus_id] AS 'Total Bonuses'
FROM employees e 
     LEFT OUTER JOIN 
[SELECT emp_id, bonus_id  FROM bonuses WHERE YEAR[award_date] = 2009] AS b
 ON e.id = b.emp_id
GROUP BY e.id;

Các
kết quả

Tôi

lựa chọn đối tượng

bàn

loại hình

có thể_keys

Chìa khóa

key_len

giới thiệu

hàng

Thêm

1

SƠ ĐẲNG

e

TẤT CẢ CÁC

[VÔ GIÁ TRỊ]

[VÔ GIÁ TRỊ]

[VÔ GIÁ TRỊ]

[VÔ GIÁ TRỊ]

8

Dùng tạm;
sử dụng filesort

1

SƠ ĐẲNG

TẤT CẢ CÁC

[VÔ GIÁ TRỊ]

[VÔ GIÁ TRỊ]

[VÔ GIÁ TRỊ]

[VÔ GIÁ TRỊ]

mười

2

NGUỒN GỐC

tiền thưởng

TẤT CẢ CÁC

[VÔ GIÁ TRỊ]

[VÔ GIÁ TRỊ]

[VÔ GIÁ TRỊ]

[VÔ GIÁ TRỊ]

thứ mười hai

Sử dụng ở đâu

mỗi
Mười cột trong hàng đầu ra từ EXPLAIN cung cấp thông tin chi tiết về một
Đây là bảng phân tích kết quả đầu ra của EXPLAIN, theo từng cột

  1. Tôi. Mã định danh CHỌN
    Số thứ tự CHỌN của truy vấn được biểu thị bằng số này
  2. Loại CHỌN, đó là select_type
    có thể là bất kỳ giá trị nào sau đây
  • CHỌN đơn giản [không sử dụng UNION hoặc truy vấn con]
  • SƠ ĐẲNG. CHỌN ngoài cùng
  • Câu lệnh SELECT xuất hiện sau câu lệnh đầu tiên trong UNION
  • CÔNG ĐOÀN PHỤ THUỘC. Thứ hai hoặc muộn hơn
    Câu lệnh CHỌN của UNION phụ thuộc vào một truy vấn khác
  • KẾT QUẢ CÔNG ĐOÀN. Kết quả của một hiệp hội
  • YÊU CẦU PHỤ. CHỌN đầu tiên trong
    truy vấn con
  • YÊU CẦU PHỤ PHỤ THUỘC. CHỌN đầu tiên
    tùy thuộc vào truy vấn bên ngoài trong truy vấn con
  • NGUỒN GỐC. Bảng dẫn xuất CHỌN
    [truy vấn con trong mệnh đề TỪ]
  • TRUY CẬP PHỤ KHÔNG THỂ TRUY CẬP. một truy vấn phụ
    điều này ngăn không cho kết quả được lưu vào bộ đệm và yêu cầu đánh giá lại cho từng hàng của
    truy vấn bên ngoài
  1. bảng, đó là một trong những
    hàng đầu ra đề cập đến
  2. loại. Các loại tham giaĐây là
    thông tin rất quan trọng vì một số loại tham gia được ưu tiên hơn những loại khác
    là danh sách các kiểu nối khác nhau, được sắp xếp theo thứ tự ít nhất đến phổ biến nhất
    mong muốn
  • hệ thống. Một bảng hệ thống chứa
    Đây là trường hợp đặc biệt của kiểu tham gia const [xem tiếp theo];
    mục]
  • hăng sô. Kết quả so sánh tất cả
    các phần của chỉ mục PRIMARY KEY hoặc UNIQUE ánh xạ tới các giá trị không đổi
    tối đa một hàng phù hợp được đọc ở đầu truy vấn
    Chỉ có một hàng và các giá trị trong cột của hàng này có thể được xem xét
    Các bảng const được phần còn lại của trình tối ưu hóa sử dụng làm hằng số
    bởi vì chúng chỉ được đọc một lần, chúng di chuyển nhanh chóng
  • eq_ref. Được sử dụng cho các cột được lập chỉ mục
    tương phản với sự trợ giúp của toán tử bằng [=]
    một hằng số hoặc một công thức sử dụng các cột từ các bảng
    Bảng này được đọc đầu tiên và một hàng được đọc cho mỗi
    khác với hệ thống, sự kết hợp của các hàng từ các bảng trước
    Đây là loại tham gia lý tưởng, vượt trội so với cả hai loại const và các loại khác
    khi một liên kết sử dụng mọi thành phần của một chỉ mục và chỉ mục là một
    PRIMARY KEY hoặc chỉ mục UNIQUE
  • nếu tham gia sử dụng, ref
    chỉ tiền tố ngoài cùng bên trái của khóa hoặc nếu đó không phải là chỉ mục PRIMARY KEY hoặc UNIQUE [i. e. , nếu liên kết không thể chỉ chọn một hàng dựa trên khóa]
    Từ bảng này, tất cả các hàng có giá trị chỉ mục phù hợp được đọc cho
    nếu khóa nằm trong các bảng trước đó, thì mỗi tổ hợp hàng
    used là một kiểu nối tốt vì nó chỉ khớp với một vài hàng. giới thiệu có thể là
    được sử dụng khi so sánh các cột được lập chỉ mục với = hoặc
    nhà điều hành
  • toàn văn. Phép nối được thực hiện
    sử dụng chỉ mục FULLTEXT
  • Loại tham gia này tương tự như ref hoặc null,
    nhưng ngoài ra, MySQL thực hiện tìm kiếm bổ sung cho các hàng
    Tối ưu hóa loại liên kết này được sử dụng thường xuyên nhất để giải quyết các liên kết có giá trị NULL
    truy vấn phụ
  • index_merge. Loại liên kết này chỉ ra
    tối ưu hóa Hợp nhất chỉ mục được sử dụng trong trường hợp này
    cột trong hàng đầu ra bao gồm key_len và danh sách các chỉ mục được sử dụng
    bao gồm một danh sách các thành phần chính dài nhất cho các chỉ mục được sử dụng
  • unique_subquery. Chức năng tra cứu chỉ số
    thay thế hoàn toàn truy vấn con để cải thiện hiệu quả
  • tương tự như index_subquery, kiểu nối này
    Nó thay thế các truy vấn con IN, nhưng nó cũng có chức năng cho
    chỉ mục không duy nhất trong truy vấn con
  • chỉ các cột nằm trong một
    các hàng từ một phạm vi nhất định được truy xuất bằng chỉ mục
    Chỉ mục nào được sử dụng được biểu thị bằng một cột trong hàng đầu ra
    chứa thành phần khóa dài nhất đã được sử dụng
    Phạm vi có thể được sử dụng khi một cột chính là NULL cho loại này
    sử dụng bất kỳ toán tử nào =,, >, >=, so với một hằng số


Sử dụng các công cụ phân tích MySQL, bạn có thể xác định và tối ưu hóa các truy vấn chậm để loại bỏ các tắc nghẽn mà chúng gây ra. Rob Gravelle kiểm tra lệnh Slow Query Log và Giải thích, cả hai lệnh này có thể giúp xác định các truy vấn chậm

Khi bạn
xem xét lượng dữ liệu gây tê liệt đang được truy cập hàng ngày bởi
mọi người trên khắp thế giới bạn nhận ra rằng công việc mà cơ sở dữ liệu quan hệ làm
thực sự là kỳ diệu. Tuy nhiên, không giống như phép lạ thực sự, những phép lạ được cung cấp bởi cơ sở dữ liệu
như MySQL không chỉ xảy ra. Họ cần một chút giúp đỡ từ các nhà thiết kế của họ,
nhà phát triển và quản trị viên. Đó là nơi các công cụ phân tích MySQL xuất hiện
Trong. Sử dụng các công cụ này, bạn có thể xác định và tối ưu hóa các truy vấn chậm để
loại bỏ các tắc nghẽn mà chúng gây ra. Hôm nay chúng ta sẽ kiểm tra Chậm
Lệnh Nhật ký Truy vấn và Giải thích, cả hai lệnh này có thể giúp xác định các truy vấn chậm

Kích hoạt Nhật ký truy vấn chậm

Chậm
nhật ký truy vấn chứa tất cả các câu lệnh SQL chiếm nhiều hơn một số lượng nhất định
giây để thực hiện

Một số
Những điều cần lưu ý. Đầu tiên, MySQL viết một câu lệnh vào nhật ký truy vấn chậm
sau khi nó được thực thi và tất cả các khóa đã được giải phóng, vì vậy thứ tự nhật ký
có thể khác với thứ tự thực hiện. Thứ hai, lưu ý rằng thời gian để có được
khóa bảng ban đầu không được tính là thời gian thực hiện. Thứ ba, truy vấn
được xử lý bởi bộ đệm truy vấn không được thêm vào nhật ký truy vấn chậm, cũng như các truy vấn
điều đó sẽ không được hưởng lợi từ sự hiện diện của một chỉ mục vì bảng có số không
hàng hoặc một hàng

Đến
bật nhật ký truy vấn chậm, khởi động chương trình máy chủ mysqld với các tùy chọn –
tùy chọn log-slow-queries[=file_name] và long_query_time. long_query_time
tùy chọn chỉ định giới hạn thời gian của các truy vấn chậm tính bằng giây. long_query_time tối thiểu
giá trị là 1 trong khi mặc định là 10. Tương tự như vậy, nếu không có file_name nào được cung cấp cho –log-slow-queries,
tên mặc định là host_name-slow. đăng nhập
Máy chủ tạo tệp trong thư mục dữ liệu trừ khi có tên đường dẫn tuyệt đối
được đưa ra để chỉ định một cái khác

Đây là
cú pháp cho phép
Nhật ký truy vấn chậm trong tệp cấu hình máy chủ MySQL trong phần mysqld

[mysqld]
log-slow-queries[=]
long_query_time=

A
ví dụ thực tế

[mysqld]
long_query_time         = 15
log-slow-queries        = /var/log/mysql/mysql-slow.log

Sử dụng
làm theo để thiết lập nhật ký truy vấn chậm thông qua tham số lệnh

root> ./bin/mysqld_safe --log_slow_queries=/mysql/logs/slow_query.log --long_query_time=20

Đến
đơn giản hóa việc kiểm tra các truy vấn trong nhật ký truy vấn chậm dài, bạn có thể sử dụng mysqldumpslow
lệnh trên một số phiên bản của MySQL

Truy vấn
không sử dụng chỉ mục cũng có thể được ghi vào nhật ký truy vấn chậm bằng cách bao gồm
tùy chọn — log-queries-not-using-indexes

Tuyên bố GIẢI THÍCH

GIẢI THÍCH
câu lệnh cung cấp phân tích về câu lệnh SELECT đã chỉ định. Để sử dụng
câu lệnh EXPLAIN, chỉ cần bao gồm từ khóa EXPLAIN, theo sau là bảng hoặc
câu lệnh SELECT, như thể hiện trong cú pháp sau

EXPLAIN tbl_name
 
Or:
 
EXPLAIN SELECT select_options

trong sử dụng
Các bảng có nguồn gốc trong bài viết Truy vấn MySQL của bạn để cải thiện hiệu suất mà chúng tôi tạo
một truy vấn kiểm tra số lượng tiền thưởng cho mỗi
Nhân viên. Đây là những gì câu lệnh EXPLAIN tạo ra cho nó

EXPLAIN
SELECT e.name, 
       e.salary, 
       COUNT[b.bonus_id] AS 'Total Bonuses'
FROM employees e 
     LEFT OUTER JOIN 
[SELECT emp_id, bonus_id  FROM bonuses WHERE YEAR[award_date] = 2009] AS b
 ON e.id = b.emp_id
GROUP BY e.id;

Các
kết quả

Tôi

lựa chọn đối tượng

bàn

loại hình

có thể_keys

Chìa khóa

key_len

giới thiệu

hàng

Thêm

1

SƠ ĐẲNG

e

TẤT CẢ CÁC

[VÔ GIÁ TRỊ]

[VÔ GIÁ TRỊ]

[VÔ GIÁ TRỊ]

[VÔ GIÁ TRỊ]

8

Dùng tạm;
sử dụng filesort

1

SƠ ĐẲNG

TẤT CẢ CÁC

[VÔ GIÁ TRỊ]

[VÔ GIÁ TRỊ]

[VÔ GIÁ TRỊ]

[VÔ GIÁ TRỊ]

10

2

NGUỒN GỐC

tiền thưởng

TẤT CẢ CÁC

[VÔ GIÁ TRỊ]

[VÔ GIÁ TRỊ]

[VÔ GIÁ TRỊ]

[VÔ GIÁ TRỊ]

12

Sử dụng ở đâu

Mỗi
hàng đầu ra từ EXPLAIN chứa mười cột cung cấp thông tin về một
bàn. Đây là bảng phân tích theo từng cột của đầu ra của EXPLAIN

  1. Tôi. Mã định danh CHỌN
    Đây là số thứ tự của SELECT trong truy vấn
  2. lựa chọn đối tượng. Loại CHỌN, mà
    có thể là bất kỳ giá trị nào được liệt kê bên dưới
  • GIẢN DỊ. CHỌN đơn giản [không sử dụng UNION hoặc truy vấn con]
  • SƠ ĐẲNG. CHỌN ngoài cùng
  • LIÊN HIỆP. Câu lệnh SELECT thứ hai trở lên trong UNION
  • CÔNG ĐOÀN PHỤ THUỘC. Thứ hai hoặc muộn hơn
    Câu lệnh CHỌN trong UNION, phụ thuộc vào truy vấn bên ngoài
  • KẾT QUẢ CÔNG ĐOÀN. Kết quả của một CÔNG ĐOÀN
  • YÊU CẦU PHỤ. CHỌN đầu tiên trong
    truy vấn con
  • YÊU CẦU PHỤ PHỤ THUỘC. CHỌN đầu tiên
    trong truy vấn phụ, phụ thuộc vào truy vấn bên ngoài
  • NGUỒN GỐC. Bảng dẫn xuất CHỌN
    [truy vấn con trong mệnh đề TỪ]
  • TRUY CẬP PHỤ KHÔNG THỂ TRUY CẬP. một truy vấn phụ
    mà kết quả không thể được lưu trữ và phải được đánh giá lại cho mỗi hàng của
    truy vấn bên ngoài
  1. bàn. cái bàn mà
    hàng đầu ra đề cập đến
  2. loại hình. kiểu tham gia. Đây là
    thông tin quan trọng vì một số loại tham gia thích hợp hơn những loại khác. Nơi đây
    là danh sách các loại liên kết khác nhau, được sắp xếp từ nhiều nhất đến ít nhất
    mong muốn
  • hệ thống. Một bảng hệ thống chứa
    chỉ có một hàng. Đây là trường hợp đặc biệt của kiểu tham gia const [xem tiếp theo
    mục]
  • hăng sô. Kết quả so sánh tất cả
    các phần của chỉ mục PRIMARY KEY hoặc UNIQUE thành các giá trị không đổi. cái bàn có
    nhiều nhất một hàng phù hợp, được đọc khi bắt đầu truy vấn. Tại vì
    chỉ có một hàng, các giá trị từ cột trong hàng này có thể được xem xét
    dưới dạng hằng số bởi phần còn lại của trình tối ưu hóa. bảng const là
    rất nhanh vì chúng chỉ được đọc một lần
  • eq_ref. Được sử dụng cho các cột được lập chỉ mục
    được so sánh bằng toán tử bằng [=]. Giá trị so sánh có thể
    là một hằng số hoặc một biểu thức sử dụng các cột từ các bảng
    đọc trước bảng này. Một hàng được đọc từ bảng này cho mỗi
    sự kết hợp của các hàng từ các bảng trước đó. Khác với hệ thống
    và các loại const, đây là loại tham gia tốt nhất có thể. Nó được sử dụng
    khi tất cả các phần của một chỉ mục được sử dụng bởi liên kết và chỉ mục là một
    PRIMARY KEY hoặc chỉ mục UNIQUE
  • giới thiệu. Được sử dụng nếu tham gia sử dụng
    chỉ tiền tố ngoài cùng bên trái của khóa hoặc nếu khóa không phải là chỉ mục PRIMARY KEY hoặc UNIQUE [nói cách khác, nếu liên kết không thể chọn một hàng dựa trên khóa
    giá trị]. Tất cả các hàng có giá trị chỉ mục phù hợp được đọc từ bảng này cho
    mỗi sự kết hợp của các hàng từ các bảng trước. Nếu chìa khóa đó là
    used chỉ khớp với một vài hàng, đây là một kiểu nối tốt. giới thiệu có thể là
    used for indexed columns that are compared using the = or
    nhà điều hành
  • toàn văn. Phép nối được thực hiện
    sử dụng chỉ mục FULLTEXT
  • ref_or_null. Loại tham gia này giống như ref,
    nhưng với việc bổ sung MySQL thực hiện tìm kiếm bổ sung cho các hàng
    chứa giá trị NULL. Tối ưu hóa loại liên kết này được sử dụng thường xuyên nhất trong việc giải quyết
    truy vấn phụ
  • index_merge. Loại liên kết này chỉ ra
    rằng tối ưu hóa Hợp nhất chỉ mục được sử dụng. Trong trường hợp này, chìa khóa
    cột trong hàng đầu ra chứa danh sách các chỉ mục được sử dụng và key_len
    chứa danh sách các phần quan trọng dài nhất cho các chỉ mục được sử dụng
  • unique_subquery. Chức năng tra cứu chỉ số
    thay thế hoàn toàn truy vấn con để có hiệu quả tốt hơn
  • index_subquery. Kiểu nối này tương tự
    đến unique_subquery. Nó thay thế các truy vấn con IN, nhưng nó hoạt động cho
    chỉ mục không duy nhất trong truy vấn con
  • phạm vi. Chỉ những hàng nằm trong một
    phạm vi đã cho được truy xuất, sử dụng chỉ mục để chọn các hàng. Chìa khóa
    cột trong hàng đầu ra cho biết chỉ mục nào được sử dụng. chìa khóa_len
    chứa phần khóa dài nhất đã được sử dụng. cột giới thiệu
    là NULL cho loại này. Phạm vi có thể được sử dụng khi một cột chính được
    so với một hằng số sử dụng bất kỳ dấu =, , >, >=,

Chủ Đề