您现在的位置是:首页 >学习教程 > 观察MySQL状态网站首页学习教程

观察MySQL状态

2024-05-24 10:49:317850人围观
简介

MySQL的运行状态是我们排查性能问题的第一步。通过查看全局状态变量,我们可以获取系统的整体运行情况。以下是一些关键的状态变量和信息:

Threads_running 和 Threads_connected

SHOW GLOBAL STATUS LIKE 'Threads_running';
SHOW GLOBAL STATUS LIKE 'Threads_connected';

Threads_running 表示当前正在执行的线程数量。
Threads_connected 表示当前已连接到MySQL的线程数量。
如果 Threads_running 较高,而 Threads_connected 较低,可能表明存在某些长时间运行的查询,或者可能是由于连接池配置不当导致连接被频繁创建和销毁。

InnoDB 相关状态

SHOW ENGINE INNODB STATUS;

查看InnoDB引擎状态,关注以下信息:

Innodb_row_lock_current_waits:表示当前正在等待的行锁数量。
Innodb_deadlocks:显示发生的死锁次数。
高的行锁等待和死锁次数可能表明业务逻辑或查询需要优化,或者存在并发访问冲突。

Key_reads 和 Key_writes

SHOW GLOBAL STATUS LIKE 'Key_reads';
SHOW GLOBAL STATUS LIKE 'Key_writes';

Key_reads:表示从磁盘读取索引块的次数。
Key_writes:表示向磁盘写入索引块的次数。
高的 Key_reads 可能暗示着索引未能完全放入内存中,需要调整 key_buffer_size 参数。而频繁的 Key_writes 可能表明索引的写入操作较为频繁,需要考虑索引的优化。

Created_tmp_disk_tables

SHOW GLOBAL STATUS LIKE 'Created_tmp_disk_tables';

表示在磁盘上创建的临时表的数量。过多的磁盘临时表可能表明某些查询需要优化,或者 tmp_table_size 参数设置过小。

SHOW STATUS LIKE 'Uptime';

表示MySQL服务的运行时间。如果CPU问题突然发生,检查这个值,看是否与问题的时间点相关。

其他关键状态变量

浏览MySQL官方文档以获取更多有关全局状态变量的信息,根据具体情况添加监控和分析。

通过这些状态变量,我们可以初步了解MySQL的整体运行情况,从而有针对性地继续深入排查问题。在分析状态时,可以使用各种监控工具,如pt-mysql-summary或MySQL Enterprise Monitor,以更方便地查看和理解MySQL的状态信息。

Mysql参数设置

数据库属于IO密集型的应用程序,其主职责就是数据的管理及存储工作。而我们知道,从内存中读取一个数据库的时间是微秒级别,而从一块普通硬盘上读取一个 IO是在毫秒级别,二者相差3个数量级。所以,要优化数据库,首先第一步需要优化的就是IO,尽可能将磁盘IO转化为内存IO。


SELECT version(); // 版本:8.0.30
 
 // 索引块的缓冲区大小,增加它可得到更好处理的索引
show global variables like 'key_buffer_size';  // 默认值:8M
 
set global key_buffer_size=1024*1024*64
 
show global variables like 'max_allowed_packet'; // 默认值:64M
 
show global variables like 'table_open_cache'; // 默认值:4000
 
set global table_open_cache=16000
 
// sort_buffer_size是MySql执行排序使用的缓冲大小
show global variables like 'sort_buffer_size'; // 默认值:256KB
 
set global sort_buffer_size=1024*1024*16
 
show global variables like 'net_buffer_length'; // 默认值:16KB
 
 //read_buffer_size 是MySql读入缓冲区大小。
show global variables like 'read_buffer_size'; // 默认值:128KB
 
set global read_buffer_size=1024*1024*8
 
 // tmp_table_size是MySql的heap (堆积)表缓冲大小
show global variables like 'tmp_table_size'; // 默认值:16M
 
set global tmp_table_size=1024*1024*128
 
 // read_rnd_buffer_size 是MySql的随机读缓冲区大小
show global variables like 'read_rnd_buffer_size'; // 默认值:256KB
 
set global read_rnd_buffer_size=1024*1024*4
 
// thread_cache_size可以重新利用保存在缓存中线程的数量     
show global variables like 'thread_cache_size'; // 默认值:8
 
set global thread_cache_size=64
 
 
 
// MySql的最大连接数,如果服务器的并发连接请求量比较大,建议调高此值,以增加并行连接数量,
// 当然这建立在机器能支撑的情况下,因为如果连接数越多,介于MySql会为每个连接提供连接缓冲区,就会开销越多的内存
show global variables like 'max_connections'; // 最多连接数, 默认:151
 
set global max_connections=5000;
 
show global variables like 'max_connect_errors'; // 默认值:100
 
set global max_connect_errors=1000;
 
show global variables like 'open_files_limit'; // 默认值:1M
 
show global variables like 'innodb_data_file_path';    
 
// InnoDB
// 对InnoDB表性能影响最大的一个参数。InnoDB缓冲池用于缓存数据和索引,对于读取频繁的表,适当调整缓冲池大小可以显著提升性能。
将
// innodb_buffer_pool_size设置为系统中Mysql可用内存的70%左右。这确保了大部分数据和索引都可以在内存中缓存,减少磁盘I/O操作。
show global variables like 'innodb_buffer_pool_size'; // 默认值:128M
 
set global innodb_buffer_pool_size=1024*1024*1024*32 //32G
 
//InnoDB事务日志文件大小
 show global variables like 'innodb_log_file_size';
 
// InnoDB存储引擎的事务日志所使用的缓冲区
show global variables like 'innodb_log_buffer_size';  // 默认值:16M
 
set global innodb_log_buffer_size=1024*1024*128
 
show global variables like 'sync_binlog';
 
set global sync_binlog=1000














文章评论