mysql8性能参数查看及优化

mysql的整体性能和基本环境和参数配置都有很大的关系,在特定项目环境下,mysql的运行环境就是确定的,比如cpu配置,内存大小,磁盘类型等。为了充分利用环境提供的处理能力,就有必要对相关参数进行优化配置,以达到性能优化的目的。

当然,参数值的优化配置也是需要和具体的环境信息进行综合考虑的,比如对于16G内存的服务器和8G以及4G内存的服务器,优化后的参数值通常是不一样的。除此之外,还需要根据业务特定进行优化,比如对于需要快速响应的业务需求和批处理业务需求,可能在参数优化上的侧重点就会不一样。

下面对相关参数,分别列举了云生产环境、测试环境和本地开发环境,对比之后,就可以找到合适的参数配置:

1. innodb_buffer_pool_size(*)

innodb_buffer_pool_size一般为内存的70%~80%

innodb_buffer_pool_size = 256MB

查看方法:

-- 云生产环境 cloud mysql:
mysql> SELECT 'innodb_buffer_pool_size' AS name, @@innodb_buffer_pool_size/1024/1024 AS 'value(MB)';
+-------------------------+---------------+
| name                    | value(MB)     |
+-------------------------+---------------+
| innodb_buffer_pool_size | 2868.00000000 |
+-------------------------+---------------+
1 row in set (0.00 sec)

-- 测试环境 192.168.4.125:
mysql> SELECT 'innodb_buffer_pool_size' AS name, @@innodb_buffer_pool_size/1024/1024 AS 'value(MB)';
+-------------------------+--------------+
| name                    | value(MB)    |
+-------------------------+--------------+
| innodb_buffer_pool_size | 128.00000000 |
+-------------------------+--------------+
1 row in set (0.02 sec)

-- 本地开发环境 localhost
mysql> SELECT 'innodb_buffer_pool_size' AS name, @@innodb_buffer_pool_size/1024/1024 AS 'value(MB)';
+-------------------------+------------+
| name                    | value(MB)  |
+-------------------------+------------+
| innodb_buffer_pool_size | 8.00000000 |
+-------------------------+------------+
1 row in set

2. join_buffer_size

join_buffer_size = 16M

-- 云生产环境 cloud mysql:

mysql> SELECT 'join_buffer_size' AS name, @@join_buffer_size/1024/1024 AS 'value(MB)';
+------------------+------------+
| name             | value(MB)  |
+------------------+------------+
| join_buffer_size | 0.34375000 |
+------------------+------------+
1 row in set (0.00 sec)

-- 测试环境 192.168.4.125:

mysql> SELECT 'join_buffer_size' AS name, @@join_buffer_size/1024/1024 AS 'value(MB)';
+------------------+------------+
| name             | value(MB)  |
+------------------+------------+
| join_buffer_size | 0.25000000 |
+------------------+------------+
1 row in set (0.00 sec)

3. query_cache_size

query_cache_size = 64M

-- 云生产环境cloud mysql:

mysql> SELECT 'query_cache_size' AS name, @@query_cache_size/1024/1024 AS 'value(MB)';
+------------------+------------+
| name             | value(MB)  |
+------------------+------------+
| query_cache_size | 3.00000000 |
+------------------+------------+
1 row in set (0.00 sec)


-- 测试环境192.168.4.125:

mysql> SELECT 'query_cache_size' AS name, @@query_cache_size/1024/1024 AS 'value(MB)';
+------------------+------------+
| name             | value(MB)  |
+------------------+------------+
| query_cache_size | 1.00000000 |
+------------------+------------+
1 row in set, 1 warning (0.00 sec)

4. sort_buffer_size

配置文件:

sort_buffer_size = 16M

-- 云生产环境cloud mysql:

mysql> SELECT 'sort_buffer_size' AS name, @@sort_buffer_size/1024/1024 AS 'value(MB)';
+------------------+------------+
| name             | value(MB)  |
+------------------+------------+
| sort_buffer_size | 0.68750000 |
+------------------+------------+
1 row in set (0.00 sec)

-- 测试环境192.168.4.125:

mysql> SELECT 'sort_buffer_size' AS name, @@sort_buffer_size/1024/1024 AS 'value(MB)';
+------------------+------------+
| name             | value(MB)  |
+------------------+------------+
| sort_buffer_size | 0.50000000 |
+------------------+------------+
1 row in set (0.00 sec)

-- 本地开发环境localhost

mysql> SELECT 'sort_buffer_size' AS name, @@sort_buffer_size/1024/1024 AS 'value(MB)';
+------------------+------------+
| name             | value(MB)  |
+------------------+------------+
| sort_buffer_size | 0.25000000 |
+------------------+------------+
1 row in set

5. read_buffer_size

配置文件:

read_buffer_size = 16M

-- 云生产环境cloud mysql:

mysql> SELECT 'read_buffer_size' AS name, @@read_buffer_size/1024/1024 AS 'value(MB)';
+------------------+------------+
| name             | value(MB)  |
+------------------+------------+
| read_buffer_size | 0.68750000 |
+------------------+------------+
1 row in set (0.00 sec)

-- 测试环境192.168.4.125:

mysql> SELECT 'read_buffer_size' AS name, @@read_buffer_size/1024/1024 AS 'value(MB)';
+------------------+------------+
| name             | value(MB)  |
+------------------+------------+
| read_buffer_size | 0.25000000 |
+------------------+------------+
1 row in set (0.00 sec)

-- 本地开发环境localhost

mysql> SELECT 'read_buffer_size' AS name, @@read_buffer_size/1024/1024 AS 'value(MB)';
+------------------+------------+
| name             | value(MB)  |
+------------------+------------+
| read_buffer_size | 0.06250000 |
+------------------+------------+
1 row in set

6. max_connections(*)

配置文件:

max_connections = 768

-- 云生产环境cloud mysql:

mysql> SELECT 'max_connections' AS name, @@max_connections AS 'value';
+-----------------+-------+
| name            | value |
+-----------------+-------+
| max_connections |  1712 |
+-----------------+-------+
1 row in set (0.00 sec)

-- 测试环境192.168.4.125:

mysql> SELECT 'max_connections' AS name, @@max_connections AS 'value';
+-----------------+-------+
| name            | value |
+-----------------+-------+
| max_connections |   151 |
+-----------------+-------+
1 row in set (0.00 sec)

-- 本地开发环境localhost

mysql> SELECT 'max_connections' AS name, @@max_connections AS 'value';
+-----------------+-------+
| name            | value |
+-----------------+-------+
| max_connections |   151 |
+-----------------+-------+
1 row in set

7. max_allowed_packet(*)

max_allowed_packet = 4M

-- 云生产环境cloud mysql:

mysql> SELECT 'max_allowed_packet' AS name, @@max_allowed_packet/1024/1024 AS 'value(MB)';
+--------------------+---------------+
| name               | value(MB)     |
+--------------------+---------------+
| max_allowed_packet | 1024.00000000 |
+--------------------+---------------+
1 row in set (0.00 sec)

-- 测试环境192.168.4.125:

mysql> SELECT 'max_allowed_packet' AS name, @@max_allowed_packet/1024/1024 AS 'value(MB)';
+--------------------+------------+
| name               | value(MB)  |
+--------------------+------------+
| max_allowed_packet | 1.00000000 |
+--------------------+------------+
1 row in set (0.00 sec)

-- 本地开发环境localhost

mysql> SELECT 'max_allowed_packet' AS name, @@max_allowed_packet/1024/1024 AS 'value(MB)';
+--------------------+------------+
| name               | value(MB)  |
+--------------------+------------+
| max_allowed_packet | 4.00000000 |
+--------------------+------------+
1 row in set

8. key_buffer_size

key_buffer_size = 128M

-- 云生产环境cloud mysql:

mysql> SELECT 'key_buffer_size' AS name, @@key_buffer_size/1024/1024 AS 'value(MB)';
+-----------------+-------------+
| name            | value(MB)   |
+-----------------+-------------+
| key_buffer_size | 16.00000000 |
+-----------------+-------------+
1 row in set (0.00 sec)

-- 测试环境192.168.4.125:

mysql> SELECT 'key_buffer_size' AS name, @@key_buffer_size/1024/1024 AS 'value(MB)';
+-----------------+-------------+
| name            | value(MB)   |
+-----------------+-------------+
| key_buffer_size | 16.00000000 |
+-----------------+-------------+
1 row in set (0.00 sec)

-- 本地开发环境localhost

mysql> SELECT 'key_buffer_size' AS name, @@key_buffer_size/1024/1024 AS 'value(MB)';
+-----------------+------------+
| name            | value(MB)  |
+-----------------+------------+
| key_buffer_size | 8.00000000 |
+-----------------+------------+
1 row in set

9. back_log(*)

back_log = 500

-- 云生产环境cloud mysql:

mysql> SELECT 'back_log' AS name, @@back_log AS 'value';
+----------+-------+
| name     | value |
+----------+-------+
| back_log |  3000 |
+----------+-------+
1 row in set (0.00 sec)

-- 测试环境192.168.4.125:

mysql> SELECT 'back_log' AS name, @@back_log AS 'value';
+----------+-------+
| name     | value |
+----------+-------+
| back_log |    80 |
+----------+-------+
1 row in set (0.00 sec)

-- 本地开发环境localhost

mysql> SELECT 'back_log' AS name, @@back_log AS 'value';
+----------+-------+
| name     | value |
+----------+-------+
| back_log |    80 |
+----------+-------+
1 row in set

10. innodb_flush_log_at_trx_commit

innodb_flush_log_at_trx_commit = 0

事务日志写盘配置

N=0 每隔一秒,把事务日志缓存区的数据写到日志文件中,以及把日志文件的数据刷新到磁盘上;

N=1 每个事务提交时候,把事务日志从缓存区写到日志文件中,并且刷新日志文件的数据到磁盘上;

N=2 每事务提交的时候,把事务日志数据从缓存区写到日志文件中;

-- 云生产环境cloud mysql:

mysql> SELECT 'innodb_flush_log_at_trx_commit' AS name, @@innodb_flush_log_at_trx_commit AS 'value';
+--------------------------------+-------+
| name                           | value |
+--------------------------------+-------+
| innodb_flush_log_at_trx_commit |     1 |
+--------------------------------+-------+
1 row in set (0.00 sec)

-- 测试环境192.168.4.125:

mysql> SELECT 'innodb_flush_log_at_trx_commit' AS name, @@innodb_flush_log_at_trx_commit AS 'value';
+--------------------------------+-------+
| name                           | value |
+--------------------------------+-------+
| innodb_flush_log_at_trx_commit |     1 |
+--------------------------------+-------+
1 row in set (0.00 sec)

-- 本地开发环境localhost

mysql> SELECT 'innodb_flush_log_at_trx_commit' AS name, @@innodb_flush_log_at_trx_commit AS 'value';
+--------------------------------+-------+
| name                           | value |
+--------------------------------+-------+
| innodb_flush_log_at_trx_commit |     1 |
+--------------------------------+-------+
1 row in set

11. sync_binlog

sync_binlog = N:

N>0 每向二进制日志文件写入N条SQL或N个事务后,则把二进制日志文件的数据刷新到磁盘上;

N=0 不主动刷新二进制日志文件的数据到磁盘上,而是由操作系统决定;

-- 云生产环境cloud mysql:

mysql> SELECT 'sync_binlog' AS name, @@sync_binlog AS 'value';
+-------------+-------+
| name        | value |
+-------------+-------+
| sync_binlog |     1 |
+-------------+-------+
1 row in set (0.00 sec)

-- 测试环境192.168.4.125:

mysql> SELECT 'sync_binlog' AS name, @@sync_binlog AS 'value';
+-------------+-------+
| name        | value |
+-------------+-------+
| sync_binlog |     1 |
+-------------+-------+
1 row in set (0.00 sec)

12. innodb_buffer_pool_instances(*)

mysql innodb的性能与缓冲池的大小有很大的关系。可以通过以下两个参数进行调整。

innodb_buffer_pool_size 和 innodb_buffer_pool_instances

-- 云生产环境cloud mysql:

mysql> SELECT 'innodb_buffer_pool_instances' AS name, @@innodb_buffer_pool_instances AS 'value';
+------------------------------+-------+
| name                         | value |
+------------------------------+-------+
| innodb_buffer_pool_instances |     8 |
+------------------------------+-------+
1 row in set (0.00 sec)

-- 测试环境192.168.4.125:

mysql> SELECT 'innodb_buffer_pool_instances' AS name, @@innodb_buffer_pool_instances AS 'value';
+------------------------------+-------+
| name                         | value |
+------------------------------+-------+
| innodb_buffer_pool_instances |     1 |
+------------------------------+-------+
1 row in set (0.00 sec)

13. innodb_log_buffer_size

innodb_log_buffer_size = 2M

-- 云生产环境cloud mysql:

mysql> SELECT 'innodb_log_buffer_size' AS name, @@innodb_log_buffer_size/1024/1024 AS 'value(MB)';
+------------------------+------------+
| name                   | value(MB)  |
+------------------------+------------+
| innodb_log_buffer_size | 8.00000000 |
+------------------------+------------+
1 row in set (0.01 sec)

-- 测试环境192.168.4.125:

mysql> SELECT 'innodb_log_buffer_size' AS name, @@innodb_log_buffer_size/1024/1024 AS 'value(MB)';
+------------------------+-------------+
| name                   | value(MB)   |
+------------------------+-------------+
| innodb_log_buffer_size | 16.00000000 |
+------------------------+-------------+
1 row in set (0.00 sec)

14. tmp_table_size

tmp_table_size = 256M

-- 云生产环境cloud mysql:

mysql> SELECT 'tmp_table_size' AS name, @@tmp_table_size/1024/1024 AS 'value(MB)';
+----------------+------------+
| name           | value(MB)  |
+----------------+------------+
| tmp_table_size | 2.00000000 |
+----------------+------------+
1 row in set (0.01 sec)

-- 测试环境 192.168.4.125:

mysql> SELECT 'tmp_table_size' AS name, @@tmp_table_size/1024/1024 AS 'value(MB)';
+----------------+-------------+
| name           | value(MB)   |
+----------------+-------------+
| tmp_table_size | 16.00000000 |
+----------------+-------------+
1 row in set (0.00 sec)

15. 优化配置

为了能够让配置的参数能够在mysql重启后仍然有效,建议将优化参数配置在mysql的配置文件中,这样,每次mysql重启后,都能使用优化参数进行运行。

这里以8G内存服务器为例配置的优化参数。

innodb_buffer_pool_size = 4096MB
innodb_buffer_pool_instances = 8

max_connections = 1200
max_allowed_packet = 8M

back_log = 1000
相关推荐
苹果醋38 分钟前
2020重新出发,MySql基础,MySql表数据操作
java·运维·spring boot·mysql·nginx
小蜗牛慢慢爬行10 分钟前
如何在 Spring Boot 微服务中设置和管理多个数据库
java·数据库·spring boot·后端·微服务·架构·hibernate
hanbarger13 分钟前
nosql,Redis,minio,elasticsearch
数据库·redis·nosql
微服务 spring cloud35 分钟前
配置PostgreSQL用于集成测试的步骤
数据库·postgresql·集成测试
先睡37 分钟前
MySQL的架构设计和设计模式
数据库·mysql·设计模式
弗罗里达老大爷39 分钟前
Redis
数据库·redis·缓存
仰望大佬0071 小时前
Avalonia实例实战五:Carousel自动轮播图
数据库·microsoft·c#
学不透java不改名1 小时前
sqlalchemy连接dm8 get_columns BIGINT VARCHAR字段不显示
数据库
一只路过的猫咪1 小时前
thinkphp6使用MongoDB多个数据,聚合查询的坑
数据库·mongodb