Apakah kaedah pemantauan pangkalan data MySQL?

WBOY
Lepaskan: 2023-06-03 13:22:13
ke hadapan
1293 orang telah melayarinya

Terdapat banyak cara untuk memantau pangkalan data semasa, yang dibahagikan kepada tiga kategori: pangkalan data terbina dalam, komersial, dan sumber terbuka masing-masing mempunyai ciri tersendiri

Bagi pangkalan data mysql, kerana Aktiviti Komuniti dan kaedah pemantauannya yang tinggi adalah pelbagai. Tidak kira kaedah pemantauan yang digunakan, terasnya adalah data pemantauan Selepas mendapatkan data pemantauan yang komprehensif, ia adalah bahagian paparan yang fleksibel.

1. Bilangan sambungan (Sambungan)

1.1 Bilangan maksimum sambungan terpakai

show status like 'Max_used_connections';
Salin selepas log masuk

1.2.2. Cache ( bufferCache)

2.1. Bilangan kali tidak dibaca dari kumpulan penimbal

show status like 'Threads_connected';
Salin selepas log masuk

2.2. Bilangan kali dibaca dari kumpulan penimbal

show status like 'Innodb_buffer_pool_reads';
Salin selepas log masuk

2.3 halaman dalam kumpulan penimbal

show status like 'Innodb_buffer_pool_read_requests';
Salin selepas log masuk

2.4, Bilangan halaman percuma dalam kumpulan penimbal

show status like 'Innodb_buffer_pool_pages_total';
Salin selepas log masuk

2.5, Pengiraan kadar hit cache

show status like 'Innodb_buffer_pool_pages_free';
Salin selepas log masuk

2.6, Kadar penggunaan kumpulan cache

(1-Innodb_buffer_pool_reads/Innodb_buffer_pool_read_requests)*100%
Salin selepas log masuk

3. Kunci (kunci)

Nota: Bilangan statistik tunggu kunci adalah data kumulatif Setiap kali diperoleh, ia boleh ditolak daripada data sebelumnya untuk mendapatkan data statistik semasa

3.1. Kunci tunggu Nombor

((Innodb_buffer_pool_pages_total-Innodb_buffer_pool_pages_free)/Innodb_buffer_pool_pages_total)*100%
Salin selepas log masuk

3.2. Purata masa menunggu untuk setiap kunci

show status like 'Innodb_row_lock_waits';
Salin selepas log masuk

3.3.3.3 ialah jadual kunci. Jika kosong, bermakna tiada kunci jadual

show status like 'Innodb_row_lock_time_avg';
Salin selepas log masuk

4 Slow SQL

Nota: Apabila arahan mysqldumpslow gagal dilaksanakan, log perlahan akan disegerakkan. kepada tempatan untuk pemformatan.

4.1. Periksa sama ada suis mysql slow sql dihidupkan

show open TABLES where in_use>0
Salin selepas log masuk

4.2 Semak ambang mysql slow sql

rreee

4.3 >

show variables like 'slow_query_log'; --ON 为开启状态,OFF 为关闭状态
 
set global slow_query_log=1 -- 可进行开启
Salin selepas log masuk

4.4. Format log sql perlahan

Nota: Penyataan ini tidak boleh dilaksanakan melalui jdbc dan tergolong dalam pelaksanaan baris arahan.

Bermaksud: Memaparkan maklumat pelaksanaan 10 pernyataan SQL terpanjang 10 boleh diubah suai kepada nombor TOP. Maklumat yang dipaparkan ialah: bilangan pelaksanaan, purata masa pelaksanaan, pernyataan SQL

show variables like 'long_query_time';
 
set global long_query_time=0.1 -- 根据页面传递阈值参数,修改阈值
Salin selepas log masuk

5, pernyataan

5.1, masukkan nombor

show variables like 'slow_query_log_file';
Salin selepas log masuk

5.2, padam nombor

rreee

5.3, kemas kini kuantiti

mysqldumpslow -s at -t 10 /export/data/mysql/log/slow.log
Salin selepas log masuk

5.4, pilih kuantiti

show status like 'Com_insert';
Salin selepas log masuk

6 Throughput (Database throughput)

6.1, hantar throughput

show status like 'Com_delete';
Salin selepas log masuk

6. , menerima throughput

show status like 'Com_update';
Salin selepas log masuk

6.3, jumlah throughput

show status like 'Com_select';
Salin selepas log masuk

7, parameter pangkalan data (serverconfig)

7.1, tunjukkan pembolehubah

8. Langkah penyelesaian masalah SQL yang perlahan Apakah kaedah pemantauan pangkalan data MySQL?

Slow SQL merujuk kepada pertanyaan lambat MySQL, khususnya merujuk kepada SQL yang masa berjalannya melebihi nilai long_query_time.

Kita sering mendengar bahawa MySQL mempunyai binlog log binari, relay log geganti, buat semula log gulung balik redolog, undolog, dll. Untuk pertanyaan perlahan, terdapat juga log pertanyaan perlahan, slowlog, yang digunakan untuk merekodkan kenyataan yang masa tindak balasnya melebihi ambang dalam MySQL. Kesan SQL yang perlahan pada perniagaan pengeluaran sebenar adalah membawa maut, jadi amat penting bagi penguji untuk memantau pelaksanaan penyata SQL pangkalan data semasa proses ujian prestasi dan memberikan pendapat pengoptimuman prestasi yang tepat kepada pembangunan. Kemudian bagaimana untuk menggunakan log pertanyaan perlahan yang disediakan oleh pangkalan data Mysql untuk memantau pelaksanaan pernyataan SQL dan mencari pernyataan SQL dengan penggunaan tinggi Berikut ialah penerangan terperinci tentang langkah-langkah untuk menggunakan log pertanyaan perlahan:

8.1. Pastikan suis SQL perlahan slow_query_log dihidupkan

8.2 Tetapkan nilai domain SQL yang perlahan long_query_timeApakah kaedah pemantauan pangkalan data MySQL?

long_query_time ini digunakan untuk mentakrifkan. berapa saat lebih perlahan dianggap sebagai "pertanyaan perlahan". Ambil perhatian bahawa unit ialah Saat, saya menetapkan nilai long_query_time kepada 1 dengan melaksanakan set perintah sql long_query_time=1, iaitu, sebarang pertanyaan yang mengambil masa lebih daripada 1 saat untuk dilaksanakan dianggap sebagai pertanyaan perlahan, seperti berikut:

8.3 Lihat laluan log SQL yang perlahan Apakah kaedah pemantauan pangkalan data MySQL?

8.4 dan menganalisis log SQL perlahan melalui alat analisis sql perlahan mysqldumpslow Apakah kaedah pemantauan pangkalan data MySQL?

alat analisis pertanyaan lambat mysqldumpslow ialah mysql Ia disertakan selepas pemasangan Anda boleh menyemak perihalan parameter penggunaan melalui ./mysqldumpslow —help

.

8.4.1 Penggunaan biasa untuk mengalih keluar 10 pertanyaan perlahan yang paling banyak digunakanApakah kaedah pemantauan pangkalan data MySQL?

show status like 'Bytes_sent';
Salin selepas log masuk

Dapatkan semula 3 pertanyaan perlahan dengan masa pertanyaan paling perlahan

rreee

Nota: Keputusan analisis menggunakan mysqldumpslow tidak akan memaparkan pernyataan sql yang khusus dan lengkap, tetapi hanya struktur sql

Jika: PILIH DARI sms_send WHERE service_id=10 GROUP BY content LIMIT 0, 1000;

Mysqldumpslow command paparan pelaksanaan:

Kiraan: 2 Masa=1.5s (3s) Kunci=0.00s (0s) Baris=1000.0 (2000) , vgos_dba[vgos_dba]@[10.130.229.196]PILIH DARI sms_id=NADA perkhidmatan KUMPULAN LIMIT N, N

8.4.2, penerangan terperinci tentang keputusan analisis mysqldumpslow

Kiraan: Menunjukkan bilangan masa pelaksanaan bagi pernyataan jenis ini angka menunjukkan bahawa pernyataan pilih telah dilaksanakan 2 kali.
  • Masa: Menunjukkan purata masa pelaksanaan (jumlah masa) bagi jenis pernyataan ini
  • Kunci: Masa kunci 0s.
  • Rows:单次返回的结果数是 1000 条记录,2 次总共返回 2000 条记录。

通过这个工具就可以查询出来哪些 sql 语句是慢 SQL,从而反馈研发进行优化,比如加索引,该应用的实现方式等。

8.5、常见慢 SQL 排查

8.5.1、不使用子查询

SELECT FROM t1 WHERE id (SELECT id FROM t2 WHERE name='hechunyang');
Salin selepas log masuk

子查询在 MySQL5.5 版本里,内部执行计划器是这样执行的:先查外表再匹配内表,而不是先查内表 t2,当外表的数据很大时,查询速度会非常慢。
在 MariaDB10/MySQL5.6 版本里,采用 join 关联方式对其进行了优化,这条 SQL 会自动转换为

SELECT t1. FROM t1 JOIN t2 ON t1.id = t2.id;
Salin selepas log masuk

但请注意的是:优化只针对 SELECT 有效,对 UPDATE/DELETE 子 查询无效, 生产环境尽量应避免使用子查询。

8.5.2、避免函数索引

SELECT FROM t WHERE YEAR(d) >= 2016;
Salin selepas log masuk

由于 MySQL 不像 Oracle 那样⽀持函数索引,即使 d 字段有索引,也会直接全表扫描。
应改为 :

SELECT FROM t WHERE d >= ‘2016-01-01';
Salin selepas log masuk

8.5.3、用 IN 来替换 OR 低效查询

SELECT FROM t WHERE LOC_ID = 10 OR LOC_ID = 20 OR LOC_ID = 30;
Salin selepas log masuk

高效查询

SELECT FROM t WHERE LOC_IN IN (10,20,30);
Salin selepas log masuk

8.5.4、LIKE 双百分号无法使用到索引

SELECT FROM t WHERE name LIKE '%de%';
Salin selepas log masuk

应改为 :

SELECT FROM t WHERE name LIKE 'de%';
Salin selepas log masuk

8.5.5、分组统计可以禁止排序

SELECT goods_id,count() FROM t GROUP BY goods_id;
Salin selepas log masuk

默认情况下,MySQL 对所有 GROUP BY col1,col2… 的字段进⾏排序。如果查询包括 GROUP BY,想要避免排序结果的消耗,则可以指定 ORDER BY NULL 禁止排序。
应改为 :

SELECT goods_id,count () FROM t GROUP BY goods_id ORDER BY NULL;
Salin selepas log masuk

8.5.6、禁止不必要的 ORDER BY 排序

SELECT count(1) FROM user u LEFT JOIN user_info i ON u.id = i.user_id WHERE 1 = 1 ORDER BY u.create_time DESC;
Salin selepas log masuk

应改为 :

SELECT count (1) FROM user u LEFT JOIN user_info i ON u.id = i.user_id;
Salin selepas log masuk

Atas ialah kandungan terperinci Apakah kaedah pemantauan pangkalan data MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan