Rumah >pembangunan bahagian belakang >masalah PHP >Apakah pertanyaan lambat php mysql?

Apakah pertanyaan lambat php mysql?

藏色散人
藏色散人asal
2021-11-10 09:49:022410semak imbas

php mysql slow query merujuk kepada merekodkan pernyataan SQL yang berjalan agak perlahan dalam log Menghidupkan log pertanyaan perlahan membolehkan MySQL merekodkan pertanyaan yang melebihi masa yang ditetapkan, ia boleh lebih tepat. Pengoptimuman prestasi sistem pangkalan data yang baik.

Apakah pertanyaan lambat php mysql?

Persekitaran pengendalian artikel ini: sistem Windows 7, PHP versi 7.1, komputer DELL G3

Apakah itu php mysql slow pertanyaan?

Pertanyaan lambat MySQL merekodkan pernyataan SQL yang berjalan perlahan dalam log Fungsi ini perlu dihidupkan untuk digunakan.

1. Pengenalan

Menghidupkan log pertanyaan yang perlahan membolehkan MySQL merekodkan pertanyaan yang melebihi masa yang ditetapkan Dengan mencari dan menganalisis kesesakan prestasi, prestasi sistem pangkalan data boleh dioptimumkan dengan lebih baik.

2. Pengenalan parameter

slow_query_log status buka pertanyaan perlahan

slow_query_log_file Lokasi di mana log pertanyaan perlahan disimpan (direktori ini memerlukan kebenaran menulis akaun MySQL yang dijalankan, biasanya ditetapkan kepada direktori storan data MySQL)

long_query_time Berapa saat yang diperlukan oleh pertanyaan sebelum merakam, lalainya ialah 10 saat

3 Dayakan pertanyaan perlahan

(1) Lihat parameter berkaitan pertanyaan perlahan

mysql> show variables like 'slow_query%';
+---------------------------+-----------------------------------+
| Variable_name             | Value                              |
+---------------------------+-----------------------------------+
| slow_query_log            | OFF                                |
| slow_query_log_file       | /usr/local/var/mysql/slow.log          |
+---------------------------+-----------------------------------+
mysql> show variables like 'long_query_time';
+-----------------+-----------+
| Variable_name   | Value     |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+

(2) Kaedah tetapan

Kaedah 1: Tetapan pembolehubah global

Tetapkan pembolehubah global slow_query_log kepada status "HIDUP"

mysql> set global slow_query_log='ON';

Tetapkan lokasi di mana log pertanyaan perlahan disimpan

mysql> set global slow_query_log_file='/usr/local/var/mysql/slow.log ';

Tetapkan masa pertanyaan perlahan dan rekod pertanyaan jika melebihi 1 saat

mysql> set global long_query_time=1;

Kaedah 2: Tetapan fail konfigurasi

Ubah suai konfigurasi Fail my.cnf, tambah

[mysqld]
slow_query_log = ON
slow_query_log_file = /usr/local/var/mysql/slow.log 
long_query_time = 1

di bawah [mysqld] (3) Mulakan semula perkhidmatan MySQL

service mysqld restart

( 4) Analisis log pertanyaan perlahan

Ambil bahagian log pertanyaan perlahan:

# Time: 180918 19:06:21
# User@Host: proxy[proxy] @  [192.168.0.16]  Id: 6707197
# Query_time: 1.015429  Lock_time: 0.000116 Rows_sent: 1  Rows_examined: 44438
SET timestamp=1537268781;
select
        id, user_id, device_uuid, bd_client_id, bd_user_id, bd_tag,
        nodisturb_mode, nodisturb_start_time,
        nodisturb_end_time, binding_time, device_os_type, app_type, state
        from app_mobile_device
        where user_id = '78436'
            and app_type = 'YGY'
        order by binding_time desc;
# User@Host: proxy[proxy] @  [192.168.0.16]  Id: 6707236
# Query_time: 1.021662  Lock_time: 0.000083 Rows_sent: 1  Rows_examined: 44438
SET timestamp=1537268781;
select
        id, user_id, device_uuid, bd_client_id, bd_user_id, bd_tag,
        nodisturb_mode, nodisturb_start_time,
        nodisturb_end_time, binding_time, device_os_type, app_type, state
        from app_mobile_device
        where user_id = '14433'
            and app_type = 'YGY'
        order by binding_time desc;

Di sini anda boleh lihat:

Query_time (masa pertanyaan pertanyaan lambat pernyataan) melebihi set 1s,

Rows_sent (Pertanyaan perlahan mengembalikan rekod) Hanya 1 rekod dikembalikan di sini

Rows_examined (bilangan baris yang diimbas oleh pertanyaan perlahan) 44438 -> dilihat dari sini bahawa masalahnya adalah besar

Sekarang letakkan SQL ini Letakkan pernyataan ke dalam pangkalan data untuk pelaksanaan, dan gunakan EXPLAIN untuk menganalisis rancangan pelaksanaan

EXPLAIN                                
select                                 
        id, user_id, device_uuid, bd_client_id, bd_user_id, bd_tag,                        
        nodisturb_mode, nodisturb_start_time,                          
        nodisturb_end_time, binding_time, device_os_type, app_type, state                          
        from app_mobile_device                         
        where user_id = '78436'                            
            and app_type = 'YGY'                       
        order by binding_time desc;

Hasil pertanyaan ialah:

Apakah pertanyaan lambat php mysql?

Terangkan parameter:

Apakah pertanyaan lambat php mysql?

Anda boleh temui di sini: baris ialah bilangan baris yang ditanya dan lebih daripada 40,000 baris telah disoal, jadi ia pasti perlahan.

Oleh kerana terdapat beberapa syarat di sini dan tiada indeks digunakan, kami hanya boleh menambah indeks

Tambah indeks berbilang lajur biasa di sini kerana jadual ini pada mulanya direka Berlaku kesilapan, mengakibatkan. dalam data pendua dan indeks unik tidak boleh ditetapkan.

ALTER  TABLE  app_mobile_device  ADD  INDEX user_app_type_only (  `user_id` ,`app_type` )

Indeks telah ditetapkan, mari lihat rancangan pelaksanaan SQL sebentar tadi.

Apakah pertanyaan lambat php mysql?

Anda boleh mendapati bahawa bilangan baris yang disemak telah menurun dengan ketara.

Pada ketika ini, penggunaan dan pengoptimuman pertanyaan lambat pada asasnya selesai.

Pembelajaran yang disyorkan: "Tutorial Video PHP"

Atas ialah kandungan terperinci Apakah pertanyaan lambat php 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