Cách tắt nhật ký yêu cầu chậm. "Nhật ký máy chủ" là gì, cách xem nhật ký máy chủ. Tạo truy vấn để lập hồ sơ

  • 21.11.2020

Nhật ký sự kiện là công cụ đầu tiên và dễ dàng nhất để xác định trạng thái hệ thống và khắc phục lỗi. Có bốn bản ghi chính trong MySQL:

  • Nhật ký lỗi - nhật ký tiêu chuẩn về các lỗi được thu thập trong khi máy chủ đang chạy (bao gồm cả khởi động và dừng);
  • Nhật ký nhị phân - nhật ký của tất cả các lệnh để thay đổi cơ sở dữ liệu, cần thiết để sao chép và sao lưu;
  • Nhật ký truy vấn chung - nhật ký chính của các yêu cầu;
  • Nhật ký truy vấn chậm - nhật ký các yêu cầu chậm.

Nhật ký lỗi

Nhật ký này chứa tất cả các lỗi xảy ra trong khi máy chủ đang chạy, bao gồm các lỗi nghiêm trọng, cũng như dừng, khởi động máy chủ và cảnh báo. Bạn cần bắt đầu với nó trong trường hợp hệ thống bị lỗi. Theo mặc định, tất cả lỗi được in ra bảng điều khiển (stderr), bạn cũng có thể ghi lỗi vào nhật ký hệ thống (mặc định trong Debian) hoặc một tệp nhật ký riêng:

Log_error \u003d / var / log / mysql / mysql_error.log

# Lỗi sẽ được ghi vào mysql_error.log

Chúng tôi khuyên bạn nên bật nhật ký này để xác định nhanh các lỗi. Và để hiểu lỗi này hoặc lỗi đó có nghĩa là gì, MySQL có tiện ích lỗi:

Shell\u003e perror 13 Mã lỗi hệ điều hành 64 13: Quyền bị từ chối Mã lỗi hệ điều hành 64: Máy không vào mạng

# Giải thích ý nghĩa của mã lỗi

Nhật ký nhị phân (hay còn gọi là nhị phân)

Tất cả các lệnh để thay đổi cơ sở dữ liệu được ghi vào nhật ký nhị phân, hữu ích cho việc sao chép và khôi phục.

Nó bật như thế này:

Log_bin \u003d /var/log/mysql/mysql-bin.log expire_logs_days \u003d 5 max_binlog_size \u003d 500 triệu

# Cho biết vị trí, độ tuổi và kích thước tệp tối đa

Xin lưu ý rằng nếu bạn không mở rộng quy mô hệ thống và thực hiện khả năng chịu lỗi, thì tốt hơn là không nên đưa vào nhật ký nhị phân. Nó tốn nhiều tài nguyên và làm chậm hiệu suất hệ thống.

Nhật ký truy vấn

Nhật ký này chứa tất cả các truy vấn SQL đã nhận, thông tin về các kết nối máy khách. Nó có thể hữu ích cho việc phân tích và tối ưu hóa chỉ mục, cũng như phát hiện các truy vấn sai:

General_log_file \u003d /var/log/mysql/mysql.log general_log \u003d 1

# Bật nhật ký và chỉ định vị trí của tệp

Nó cũng có thể được bật / tắt trong khi máy chủ MySQL đang chạy:

ĐẶT TOÀN CẦU general_log \u003d "BẬT"; ĐẶT TOÀN CẦU general_log \u003d "TẮT";

# Không cần khởi động lại máy chủ để áp dụng

Nhật ký yêu cầu chậm

Nhật ký hữu ích để xác định các truy vấn chậm, tức là không hiệu quả. Đọc thêm trong bài viết này.

Xem nhật ký

Để xem nhật ký trên Debian (Ubuntu), bạn cần chạy:

# Đuôi nhật ký lỗi -f / var / log / syslog # Đuôi nhật ký yêu cầu -f /var/log/mysql/mysql.log # Nhật ký yêu cầu chậmtail -f /var/log/mysql/mysql-slow.log

# Nếu nhật ký không được chỉ định riêng biệt, chúng được đặt trong / var / lib / mysql

Xoay vòng nhật ký

Đừng quên nén (lưu trữ, xoay) các tệp nhật ký để chúng chiếm ít dung lượng hơn trên máy chủ. Để làm điều này, hãy sử dụng tiện ích logrotatebằng cách chỉnh sửa tệp cấu hình /etc/logrotate.d/mysql-server:

# - Tôi đặt mọi thứ trong một khối và thêm các đoạn mã được chia sẻ, để mysql nhận được # flush-logs "d chỉ một lần. # Khác, các bản ghi nhị phân sẽ tự động tăng n lần mỗi ngày. # - Nhật ký lỗi đã lỗi thời, các thông báo sẽ chuyển đến nhật ký hệ thống ngay bây giờ./var/log/mysql.log /var/log/mysql/mysql.log /var/log/mysql/mysql-slow.log (xoay vòng 7 thiếu hàng ngày tạo 640 mysql adm nén sharedscripts postrotate test -x / usr / bin / mysqladmin || exit 0 # Nếu không thành công, hãy kiểm tra debian.conf! MYADMIN \u003d "/ usr / bin / mysqladmin --defaults-file \u003d / etc / mysql / debian.cnf" if [-z "` $ MYADMIN ping 2\u003e / dev / null` "]; sau đó # Thực sự không có mysqld hay đúng hơn là thiếu người dùng debian-sys-Maint? # Nếu điều này xảy ra và không phải là lỗi, vui lòng báo cáo lỗi. #if ps cax | grep -q mysqld; sau đó if killall -q -s0 -umysql mysqld; sau đó thoát 1 fi khác $ MYADMIN flush-logs fi endcript)

# Nén và lưu trữ các bản ghi cần thiết, xóa các tệp

Nhật ký DDL

MySQL cũng giữ một bản ghi của ngôn ngữ mô tả dữ liệu. Nó thu thập dữ liệu từ các hoạt động như DROP_TABLE và ALTER_TABLE. Nhật ký được sử dụng để khôi phục từ các lỗi xảy ra trong các hoạt động đó. Nhật ký DDL là một tệp nhị phân mà người dùng không thể đọc được, vì vậy không sửa đổi hoặc xóa nó.

Điều quan trọng nhất

Luôn bật nhật ký lỗi, sử dụng nhật ký yêu cầu để kiểm tra kết nối của ứng dụng với cơ sở dữ liệu, kiểm tra truy vấn và làm việc. Nhật ký truy vấn chậm rất hữu ích để tối ưu hóa hiệu suất MySQL.

Cấu hình truy vấn MySQL là một kỹ thuật hữu ích để phân tích hiệu suất tổng thể của các ứng dụng hướng cơ sở dữ liệu. Khi phát triển các ứng dụng từ vừa đến lớn, thông thường hàng trăm yêu cầu được trải rộng trên một cơ sở mã lớn và cơ sở dữ liệu đang xử lý nhiều yêu cầu mỗi giây. Nếu không có hồ sơ truy vấn, sẽ rất khó xác định vị trí và lý do tại sao tắc nghẽn ứng dụng đang xảy ra. Hướng dẫn này mô tả một số kỹ thuật lập hồ sơ truy vấn hữu ích bằng cách sử dụng các công cụ MySQL tích hợp sẵn.

Nhật ký truy vấn chậm MySQL

Nhật ký truy vấn chậm MySQL (hoặc nhật ký truy vấn chậm) là nhật ký mà MySQL gửi các truy vấn chậm và có khả năng có vấn đề.

Tính năng này đi kèm với MySQL nhưng bị tắt theo mặc định. MySQL xác định truy vấn nào để đăng nhập vào nhật ký này bằng cách sử dụng các biến đặc biệt cho phép bạn lập hồ sơ truy vấn dựa trên yêu cầu hiệu suất ứng dụng của bạn. Thông thường, nhật ký này chứa các truy vấn mất nhiều thời gian hơn để xử lý và các truy vấn có chỉ mục không chính xác.

Các biến cấu hình

Các biến máy chủ cơ bản để định cấu hình nhật ký truy vấn chậm MySQL là:

slow_query_log global
slow_query_log_file toàn cầu
long_query_time toàn cầu / phiên
log_queries_not_using_indexes toàn cầu
min_examined_row_limit toàn cầu / phiên

slow_query_log - một biến boolean để bật hoặc tắt nhật ký truy vấn chậm.

slow_query_log_file - đường dẫn tuyệt đối của tệp nhật ký truy vấn. Thư mục tệp phải thuộc sở hữu của người dùng mysqld và có quyền đọc / ghi thích hợp. Daemon mysql rất có thể sẽ bắt đầu dưới dạng mysql, nhưng để xác minh điều này, hãy chạy lệnh trong thiết bị đầu cuối Linux của bạn:

ps -ef | grep bin / mysqld | cut -d "" -f1

Đầu ra sẽ hiển thị người dùng hiện tại và người dùng mysqld.

cd / var / log
mkdir mysql
chmod 755 mysql
chown mysql: mysql mysql

  • long_query_time - thời gian tính bằng giây để kiểm tra độ dài của truy vấn. Nếu giá trị là 5, tất cả các yêu cầu mất hơn 5 giây để được xử lý sẽ được ghi vào nhật ký.
  • log_queries_not_using_indexes - Một giá trị boolean xác định xem có nên ghi các truy vấn không sử dụng chỉ mục hay không. Khi phân tích, các truy vấn như vậy rất quan trọng.
  • min_examined_row_limit - xác định số hàng tối thiểu để phân tích. Với giá trị 1000, tất cả các truy vấn phân tích cú pháp nhỏ hơn 1000 hàng sẽ bị bỏ qua.

Các biến máy chủ MySQL có thể được đặt trong tệp cấu hình MySQL hoặc sử dụng động bằng giao diện người dùng MySQL hoặc dòng lệnh. Nếu các biến được đặt trong tệp cấu hình, chúng sẽ vẫn tồn tại khi máy chủ được khởi động lại, nhưng để kích hoạt chúng, bạn cần khởi động lại máy chủ. Tệp cấu hình MySQL thường được tìm thấy trong /etc/my.cnf hoặc /etc/mysql/my.cnf. Để tìm tệp cấu hình, hãy nhập (bạn có thể cần mở rộng tìm kiếm của mình sang các thư mục gốc khác):

find / etc -name my.cnf
find / usr -name my.cnf

Khi bạn tìm thấy tệp cấu hình, hãy thêm các biến bắt buộc vào phần:


….
slow-query-log \u003d 1
slow-query-log-file \u003d /var/log/mysql/localhost-slow.log
long_query_time \u003d 1
log-queries-not-using-indexes

Máy chủ phải được khởi động lại để các thay đổi có hiệu lực. Nếu các thay đổi cần được kích hoạt ngay lập tức, hãy đặt các biến động:

mysql\u003e SET TOÀN CẦU slow_query_log \u003d "BẬT";
mysql\u003e SET GLOBAL slow_query_log_file \u003d "/var/log/mysql/localhost-slow.log";
mysql\u003e ĐẶT TOÀN CẦU log_queries_not_using_indexes \u003d "BẬT";
mysql\u003e SET SESSION long_query_time \u003d 1;
mysql\u003e SET SESSION min_examined_row_limit \u003d 100;

Để kiểm tra giá trị của các biến:

mysql\u003e HIỂN THỊ CÁC BIẾN TẦN TOÀN CẦU NHƯ "slow_query_log";
mysql\u003e HIỂN THỊ CÁC BIẾN ĐỔI CỦA PHẦN NHƯ "long_query_time";

Một trong những nhược điểm của việc thay đổi động các biến MySQL là các biến sẽ bị mất khi máy chủ được khởi động lại. Do đó, tất cả các biến quan trọng cần được lưu nên được thêm vào tệp.

Tạo truy vấn để lập hồ sơ

Bây giờ bạn đã quen với các cài đặt cho nhật ký truy vấn chậm. Cố gắng tạo dữ liệu truy vấn để lập hồ sơ.

Ghi chú: Ví dụ hiển thị ở đây được chạy trên một phiên bản MySQL đang chạy mà không có nhật ký truy vấn chậm được định cấu hình. Các truy vấn kiểm tra này có thể được chạy thông qua GUI hoặc dòng lệnh MySQL.

Khi theo dõi nhật ký truy vấn chậm, sẽ hữu ích khi mở hai cửa sổ đầu cuối: một kết nối để gửi các câu lệnh MySQL và một kết nối để xem nhật ký truy vấn.

Đăng nhập vào máy chủ MySQL bằng bảng điều khiển với tư cách người dùng có đặc quyền SUPER ADMIN. Đầu tiên, hãy tạo một cơ sở dữ liệu và bảng thử nghiệm, thêm dữ liệu giả vào nó và bật nhật ký truy vấn chậm.

Ghi chú: Tốt nhất, ví dụ này được thực hiện tốt nhất trong môi trường không có bất kỳ ứng dụng nào khác sử dụng MySQL để tránh làm lộn xộn nhật ký truy vấn.

$\u003e mysql -u -p
mysql\u003e TẠO CƠ SỞ DỮ LIỆU profile_sampling;

mysql\u003e SỬ DỤNG profile_sampling;


mysql\u003e CREATE TABLE người dùng (id TINYINT PRIMARY KEY AUTO_INCREMENT, tên VARCHAR (255));


mysql\u003e CHÈN VÀO người dùng (tên) GIÁ TRỊ ("Walter"), ("Skyler"), ("Jesse"), ("Hank"), ("Walter Jr."), ("Marie"), ("Saul "), (" Gustavo "), (" Hector "), (" Mike ");


mysql\u003e SET TOÀN CẦU slow_query_log \u003d 1;


mysql\u003e SET GLOBAL slow_query_log_file \u003d "/var/log/mysql/localhost-slow.log";


mysql\u003e SET TOÀN CẦU log_queries_not_using_indexes \u003d 1;


mysql\u003e SET long_query_time \u003d 10;


mysql\u003e SET min_examined_row_limit \u003d 0;

Bây giờ bạn có một cơ sở dữ liệu thử nghiệm và một bảng với một lượng nhỏ dữ liệu. Nhật ký yêu cầu chậm được bật. Chúng tôi cố tình đặt thời gian xử lý yêu cầu cao và tắt tính năng kiểm tra số lượng hàng. Để xem nhật ký, hãy nhập:

cd / var / log / mysql
ls -l

Cho đến nay, thư mục không nên chứa nhật ký các yêu cầu chậm, vì không có yêu cầu nào tại thời điểm này. Nếu một bản ghi như vậy đã tồn tại, điều đó có nghĩa là cơ sở dữ liệu đã gặp phải các truy vấn chậm vì bạn đã bật hỗ trợ cho bản ghi truy vấn chậm. Điều này có thể làm sai lệch kết quả của ví dụ này. Quay lại tab MySQL và chạy:

mysql\u003e SỬ DỤNG profile_sampling;
mysql\u003e CHỌN * TỪ người dùng WHERE id \u003d 1;

Truy vấn được thực thi chỉ đơn giản là tìm nạp dữ liệu và sử dụng chỉ mục của khóa đầu tiên từ bảng. Truy vấn này nhanh và sử dụng một chỉ mục, vì vậy nó không được ghi vào nhật ký truy vấn chậm. Quay lại thư mục và đảm bảo rằng không có nhật ký yêu cầu nào được tạo. Bây giờ quay lại cửa sổ MySQL và chạy:

mysql\u003e

Truy vấn này không sử dụng chỉ mục. Bây giờ trong nhật ký /var/log/mysql/localhost-slow.log sẽ xuất hiện thông báo như sau:

# Thời gian: 140322 13:54:58

sử dụng profile_sampling;
ĐẶT dấu thời gian \u003d 1395521698;

Thêm một ví dụ nữa. Tăng số dòng tối thiểu để phân tích cú pháp và gửi một truy vấn như sau:

mysql\u003e SET min_examined_row_limit \u003d 100;
mysql\u003e CHỌN * TỪ người dùng WHERE name \u003d "Walter";

Dữ liệu sẽ không được thêm vào nhật ký, vì chưa đến 100 dòng được phân tích trong quá trình yêu cầu.

Ghi chú: Nếu dữ liệu chưa được thêm vào nhật ký, có một số yếu tố cần kiểm tra. Đầu tiên, hãy kiểm tra quyền của thư mục mà nhật ký được tạo. Nó phải thuộc sở hữu của người dùng / nhóm mysqld và có đặc quyền chmod 755. Sau đó, bạn nên kiểm tra xem có bất kỳ cài đặt truy vấn chậm nào khác trên máy chủ ghi đè tùy chọn của bạn không. Đặt lại về mặc định để xóa tất cả các biến truy vấn chậm khỏi tệp cấu hình và khởi động lại máy chủ. Bạn cũng có thể đặt động các biến toàn cục thành giá trị mặc định của chúng. Nếu bạn đang thực hiện thay đổi động, hãy đăng xuất và đăng nhập vào MySQL để cập nhật cài đặt.

Phân tích dữ liệu hồ sơ truy vấn

Hãy xem xét các dữ liệu sau:

# Thời gian: 140322 13:54:58
# Người dùng @ Máy chủ: root @ localhost
# Query_time: 0.000303 Lock_time: 0.000090 Rows_sent: 1 Rows_examined: 10
sử dụng profile_sampling;
ĐẶT dấu thời gian \u003d 1395521698;
CHỌN * TỪ người dùng WHERE name \u003d "Jesse";

Mục nhập này hiển thị:

  • Yêu cầu thời gian thực hiện
  • Ai đã gửi nó
  • Mất bao lâu để xử lý yêu cầu
  • Chiều dài
  • Có bao nhiêu hàng đã được trả lại
  • Có bao nhiêu dòng đã được phân tích cú pháp

Điều này rất hữu ích vì bất kỳ yêu cầu nào vi phạm các yêu cầu về hiệu suất được chỉ định trong các biến đều được ghi lại. Điều này cho phép nhà phát triển hoặc quản trị viên nhanh chóng theo dõi các yêu cầu không hoạt động. Ngoài ra, dữ liệu hồ sơ truy vấn có thể giúp bạn xác định trường hợp nào đang làm giảm hiệu suất ứng dụng.

Sử dụng mysqldumpslow

Hồ sơ có thể được kết hợp vào các ứng dụng hướng cơ sở dữ liệu để đảm bảo luồng dữ liệu vừa phải.

Khi kích thước của nhật ký lớn lên, việc phân tích tất cả dữ liệu trở nên khó khăn và các truy vấn có vấn đề rất dễ bị mất trong đó. MySQL cung cấp một công cụ gọi là mysqldumpslow giúp tránh vấn đề này bằng cách chia nhỏ nhật ký truy vấn chậm. Hệ nhị phân được liên kết với MySQL (trên Linux), vì vậy bạn có thể chỉ cần chạy lệnh:

mysqldumpslow -t 5 -s tại /var/log/mysql/localhost-slow.log

Lệnh có thể nhận các tham số khác nhau để tùy chỉnh đầu ra. Ví dụ trên sẽ hiển thị 5 truy vấn hàng đầu được sắp xếp theo thời gian truy vấn trung bình. Những dòng như vậy dễ đọc hơn và cũng được nhóm theo yêu cầu.

Đếm: 2 Thời gian \u003d 68,34 giây (136 giây) Khóa \u003d 0,00 giây (0 giây) Hàng \u003d 39892974,5 (79785949), root @ localhost
CHỌN PL.pl_title, P.page_title
TỪ trang P
INNER tham gia liên kết trang PL
TRÊN PL.pl_namespace \u003d P.page_namespace
WHERE P.page_namespace \u003d N

Đầu ra phản ánh dữ liệu sau:

  • Đếm: yêu cầu đã được ghi lại bao nhiêu lần.
  • Thời gian: trung bình và tổng thời gian của yêu cầu (trong ngoặc đơn).
  • Khóa: thời gian bàn bị khóa.
  • Hàng: số hàng được trả về.

Lệnh loại trừ các giá trị số và chuỗi, vì vậy các truy vấn giống nhau với các mệnh đề WHERE khác nhau được coi là giống nhau. Công cụ mysqldumpslow loại bỏ nhu cầu liên tục xem lại nhật ký truy vấn chậm, thay vào đó cho phép kiểm tra tự động thường xuyên. Các tùy chọn đối với lệnh mysqldumpslow cho phép bạn thực thi các biểu thức phức tạp.

Phân tích các yêu cầu

Một công cụ lập hồ sơ khác cần lưu ý là công cụ phân tích truy vấn phức tạp. Nó cho phép bạn xác định các truy vấn có vấn đề trong nhật ký truy vấn chậm và chạy nó trong MySQL. Trước tiên, bạn cần kích hoạt cấu hình và sau đó thực hiện truy vấn:

mysql\u003e SET SESSION profiling \u003d 1;
mysql\u003e SỬ DỤNG profile_sampling;
mysql\u003e CHỌN * TỪ người dùng WHERE name \u003d "Jesse";
mysql\u003e HIỂN THỊ TÀI LIỆU;

Sau khi cấu hình được bật, SHOW PROFILES sẽ hiển thị bảng liên kết Query_ID với câu lệnh SQL. Tìm Query_ID phù hợp với truy vấn đang chạy và chạy truy vấn sau (thay thế # bằng Query_ID của bạn):

mysql\u003e CHỌN * TỪ THÔNG TIN_SCHEMA.PROFILING WHERE QUERY_ID \u003d #;

Lệnh sẽ trả về bảng:

SEQ TIỂU BANG DURATION
1 bắt đầu 0.000046
2 kiểm tra quyền 0.000005
3 mở bảng 0.000036

STATE là một bước trong quy trình thực thi truy vấn và DURATION là thời gian cần để hoàn thành bước này tính bằng giây. Đây không phải là một công cụ quá hữu ích, nhưng nó có thể giúp bạn xác định phần nào của truy vấn đang gây ra độ trễ nhiều nhất.

Ghi chú: Không nên sử dụng công cụ này trong môi trường sản xuất.

Hiệu suất nhật ký truy vấn chậm

Nó vẫn chỉ để tìm ra cách nhật ký truy vấn chậm ảnh hưởng đến hiệu suất. Nói chung, sẽ an toàn khi chạy nhật ký truy vấn chậm trong môi trường sản xuất; cả CPU và I / O đều không bị ảnh hưởng. Tuy nhiên, bạn phải có chiến lược giám sát kích thước của nhật ký để nhật ký không quá lớn đối với hệ thống tệp. Ngoài ra, khi chạy nhật ký truy vấn chậm trong môi trường sản xuất, hãy đặt long_query_time thành 1 hoặc cao hơn.

Phần kết luận

Nhật ký truy vấn chậm có thể giúp xác định các truy vấn có vấn đề và đánh giá hiệu suất truy vấn tổng thể. Điều này cung cấp cho nhà phát triển sự hiểu biết chi tiết về cách các truy vấn MySQL được thực thi trong ứng dụng. Công cụ mysqldumpslow cho phép bạn quản lý nhật ký truy vấn chậm và dễ dàng kết hợp chúng vào quá trình phát triển. Bằng cách xác định các truy vấn có vấn đề, bạn có thể tối ưu hóa việc xử lý truy vấn để cải thiện hiệu suất.

Thẻ:

Cấu hình truy vấn Mysql được sử dụng để đánh giá hiệu suất của ứng dụng của bạn. Khi phát triển các ứng dụng từ vừa đến lớn, bạn phải xử lý hàng trăm yêu cầu được phân phối trong toàn bộ mã của bạn, được thực thi mỗi giây. Nếu không có kỹ thuật lập hồ sơ truy vấn, nó có thể rất khó tìm, điều này có thể ảnh hưởng đến hiệu suất của ứng dụng của bạn.

Nhật ký truy vấn chậm trong MySQL là gì?

Nhật ký truy vấn chậm MySQL - nhật ký đánh dấu các truy vấn chậm và có khả năng có vấn đề. MySQL hỗ trợ chức năng này theo mặc định, nhưng nó đã bị vô hiệu hóa. Bằng cách đặt các biến máy chủ nhất định, chúng tôi có thể chỉ định truy vấn nào chúng tôi quan tâm. Thông thường, chúng ta cần các truy vấn mất một khoảng thời gian nhất định để thực thi hoặc các truy vấn không xử lý các chỉ mục một cách chính xác.

Thiết lập các biến cấu hình

Các biến chính để định cấu hình nhật ký yêu cầu:

Slow_query_log G slow_query_log_file G long_query_time G / S log_queries_not_using_indexes G min_examined_row_limit G / S

Bình luận: G - biến toàn cục, S - biến hệ thống

  • slow_query_log - giá trị boolean để bao gồm nhật ký
  • slow_query_log_file - đường dẫn tuyệt đối đến tệp nhật ký. Thư mục phải do người dùng sở hữu mysqldvà thư mục phải có quyền đọc và ghi chính xác. Thông thường, trình nền mysql chạy với tư cách người dùng mysql.

Để kiểm tra, hãy chạy các lệnh sau:

Ps -ef | grep bin / mysqld | cut -d "" -f1

Đầu ra của lệnh sẽ cung cấp cho bạn tên của người dùng hiện tại và người dùng mysqld. Ví dụ về thiết lập thư mục / var / log / mysql:

Cd / var / log sudo mkdir mysql sudo chmod 755 mysql sudo chown mysql: mysql mysql

  • long_query_time - thời gian tính bằng giây để kiểm tra thời lượng của yêu cầu. Ví dụ: nếu giá trị là 5, mỗi yêu cầu dài hơn 5 giây sẽ được ghi lại.
  • log_queries_not_using_indexes - boolean, cho phép lưu các truy vấn không sử dụng chỉ mục. Những truy vấn như vậy rất quan trọng trong phân tích.
  • min_examined_row_limit - Cho biết giá trị nhỏ nhất cho số hàng dữ liệu cần phân tích. Giá trị 1000 sẽ bỏ qua các truy vấn trả về ít hơn 1000 hàng giá trị.

Các biến này có thể được đặt trong tệp cấu hình MySQL, động thông qua MySQL GUI hoặc dòng lệnh MySQL. Nếu các biến được chỉ định trong tệp cấu hình, máy chủ sẽ đặt chúng vào lần khởi động tiếp theo. Thông thường, tệp này được đặt tại / etc, / usr, /etc/my.cnf hoặc /etc/mysql/my.cnf. Dưới đây là các lệnh để tìm tệp cấu hình (đôi khi bạn nên mở rộng tìm kiếm của mình sang các thư mục gốc khác):

Tìm / etc -name my.cnf find / usr -name my.cnf

Khi bạn tìm thấy tệp, hãy thêm các biến bắt buộc trong phần:

; … Slow-query-log \u003d 1 slow-query-log-file \u003d /var/log/mysql/localhost-slow.log long_query_time \u003d 1 log-queries-not-using-indexes; không có giá trị ở đây

Các thay đổi sẽ chỉ có hiệu lực vào lần tiếp theo bạn khởi động MySQL, nếu bạn cần thay đổi động các tham số, hãy sử dụng các phương pháp đặt biến khác:

Mysql\u003e SET TOÀN CẦU slow_query_log \u003d "BẬT"; mysql\u003e SET GLOBAL slow_query_log_file \u003d "/var/log/mysql/localhost-slow.log"; mysql\u003e ĐẶT TOÀN CẦU log_queries_not_using_indexes \u003d "BẬT"; mysql\u003e SET SESSION long_query_time \u003d 1; mysql\u003e SET SESSION min_examined_row_limit \u003d 100;

Bạn có thể kiểm tra giá trị của các biến như sau:

Mysql\u003e HIỂN THỊ CÁC BIẾN TẦN TOÀN CẦU NHƯ "slow_query_log"; mysql\u003e HIỂN THỊ CÁC BIẾN ĐỔI CỦA PHẦN NHƯ "long_query_time";

Nhược điểm chính của cài đặt động là các giá trị sẽ bị mất khi khởi động hệ thống. Bạn nên chỉ định các tham số quan trọng trong cấu hình MySQL.

Ghi chú: Cú pháp để cài đặt động các tham số bằng lệnh SET và sử dụng tệp cấu hình hơi khác nhau, ví dụ: slow_query_log / slow-query-log. Bạn sẽ tìm thấy mô tả đầy đủ về cú pháp trong tài liệu DBMS chính thức. Định dạng Option-File được sử dụng cho tệp cấu hình, Tên biến hệ thống - tên biến khi thiết lập giá trị động.

Tạo dữ liệu để lập hồ sơ truy vấn

Chúng tôi đã xem xét các điểm chính của cài đặt cấu hình, bây giờ chúng tôi sẽ tạo các truy vấn mà chúng tôi quan tâm. Ví dụ này được sử dụng trên máy chủ MySQL đang chạy mà không có bất kỳ cài đặt nhật ký sơ bộ nào. Có thể chạy các truy vấn mẫu thông qua MySQL GUI và sử dụng các công cụ lệnh của DBMS. Khi theo dõi nhật ký các yêu cầu chậm, hai cửa sổ có kết nối thường được mở: một cửa sổ để chạy các truy vấn, cửa sổ còn lại để xem nhật ký.

$\u003e mysql -u -p mysql\u003e TẠO CƠ SỞ DỮ LIỆU profile_sampling; mysql\u003e SỬ DỤNG profile_sampling; mysql\u003e CREATE TABLE người dùng (id TINYINT PRIMARY KEY AUTO_INCREMENT, tên VARCHAR (255)); mysql\u003e CHÈN VÀO người dùng (tên) GIÁ TRỊ ("Walter"), ("Skyler"), ("Jesse"), ("Hank"), ("Walter Jr."), ("Marie"), ("Saul "), (" Gustavo "), (" Hector "), (" Mike "); mysql\u003e SET TOÀN CẦU slow_query_log \u003d 1; mysql\u003e SET GLOBAL slow_query_log_file \u003d "/var/log/mysql/localhost-slow.log"; mysql\u003e SET TOÀN CẦU log_queries_not_using_indexes \u003d 1; mysql\u003e SET long_query_time \u003d 10; mysql\u003e SET min_examined_row_limit \u003d 0;

Bây giờ chúng tôi có một cơ sở dữ liệu với dữ liệu thử nghiệm. Chúng tôi bắt đầu lập hồ sơ, nhưng chúng tôi cố tình đặt thời gian phản hồi và số lượng dòng thành nhỏ. Để xem nhật ký, hãy sử dụng lệnh:

Cd / var / log / mysql ls -l

Theo ý tưởng, tệp nhật ký nên chưa tồn tại, vì chúng tôi chưa thực hiện truy vấn đến cơ sở dữ liệu. Nếu nó tồn tại, điều đó có nghĩa là hồ sơ đã được định cấu hình trước đó và điều này có thể làm sai lệch kết quả của ví dụ. Chạy trong bảng điều khiển:

Mysql\u003e SỬ DỤNG profile_sampling; mysql\u003e CHỌN * TỪ người dùng WHERE id \u003d 1;

Truy vấn của chúng tôi sử dụng chỉ mục Khóa chính từ bảng. Yêu cầu hoạt động rất nhanh bằng cách sử dụng chỉ mục, vì vậy nó sẽ không được phản ánh trong nhật ký. Xin lưu ý rằng không nên tạo tệp nhật ký.

Bây giờ làm như sau:

Mysql\u003e CHỌN * TỪ người dùng WHERE name \u003d "Jesse";

Chúng tôi chưa sử dụng các chỉ mục ở đây. Bây giờ chúng ta sẽ thấy yêu cầu này trong nhật ký:

Sudo cat /var/log/mysql/localhost-slow.log # Time: 140322 13:54:58 # User @ Host: root @ localhost # Query_time: 0,000303 Lock_time: 0,000090 Rows_sent: 1 Rows_examined: 10 use profile_sampling; ĐẶT dấu thời gian \u003d 1395521698; CHỌN * TỪ người dùng WHERE name \u003d "Jesse";

Hãy lấy một ví dụ khác. Tăng thanh cho số dòng trong câu trả lời của bạn và chạy truy vấn sau:

Mysql\u003e SET min_examined_row_limit \u003d 100; mysql\u003e CHỌN * TỪ người dùng WHERE name \u003d "Walter";

Yêu cầu sẽ không được phản ánh trong nhật ký, vì chúng tôi đã không vượt quá 100 dòng trong phản hồi cho yêu cầu.

Ghi chú: Nếu dữ liệu không được hiển thị trong nhật ký, thì trước tiên cần xem xét các yếu tố sau. Đầu tiên là quyền đối với thư mục chứa tệp nhật ký. Nhóm và người dùng phải phù hợp với người dùng mysqld, quyền phải là - chmod 755. Thứ hai, cấu hình có thể đã được định cấu hình trước đó. Xóa bất kỳ giá trị biến cấu hình hiện có nào khỏi tệp cấu hình và khởi động lại máy chủ hoặc đặt biến động. Nếu bạn đã sử dụng phương thức động, hãy đăng xuất và đăng nhập lại vào bảng điều khiển MySQL.

Phân tích dữ liệu hồ sơ truy vấn

Hãy xem xét ví dụ trên:

# Time: 140322 13:54:58 # User @ Host: root @ localhost # Query_time: 0.000303 Lock_time: 0.000090 Rows_sent: 1 Rows_examined: 10 use profile_sampling; ĐẶT dấu thời gian \u003d 1395521698; CHỌN * TỪ người dùng WHERE name \u003d "Jesse";

Ở đây chúng ta thấy:

  • Thời gian khi yêu cầu được bắt đầu
  • Người dùng đã hoàn thành yêu cầu
  • Yêu cầu giờ mở cửa
  • Thời lượng chặn
  • Số hàng đã chọn
  • Số hàng được phân tích cú pháp

Dữ liệu này rất hữu ích, vì với sự trợ giúp của nó, chúng tôi có thể tìm và loại bỏ nguyên nhân làm chậm hệ thống. Ngoài ra, một nhà phát triển hoặc quản trị viên MySQL sẽ luôn có thể thấy các truy vấn vấn đề và tôi muốn lưu ý rằng việc tìm chúng ở đây nhanh hơn nhiều so với việc nghiên cứu mã ứng dụng. Với cấu hình dài hạn, bạn có thể theo dõi các điều kiện hoạt động ở tốc độ thấp.

Sử dụng mysqldumpslow

Nhật ký liên tục ghi dữ liệu, theo quy luật, nó ghi nhiều hơn những gì được đọc từ nó. Với kích thước nhật ký lớn, việc đọc nó trở nên khó khăn. MySQL bao gồm một công cụ gọi là mysqldumpslow để giúp duy trì tính toàn vẹn của nhật ký. Bản thân chương trình được kết hợp với MySQL (trên hệ thống Linux). Để sử dụng nó, hãy chạy lệnh được yêu cầu và chuyển nó đường dẫn đến tệp nhật ký:

Sudo mysqldumpslow -t 5 -s tại /var/log/mysql/localhost-slow.log

Có một số tùy chọn để giúp tùy chỉnh đầu ra lệnh. Trong ví dụ dưới đây, chúng ta sẽ thấy năm yêu cầu gần đây nhất được sắp xếp theo thời lượng trung bình. Nhờ đó, việc đọc nhật ký trở nên thuận tiện hơn rất nhiều. (đầu ra được sửa đổi để hiển thị giá trị thực trong nhật ký):

Đếm: 2 Thời gian \u003d 68,34 giây (136 giây) Khóa \u003d 0,00 giây (0 giây) Hàng \u003d 39892974,5 (79785949), root @ localhost CHỌN PL.pl_title, P.page_title TỪ trang P INNER THAM GIA liên kết trang PL ON PL.pl_namespace \u003d P.page_namespace WHERE P.page_namespace \u003d N ...

Những gì chúng ta thấy:

  • Đếm - số mục nhập trong nhật ký
  • Thời gian - trung bình và tổng thời gian yêu cầu
  • Khóa - thời gian khóa bàn
  • Hàng - Số hàng đã chọn

Lệnh loại trừ dữ liệu truy vấn số và chuỗi, tức là các truy vấn có cùng mệnh đề WHERE sẽ được coi là giống nhau. Nhờ công cụ này, bạn không phải liên tục xem lại nhật ký. Do số lượng lớn các tham số lệnh, bạn có thể sắp xếp đầu ra theo ý muốn. Ngoài ra còn có các sự phát triển của bên thứ ba với chức năng tương tự, ví dụ: pt-truy vấn-thông báo.

Phân tích các yêu cầu

Có một công cụ nữa đáng chú ý, cho phép bạn chia nhỏ các truy vấn phức tạp. Thông thường, bạn phải lấy một truy vấn từ nhật ký, và sau đó chạy nó trực tiếp trong bảng điều khiển MySQL. Trước tiên, bạn cần kích hoạt cấu hình và sau đó thực hiện truy vấn:

Mysql\u003e SET SESSION profiling \u003d 1; mysql\u003e SỬ DỤNG profile_sampling; mysql\u003e CHỌN * TỪ người dùng WHERE name \u003d "Jesse"; mysql\u003e HIỂN THỊ TÀI LIỆU;

Sau khi bật cấu hình, SHOW PROFILES sẽ hiển thị bảng liên kết Query_ID và biểu thức SQL. Tìm Query_ID tương ứng và chạy truy vấn sau (thay thế # bằng Query_ID của bạn):

Mysql\u003e SELECT * FROM INFORMATION_SCHEMA.PROFILING WHERE QUERY_ID \u003d #;

Ví dụ đầu ra:

SEQ STATE DURATION 1 bắt đầu 0,000046 2 kiểm tra quyền 0,000005 3 mở bảng 0,000036

TIỂU BANG - một bước trong quá trình thực hiện một yêu cầu, DURATION - thời lượng bước tính bằng giây. Công cụ này không được sử dụng thường xuyên, nhưng đôi khi nó có thể cực kỳ hữu ích trong việc xác định nguyên nhân làm chậm tốc độ yêu cầu.

Mô tả chi tiết cột:

Mô tả chi tiết các bước:

Ghi chú: Công cụ này không nên được sử dụng trong chế độ hoạt động của máy chủ, ngoại trừ để phân tích các yêu cầu cụ thể.

Hiệu suất nhật ký truy vấn chậm

Câu hỏi cuối cùng là việc lập hồ sơ ảnh hưởng đến hiệu suất tổng thể của máy chủ như thế nào. Trong chế độ sản xuất của máy chủ, bạn có thể sử dụng ghi nhật ký như vậy một cách khá an toàn, nó sẽ không ảnh hưởng đến CPU hoặc I / O. Tuy nhiên, điều đáng chú ý là kích thước của tệp nhật ký, nó không nên trở nên quá lớn. Tôi cũng muốn lưu ý từ kinh nghiệm rằng việc đặt giá trị của biến long_query_time có giá trị từ 1 giây trở lên.

Quan trọng: không sử dụng công cụ lập hồ sơ - SET profiling \u003d 1 - để ghi lại tất cả các truy vấn, tức là không nên sử dụng biến General_log trong chế độ sản xuất và chịu tải nặng.

Phần kết luận

Hồ sơ truy vấn có thể giúp bạn rất nhiều trong việc cô lập truy vấn vấn đề và đánh giá hiệu suất tổng thể. Ngoài ra, một nhà phát triển có thể tìm hiểu cách hoạt động của các truy vấn MySQL trong ứng dụng của mình. Công cụ mysqldumpslow giúp bạn xem và xử lý nhật ký truy vấn. Sau khi xác định các truy vấn có vấn đề, bạn vẫn phải điều chỉnh chúng để có hiệu suất tối đa.

Ý tưởng

Nhật ký máy chủ (tệp nhật ký, nhật ký máy chủ) - các tệp được lưu trữ trên máy chủ, chứa thông tin hệ thống của máy chủ, cũng như ghi lại tất cả các dữ liệu có thể có về người truy cập tài nguyên web.

Nhật ký được quản trị viên hệ thống sử dụng để phân tích khách truy cập, nghiên cứu các kiểu hành vi của một số nhóm người dùng nhất định, cũng như thu thập nhiều thông tin khác nhau về họ, chẳng hạn như: trình duyệt được sử dụng, địa chỉ IP, dữ liệu về vị trí địa lý của khách hàng và hơn thế nữa. Ngoài việc phân tích, bằng cách này, bạn có thể tìm hiểu về việc truy cập trái phép vào trang web, chính xác hơn là tìm ra chính xác nó được sản xuất bởi ai và truyền dữ liệu về trường hợp này cho các cơ quan có liên quan.

Dữ liệu trong tệp nhật ký, ở dạng thuần túy, sẽ không thể hiểu được đối với người dùng bình thường, những người sẽ thấy trong tất cả những thứ này chỉ là một tập hợp các ký tự theo một thứ tự khó hiểu. Nhưng đối với sysadmins và các nhà phát triển web, đây là văn bản khá dễ đọc và thông tin khá hữu ích.


Chuỗi các sự kiện

Mỗi khi khách hàng truy cập tài nguyên web, một số sự kiện được kích hoạt cùng một lúc, trình tự mà chúng ta sẽ nói đến.

1. Thực hiện yêu cầu trang. Khi bạn nhập địa chỉ vào dòng trình duyệt, hoặc khi bạn nhấp vào một liên kết web đang hoạt động, chẳng hạn như từ trang kết quả tìm kiếm, trình duyệt sẽ tìm kiếm và kết nối với máy chủ nơi đặt trang đó và đưa ra yêu cầu. Đồng thời, nó truyền các thông tin sau đến máy chủ:
- địa chỉ IP của máy khách yêu cầu trang (trong trường hợp sử dụng máy chủ proxy, địa chỉ IP của proxy của bạn);
- địa chỉ của trang Internet mà người dùng yêu cầu (địa chỉ IP);
- ngày và giờ chính xác khi yêu cầu được đưa ra;
- dữ liệu về vị trí thực của máy khách (nếu sử dụng máy chủ proxy thì địa chỉ proxy thực);
- thông tin về trình duyệt được khách hàng sử dụng (tên, phiên bản, v.v.);
- dữ liệu về trang web mà khách hàng được chuyển từ đó.

2. Chuyển dữ liệu được yêu cầu. Dữ liệu được yêu cầu (trang web, tệp, cooki, v.v.) được chuyển từ máy chủ đến máy tính của người dùng.

3. Ghi vào nhật ký máy chủ. Sau cùng, một bản ghi được viết, cho biết tất cả dữ liệu đã xuất hiện trong hai sự kiện gần đây nhất. Đây là tất cả thông tin được gửi trong đoạn đầu tiên, cũng như thông tin về dữ liệu được truyền.

Cách xem nhật ký máy chủ

Nhật ký tệp, được lưu trữ trong một tệp access.log bất kể bạn đang sử dụng loại máy chủ web nào (Apache, Nginx, máy chủ proxy mực, v.v.) Tệp này là tài liệu văn bản, trên mỗi dòng, một cuộc gọi được ghi lại. Ghi các định dạng trong access.log khá ít, nhưng phổ biến nhất là kết hợp, trong đó bản ghi trông như thế này và trình tự là:

Mã:% h% l% u% t \\ "% r \\"%\u003e s% b \\ "% (Người giới thiệu) i \\" \\ "% (Tác nhân người dùng) i \\"
Ở đâu:

% h - máy chủ / địa chỉ IP mà từ đó yêu cầu được thực hiện;
% t - thời gian của yêu cầu đến máy chủ và múi giờ của máy chủ;
% r - phiên bản, nội dung và loại yêu cầu;
% s - Mã trạng thái HTTP;
% b - số byte được gửi bởi máy chủ;
% (Người giới thiệu) - Nguồn URL của yêu cầu;
% (Đại lý người dùng) - Tiêu đề HTTP với thông tin về yêu cầu (ứng dụng khách, ngôn ngữ, v.v.);
% (Tổ chức) - tên của Máy chủ ảo được sử dụng.

ở dạng hoàn chỉnh, dòng này trông giống như sau:

127.0.0.1 - - "GET /index.php HTTP / 1..0 (tương thích; MSIE 7.0; Windows NT 5.1)"

Bạn sẽ mất khá nhiều thời gian và công sức để đọc nhật ký theo cách thủ công. Do đó, các quản trị viên web có kinh nghiệm sử dụng phần mềm đặc biệt được gọi là "Log File Analyzers". Họ phân tích tất cả dữ liệu khá khó đọc bởi con người và tạo ra dữ liệu có cấu trúc. Đây là các chương trình như: Analog, WebAnalizer, Webalizer, Awstats, Webtrends, v.v. Có khá nhiều loại phần mềm đặc biệt, trong số đó có cả chương trình trả phí và miễn phí. Vì vậy, tôi chắc chắn rằng mọi người sẽ tìm thấy một cái gì đó theo ý thích của họ.

Nơi tìm nhật ký trang web

Nếu bạn có một máy chủ lưu trữ thông thường, thì rất có thể bạn sẽ phải viết thư cho nhà cung cấp dịch vụ lưu trữ của mình và yêu cầu nhật ký từ họ. Ngoài ra, khá thường xuyên, bạn có thể yêu cầu chúng thông qua bảng điều khiển lưu trữ. Các chủ nhà khác nhau làm điều đó khác nhau. Ví dụ: để yêu cầu từ nhà cung cấp dịch vụ lưu trữ của tôi, chỉ cần thực hiện một cú nhấp chuột vào trang chính của bảng điều khiển:


Nếu bạn có quyền truy cập vào các thư mục hệ thống máy chủ, thì bạn có thể tìm thấy các bản ghi tại / etc / httpd / logs / access_log 99 trường hợp trên 100 trường hợp.

Lỗi nhật ký lỗi. Nhật ký

Error.log - một tệp trong đó các bản ghi cũng được lưu giữ. Nhưng không phải khách truy cập, mà là lỗi xảy ra trên máy chủ. Như với access.log, mỗi dòng của tệp chịu trách nhiệm cho một lỗi đã xảy ra. Việc ghi lại được thực hiện có tính đến các thông tin như: ngày và thời gian chính xác của lỗi, địa chỉ IP của lỗi được phát hành, loại lỗi, cũng như lý do xảy ra lỗi.

Phần kết luận

Nhật ký là công cụ khá mạnh mẽ và nhiều thông tin mà bạn cần làm việc. Nhưng ngày nay, chúng đang được thay thế bởi các công cụ như Yandex.Metrica, Google Analytics, v.v., do đó đơn giản hóa cuộc sống của chúng ta. Tuy nhiên, nếu bạn có kế hoạch phát triển, trưởng thành và học hỏi điều gì đó mới, tôi chắc chắn khuyên bạn nên tìm hiểu kỹ hơn về chủ đề này.