Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk membolehkan log pertanyaan perlahan dalam mysql

Bagaimana untuk membolehkan log pertanyaan perlahan dalam mysql

PHPz
PHPzasal
2023-04-20 10:12:007889semak imbas

Dalam penggunaan harian pangkalan data MySQL, untuk meningkatkan kelajuan dan kecekapan pertanyaan, kami biasanya menggunakan indeks dan pengoptimum. Tetapi kadangkala, kita juga perlu mengetahui pelaksanaan khusus pernyataan pertanyaan untuk mencari masalah dengan lebih baik dan mengoptimumkan pangkalan data dengan lebih tepat. Pada masa ini, anda perlu menggunakan fungsi Log Pertanyaan Perlahan MySQL.

Log pertanyaan perlahan boleh merekodkan semua pernyataan SQL yang masa pelaksanaannya melebihi ambang tertentu supaya kami boleh menyelesaikan masalah dan mengoptimumkan. Artikel ini akan memperkenalkan cara untuk mendayakan log pertanyaan perlahan dalam pangkalan data MySQL, dan menerangkan secara terperinci parameter yang berkaitan dan kaedah pengoptimuman log pertanyaan perlahan.

1. Dayakan log pertanyaan perlahan

  1. Ubah suai fail konfigurasi

Tambah konfigurasi berikut pada fail konfigurasi MySQL my.cnf atau my.ini :

slow_query_log = 1 #开启慢查询日志
slow_query_log_file = /var/log/mysql/mysql-slow.log #日志文件路径
long_query_time = 3 #超过3s即为慢查询
log_queries_not_using_indexes = 1 #记录未使用索引的查询

Antaranya, slow_query_log = 1 bermaksud menghidupkan log pertanyaan perlahan, slow_query_log_file menentukan laluan dan nama fail log pertanyaan perlahan, long_query_time bermaksud berapa saat melebihi masa pelaksanaan pertanyaan sebelum ia dianggap sebagai pertanyaan perlahan, log_queries_not_using_indexes bermaksud sama ada hendak log Pertanyaan yang tidak menggunakan indeks.

  1. Gunakan arahan SET untuk mengubah suai konfigurasi secara dinamik

Selain mengubah suai fail konfigurasi, kami juga boleh mengubah suai parameter secara dinamik melalui arahan SET. Sebagai contoh, kita boleh mendayakan log pertanyaan perlahan dalam baris arahan MySQL melalui pernyataan berikut:

mysql> SET global slow_query_log = 1;
mysql> SET global slow_query_log_file = '/var/log/mysql/mysql-slow.log';
mysql> SET global long_query_time = 3;
mysql> SET global log_queries_not_using_indexes = 1;

Dalam kod di atas, SET global bermakna ia akan berkuat kuasa secara global, iaitu, semua sambungan akan gunakan parameter ini.

Sudah tentu, jika anda hanya mahu menetapkan parameter sambungan setempat, anda boleh menggunakan arahan SET SESSION. Contohnya:

mysql> SET SESSION slow_query_log = 1;
mysql> SET SESSION slow_query_log_file = '/var/log/mysql/mysql-slow.log';
mysql> SET SESSION long_query_time = 3;
mysql> SET SESSION log_queries_not_using_indexes = 1;

2. Optimumkan parameter konfigurasi log pertanyaan perlahan

  1. fail_log_permintaan_lambat

Sebelum menghidupkan log pertanyaan perlahan, kita perlu untuk memastikan bahawa Direktori yang ditentukan di mana fail log terletak sudah wujud dan mempunyai kebenaran menulis. Jika direktori tidak wujud, anda perlu mencipta direktori itu terlebih dahulu.

Kita boleh menggunakan arahan berikut untuk melihat direktori kerja semasa proses MySQL:

mysql> SHOW VARIABLES LIKE 'datadir';
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| datadir       | /var/lib/mysql/ |
+---------------+-----------------+
1 row in set (0.00 sec)

Seperti yang anda boleh lihat daripada contoh di atas, direktori kerja proses MySQL ialah / var/lib/mysql/, Terdapat fail slow.log dalam direktori log dalam direktori ini. Oleh itu, jika kita ingin menulis log pertanyaan perlahan pada fail ini, kita hanya perlu menambah konfigurasi berikut pada my.cnf:

slow_query_log_file = /var/lib/mysql/logs/slow.log
  1. long_query_time

long_query_time Nilai lalai ialah 10 saat, iaitu, hanya pernyataan pertanyaan yang mengambil masa lebih daripada 10 saat untuk dilaksanakan akan direkodkan dalam log pertanyaan perlahan. Dalam keadaan biasa, masa ini mungkin agak lama. Kami boleh menetapkannya kepada masa yang lebih singkat berdasarkan keadaan sebenar untuk menemui pertanyaan perlahan dengan lebih cepat.

Sebab untuk melaksanakan pernyataan pertanyaan yang lama adalah selalunya kerana pernyataan itu sendiri tidak cekap dan biasanya perlu dioptimumkan. Dalam penggunaan sebenar, kami boleh mengurangkan masa long_query_time secara beransur-ansur untuk menemui kenyataan yang kurang cekap, mengoptimumkannya dan meningkatkan kecekapan pertanyaan.

  1. log_queries_not_using_indexes

Jika parameter log_queries_not_using_indexes ditetapkan kepada 1, maka semua pertanyaan yang dilaksanakan tanpa menggunakan indeks akan dilog. Ini boleh membantu kami mengenal pasti masalah yang berpotensi dan mengoptimumkannya tepat pada masanya. Walau bagaimanapun, ini mungkin meninggalkan beberapa positif palsu kerana pertanyaan tanpa indeks adalah perkara biasa dalam beberapa kes.

Anda perlu berhati-hati apabila menggunakan parameter log_queries_not_using_indexes Adalah disyorkan untuk tidak menetapkannya sebagai pembolehubah global Anda boleh memilih untuk menetapkannya secara dinamik apabila diperlukan. Kerana jika parameter ini sentiasa dihidupkan, ia mungkin memberi kesan negatif terhadap prestasi MySQL, menyebabkan kecekapan operasi keseluruhan pangkalan data berkurangan.

3. Lihat dan analisis log pertanyaan perlahan

Apabila kami menghidupkan log pertanyaan perlahan, MySQL mula merekodkan semua pernyataan pertanyaan yang masa pelaksanaannya melebihi ambang. Kita boleh menggunakan arahan berikut untuk melihat log pertanyaan perlahan:

mysql> SHOW VARIABLES LIKE 'slow_query_log_file';
+---------------------+------------------------+
| Variable_name       | Value                  |
+---------------------+------------------------+
| slow_query_log_file | /var/lib/mysql/slow.log |
+---------------------+------------------------+
1 row in set (0.00 sec)

Seperti yang dapat dilihat daripada output di atas, laluan fail log pertanyaan perlahan semasa ialah /var/lib/mysql/slow.log.

Jika anda ingin melihat kandungan tertentu dalam log pertanyaan perlahan, anda boleh menggunakan arahan berikut:

mysql> mysqldumpslow -s t /var/lib/mysql/slow.log

Antaranya, -s bermaksud mengisih mengikut masa dan -t bermaksud hanya memaparkan 10 rekod pertama. Jika anda ingin melihat semua rekod pertanyaan, anda boleh mengalih keluar parameter -t.

4. Optimumkan log pertanyaan perlahan

Mendayakan log pertanyaan perlahan ialah cara yang sangat baik untuk membantu kami menemui dan mengoptimumkan masalah prestasi. Walau bagaimanapun, anda juga perlu memberi perhatian kepada perkara berikut dalam penggunaan sebenar:

  1. Saiz fail log pertanyaan perlahan akan terus meningkat, jadi ia perlu dibersihkan dengan kerap. Adalah disyorkan untuk menetapkan max_slowlog_size kepada nilai yang sesuai dalam my.cnf untuk mengelakkan kehabisan ruang cakera.
  2. Melog log pertanyaan lambat akan memberi kesan negatif pada prestasi MySQL, jadi disyorkan untuk hanya mendayakan pengelogan yang diperlukan dalam persekitaran pengeluaran. Biasanya, tetapkan tahap log dan hanya rekod maklumat utama.
  3. Anda boleh menggunakan alatan untuk menganalisis log pertanyaan perlahan, seperti pt-query-digest, dsb. Alat ini boleh membantu kami menemui dengan lebih baik punca pertanyaan lambat dan mengoptimumkan rancangan pelaksanaan.

Ringkasnya, ia adalah tabiat yang baik untuk membolehkan log pertanyaan lambat MySQL. Dalam persekitaran pengeluaran, kita perlu mengkonfigurasi parameter dengan teliti dan menggunakan alat yang berkaitan untuk memastikan prestasi dan kestabilan pangkalan data.

Atas ialah kandungan terperinci Bagaimana untuk membolehkan log pertanyaan perlahan dalam mysql. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn