当前位置: 首页 > article >正文

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


http://www.kler.cn/a/371487.html

相关文章:

  • Git 常用命令与开发流程总结
  • 2024年10月HarmonyOS应用开发者基础认证全新题库
  • 快来了解一下——Windows 11 开发!
  • gin入门教程(7): 使用 Logrus + Lumberjack 创建日志中间件
  • 行为设计模式 -命令模式- JAVA
  • java项目之电影评论网站(springboot)
  • Photoshop图像算法(十)(代码在每个原理后面)
  • 匹配销售策略的CRM系统挑选指南
  • 基于uniapp微信小程序的旅游系统
  • conda迁移虚拟环境路径
  • Halcon 颜色处理
  • 预览 PDF 文档
  • android 手机姿态(2)
  • scenedetect视频场景变换侦测与分割
  • Me 攒的GPT修改论文提示词
  • Unity GameFramework Star Force 拆解(一)—— 启动流程
  • 机器学习与神经网络:诺贝尔物理学奖的新方向
  • Gradle 配置后续一致更新
  • redis的三种客户端
  • SpringMVC学习(2)
  • Mac开发环境配置- Shell/Homebrew/ruby
  • ele-table表格列表内,双击编辑部分信息(el-table组件同理)
  • C# OpenCvSharp DNN UNet 推理
  • 华为手机系统应用瘦身
  • 了解桌面机床用于学校教学培训应用-桌面级CNC机床
  • Debug日程工作经验总结日程常用