Artikel ini akan membawa anda memahami pertanyaan perlahan dalam MySQL, memperkenalkan kaedah mendayakan log pertanyaan perlahan dan menganalisis pertanyaan lambat saya harap ia akan membantu semua orang.
Mysql mempunyai fungsi yang boleh merekodkan rekod lambat pertanyaan jangka panjang Tempoh masa tertentu boleh dikonfigurasikan sendiri, tetapi pertanyaan lambat tidak semestinya SQL buruk dan mungkin juga dipengaruhi oleh Ia juga merupakan alat analisis prestasi yang biasa digunakan yang mempengaruhi pertanyaan lain atau disebabkan oleh had sumber sistem. [Cadangan berkaitan: tutorial video mysql]
Log pertanyaan perlahan MySQL dikawal oleh long_query_time
dan min_examined_row_limit
yang pertama bermakna jika pertanyaan mengambil masa lebih daripada beberapa saat, MySQL Pelayan merekodkan ini ke dalam fail log pertanyaan perlahan apabila log pertanyaan perlahan didayakan.
Untuk mendayakan log pertanyaan perlahan dalam MySQL, sila ikut langkah berikut:
Pertama lihat log pertanyaan perlahan dalam MySQL Status pertanyaan.
MariaDB [(none)]> show variables like '%slow%'; +------------------------------+--------------------------------------------------------------------------------------------------------------------------------------+ | Variable_name | Value | +------------------------------+--------------------------------------------------------------------------------------------------------------------------------------+ | log_slow_admin_statements | ON | | log_slow_disabled_statements | sp | | log_slow_filter | admin,filesort,filesort_on_disk,filesort_priority_queue,full_join,full_scan,query_cache,query_cache_miss,tmp_table,tmp_table_on_disk | | log_slow_rate_limit | 1 | | log_slow_slave_statements | ON | | log_slow_verbosity | | | slow_launch_time | 2 | | slow_query_log | OFF | | slow_query_log_file | hxl-slow.log | +------------------------------+--------------------------------------------------------------------------------------------------------------------------------------+ 9 rows in set (0.001 sec)
Pertama lihat status slow_query_log
, yang mewakili sama ada log pertanyaan perlahan didayakan. Nilai boleh 0 atau OFF untuk melumpuhkan, 1 atau ON untuk mendayakan. Destinasi output log dikawal oleh pembolehubah sistem log_output
Jika nilainya ialah NONE
, walaupun log pertanyaan perlahan didayakan, ia tidak akan ditulis pada log Nilai pembolehubah log_output
adalah seperti berikut:
mysql.general_log
dan pertanyaan perlahan ke jadual mysql.slow_log
. dan general_log_file
dan slow_query_log_file
mewakili nama fail log pertanyaan dan log pertanyaan perlahan. Pembolehubah ini boleh ditetapkan apabila pelayan dimulakan atau dijalankan.
Mulakan log pertanyaan perlahan
Fungsi log pertanyaan perlahan dimatikan secara lalai dalam MySQL, jadi untuk menghidupkan ciri ini, kita perlu menetapkan slow_query_log
kepada HIDUP, seperti berikut Papar.
SET GLOBAL slow_query_log = 1;
Tetapkan tempoh rakaman
long_query_time
Pembolehubah menunjukkan bahawa hanya masa berjalan melebihi nilai ini akan direkodkan, seperti yang ditunjukkan di bawah, masa perubahan ialah 5 saat, Ia lalai kepada 10 saat dan nilai minimum ialah 0.
SET GLOBAL long_query_time = 5;
Ubah suai lokasi output
Secara lalai, fail log pertanyaan perlahan terletak di /var/lib/mysql/hostname-slow.log
, kami juga boleh menetapkan lokasi lain menggunakan slow_query_log_file
pembolehubah.
SET GLOBAL slow_query_log_file = '/var/log/mysql/mysql-slow.log';
Tulis log pertanyaan perlahan pada jadual
Log pertanyaan perlahan juga boleh ditulis pada jadual slow_log
dengan mengubah suainya seperti yang dinyatakan di ataslog_output
Pembolehubah sistem ialah TABLE
dan operasinya adalah seperti berikut:
SET GLOBAL log_output='TABLE';
Pembolehubah berkaitan log pertanyaan perlahan
日志记录后,我们还需要分析这些日志,找出影响系统的查询,MySQL提供了一个名为mysqldumpslow的工具,可以简单的显示结果,只需要把日志路径传递给他即可,如下:
# mysqldumpslow -a mysql-slow.log Reading mysql slow query log from mysql-slow.log Count: 1 Time=0.00s (0s) Lock=0.00s (0s) Rows_sent=21.0 (21), Rows_examined=21.0 (21), Rows_affected=0.0 (0), root[root]@localhost show databases Count: 1 Time=0.00s (0s) Lock=0.00s (0s) Rows_sent=2.0 (2), Rows_examined=2.0 (2), Rows_affected=0.0 (0), root[root]@localhost select * from users Count: 1 Time=0.00s (0s) Lock=0.00s (0s) Rows_sent=1.0 (1), Rows_examined=0.0 (0), Rows_affected=0.0 (0), root[root]@localhost select @@version_comment limit 1 Count: 1 Time=0.00s (0s) Lock=0.00s (0s) Rows_sent=1.0 (1), Rows_examined=0.0 (0), Rows_affected=0.0 (0), root[root]@localhost
他的参数如下
-s ,按照什么方式起来排序。默认at,也就是按照平均查询时间来排序。都是按照倒序排列。
al: average lock time 平均锁定时间
ar: average rows sent 平均返回行数
at: average query time 平均查询时间
c: count 总执行次数
l: lock time 总锁定时间
r: rows sent 总返回行数
t: query time 总查询时间
-t ,show the top n queries,显示前多少名的记录
-a ,默认不开启这个选项。mysqldumpslow将相似的SQL的值(字符串或者数字)替换为N,开启该选项,则显示真实值。不开启该选项,有点类似于Oracle的绑定变量的记录。\
-g ,类似于grep命令,过滤出需要的信息。如,只查询A表的慢查询记录。\
-l ,总时间中包含锁定时间
原文地址:https://juejin.cn/post/6993221989175394311
更多编程相关知识,请访问:编程视频!!
Atas ialah kandungan terperinci Bagaimana untuk mendayakan dan menganalisis log pertanyaan perlahan dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!