MySQL核心参数优化文件my.ini详解

news2024/9/25 17:20:04

一.数据库服务器配置

CPU:48C
内存:128G
DISK:3.2TSSD

二.CPU的优化

innodb_thread_concurrency=32
表示SQL经过解析后,允许同时有32个线程去innodb引擎取数据,如果超过32个,则需要排队;
值太大会产生热点数据,global锁争用严重,影响性能
三.内存的优化
query_cache_type=0
query_cache_size=0
缓存查询,5.6默认关闭,在应用层实现,比如MC、redis

四.IO的优化

1.innodb_buffer_pool_size=50G

类似SGA,衡量总的IO处理能力上限,一般为物理内存的60%-70%,这里128G部署2个实例,剩下28G分配给OS和mysql连接等使用

2.innodb_io_capacity=20000

每秒后台进程处理IO数据的上限,一般为IO QPS总能力的75%
比如SSD是3W QPS,75%大概是2W,双实例减半,为1W,几个实例除以几

3.innodb_log_files_in_group=4

几个innodb redo log日志组

4.innodb_log_file_size=1000M

redo log日志循化写,生产必须大于1G,
如果太小,那么innodb_buffer_pool_size的数据有可能不能及时写入redo log造成halt等待;查看是否够用?如果value大于0,则提高改参数或者增加日志组

root@master 12:51:  [(none)]> show global status like '%log_wait%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| Innodb_log_waits | 0     |
+------------------+-------+
1 row in set (0.00 sec)
root@master 12:54:  [(none)]> show global status like '%Innodb_os_log_written%';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| Innodb_os_log_written | 1024  |
+-----------------------+-------+
1 row in set (0.00 sec)
#此参数大小可作为设置日志文件size大小参考值

5.innodb_flush_method=O_DIRECT

SSD直接写硬盘,不写硬盘cache,也就是绕过fsync()刷硬盘

6.innodb_max_dirty_pages_pct=50

当脏块达到innodb_buffer_pool_size的50%时,触发检查点,写磁盘

7.innodb_file_per_table=on

一表一文件,可以避免共享表空间的IO竞争

8.innodb_page_size=4k

默认是16K,这里是SSD,写SSD前要擦除,擦除单位是extent,一个extent有128个page组成,16128 > 4128 ,效率会更高

9.innodb_flush_neighbors=0

SSD设置为0,SAS打开刷新相邻块,随机访问转换为顺序访问

五.连接的优化

1.back_log=300

默认是50,TCP/IP的连接数量,一个连接占用256KB内存,最大是64MB,256 * 300 =75MB内存
和三次握手有关系
在这里插入图片描述
syn_queue取64和tcp_max_sync_backlog最大者,默认是1024,当瞬时很多连接进来这个参数会进行限制,否则太大容易消耗资源
accept queue取back_log和somaxconn最小者,用来防止丢包,当瞬时很多连接进来达到上限后,后来连接将超时触发重传机制
当有3000个连接进来,将队列accept queue占满,应用还没来得及将请求从队列中取出,剩下的2700个连接将被拒绝,每取走一个请求(一个连接,mysql一个线程一个连接),将创建一个thread线程

net.ipv4.tcp_max_sync_backlog= 8192  类似活动场所
sync接收队列的长度,默认是1024,当mysql在很短时间内得到很多的请求,需要增加,太大会消耗资源
太小的话会在show processlist出现未认证错误
net.core.somaxconn=1024   类似活动场所中的座位数
尽可能防止丢包,超过这个值会触发超时或者重传,限制在net.ipv4.ip_local_port_range这个范围之内
2.max_connections=3000

连接的创建和销毁都需要系统资源,比如内存、文件句柄
业务说的支持多少并发,指的是每秒请求数,也就是QPS
同一时刻并行的SQL由innodb_thread_concurrency决定,最大不能超过该值
如果一个用户的请求数据超过64MB(比如排序),就会申请临时空间,放到硬盘上
如果3000个用户同时连上mysql,最小需要内存3000256KB=750M,最大需要内存300064MB=192G,如果innodb_buffer_pool_size是80GB,可用内存不到48G,192GB>48GB,将会产生SWAP,此时将会影响性能
连接数过高,不一定带来吞吐量的提高,而且可能占用更多的系统资源
一个DB 3W QPS计算,前端有100个web服务器,每个web服务器需要300个QPS,每个QPS占用时间=网络来回时间+SQL执行时间,以20ms计算,需要6个连接数(300/1000/20ms=6)
示例1:有100台web服务器,PHP/JAVA的最大连接数可设置为:3000/100=30
示例2:有30台web服务器,要扩容到60台,web服务器连接数怎么配置?web服务器最大连接数:之前是3000/30=100,现在3000/60=50即可

3.max_user_connections=2980

剩余连接数用作管理

4.table_open_cache=1024

打开表的缓存,跟表数量没关系
1000个连接上来,都需要访问A表,那么会打开1000个表,打开1000个表是指mysql创建1000个这个表的对象,连接直接访问表对象,类似会把这张表做一个class,1000个连接都访问这个表对象,当表对象没了,重新new一个,不需要每次都打开物理表

root@master 14:44:  [(none)]> show variables like '%table_open_cache';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| table_open_cache | 1024  |
+------------------+-------+
1 row in set (0.00 sec)
root@master 14:46:  [(none)]> show global status like 'open%tables%'; 
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Open_tables   | 19    |
| Opened_tables | 113   |
+---------------+-------+
2 rows in set (0.00 sec)

可以考虑设置为max_connections或者max_connections*查询同时用到的表个数或者

5.thread_cache_size=512

都是短连接进来容易产生短连接风暴
会话层:事务状态、认证会话
连接层:网络连接、包传输
一个用户 对应 一个session 对应 一个connection
connection - thread:操作系统调用
3000个用户进来使用cache的512个线程,用完就放回去,避免创建、销毁线程的开销

6.wait_timeout=120

指的是app应用连接mysql进行操作完毕后,空闲120秒后断开

7.interactive_timeout=120

指的是mysql client连接mysql进行操作完毕后,空闲120秒后断开

六.数据一致性的优化

1.innodb_flush_log_at_trx_commit=1

0,不管有没有提交,每秒钟都写到binlog日志里
1,每次提交事务,都会把log buffer的内容写到磁盘里去,对日志文件做到磁盘刷新,安全最好
2,每次提交事务,都写到操作系统缓存,由OS刷新到磁盘,性能最好
https://blog.csdn.net/zengxuewen2045/article/details/51476186

2.sync_binlog=1

0,事务提交后,mysql不做fsync之类的刷盘,由文件系统来决定什么落盘
n,多少次提交,每n次提交持久化磁盘
生产设为1

3.日志写盘过程

在这里插入图片描述
1)三个update会话,三个线程都会产生的操作日志
2 )commit后提交到公共的cache中,三个进程之间不能相互看到对方的操作内容
3)经过write写入到标准I/O cache中,也就是文件系统句柄,线程缓存
4)如果需要让其他线程看到文件句柄内容,就需要通过flush刷新到全局可见文件系统缓存
5)最后最重的一步是将内存数据sync落盘
分类: MySQL性能优化

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/187333.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

spring系列 SpringMVC-拦截器

拦截器(Interceptor)是在SpringMVC中动态拦截控制器方法的执行。 拦截器执行流程: 拦截器与过滤器区别 归属不同:Filter属于Servlet技术,Interceptor属于SpringMVC技术 拦截内容不同:Filter对所有访问进…

【Mysql第二期 MySQL环境搭建】

文章目录01.为什么要安装新版本?02.官网下载mysql03.安装配置初始化mysql04.查看 MySQL服务05.验证是否安装成功06.修改root密码07.如果有navicat工具可以在测试一下:01.为什么要安装新版本? mysql8.x版本和msyql5.x版本zip安装的方式大同小…

证券交易金融知识学习(1)

学习目标: 需要做一些关于投资交易软件的测试,需要了解操作背后的交易意义,需要学习一些金融基础知识。本人是金融证券交易的小白,从0开始学习。故记录一些金融知识学习的笔记,比较零散,目的是为了让自己复…

Spring-DI相关内容

Spring-DI相关内容 5,DI相关内容 前面我们已经完成了bean相关操作的讲解,接下来就进入第二个大的模块DI依赖注入,首先来介绍下Spring中有哪些注入方式? 我们先来思考 向一个类中传递数据的方式有几种? 普通方法(set方法)构造方法 依赖注…

【数据结构】8.4 选择排序

文章目录1. 简单选择排序简单选择排序算法简单排序算法分析2. 堆排序堆的定义堆的调整堆的建立堆排序算法堆排序算法分析1. 简单选择排序 基本思想 在待排序的数据中选出最大(小)的元素放在其最终的位置。 基本操作 首先通过 n - 1 次关键字比较&…

计算机SCI期刊能一稿多投吗? - 易智编译EaseEditing

首先建议不要一稿多投,投稿前要对目标期刊了解清楚,是什么方向,什么水平的。 可以看看期刊近期发表的文章,是什么方向的,这样会更精准。 一稿多投就是广撒网嘛,还不如做好功课,找到对应期刊&a…

网络知识详解之:HTTPS通信原理剖析(对称、非对称加密、数字签名、数字证书)

网络知识详解之:HTTPS通信原理剖析(对称、非对称加密、数字签名、数字证书) 计算机网络相关知识体系详解 网络知识详解之:TCP连接原理详解网络知识详解之:HTTP协议基础网络知识详解之:HTTPS通信原理剖析&…

Es6 扩展运算符... ,以及rest和arguments

扩展运算符... … 扩展运算符能将 数组 转换为逗号分隔的 参数序列 应用场景: 多个数组的合并 var arr4 [1, 2, 3];var arr5 [4, 5, 6];var arr6 [...arr4, ...arr5];//合并数组 也可以为数组的一部分arr6的值应为[1,2,3,4,5,6] 数组的克隆&#xff0…

C语言--指针与数组

目录指针运算(补)指针指针指针的关系运算(补)指针与数组数组名二级指针指针数组指针运算(补) 指针指针 上一篇博客我们介绍了指针运算中的三种常见运算:指针整数,指针关系运算&…

关于android studio安装篇

前言:本文安装环境为windows系统,调试环境AVD(电脑上运行的“虚拟手机”),安装android studio之前需安装jdk,配置好jdk的环境变量。解释:android运行调试环境有三种方式,真机、AVD&a…

基于uboot的truested安全启动模式进行TF-A源码移植

步骤 1. 对源码进行解压 tar -xvf tf-a-stm32mp-2.2.r2-r0.tar.gz2. 将补丁文件全打上 for p in ls -1 ../*.patch; do patch -p1 < $p; done3. 配置交叉编译工具链&#xff0c;在TF-A顶层目录下打开Makefile.sdk文件修改&#xff0c;搜索cross_compile&#xff0c;然后进…

5.组件钩子函数

目录 1 生命周期与钩子函数 2 创建时 3 更新时 3.1 执行顺序 3.2 触发条件 3.3 componentDidUpdate() 4 卸载时 1 生命周期与钩子函数 类组件从 被挂载到页面中运行&#xff0c;到组件不用时卸载 之间是组件的生命周期 只有类组件才有生命周期 生命周期的每个…

MATLAB算法实战应用案例精讲-【数模应用】概率生成模型(Generative Model)(补充篇)

前言 几个高频面试题目 非概率模型和概率模型的区别 非概率模型 非概率模型指的是直接学习输入空间到输出空间的映射h,学习的过程中基本不涉及概率密度的估计,概率密度的积分等操作,问题的关键在于最优化问题的求解。通常,为了学习假设 ,我们会先根据一些先验知识(pri…

道路千万条,安全第一条

我是腾讯安全的冯帆&#xff0c;主要在MMS安全服务团队负责交通行业保障工作。每年春节对交通行业来说都是一次考验&#xff0c;尤其是今年春运&#xff0c;也是三年来最具规模的一次“大考”。因此我们今年投入的人力&#xff0c;包括值守团队&#xff0c;也是这些年最多的一次…

Eclipse中的Classpath及【其与buildpath之间的关系】

Eclipse中的Classpath及【其与buildpath之间的关系】简介.classpath文件设置和查看方法通过eclipse设置通过Java代码设置通过eclipse菜单查看通过Java代码输出查看classpath及与buildpath之间的关系简介 Classpath .classpath文件 .classpath文件用于记录项目编译环境的所有…

第五届字节跳动青训营 前端进阶学习笔记(九)Node.js 与前端开发实战

文章目录前言Node.js的应用场景1.典型应用场景Node.js运行时结构特点Node.js实战1.搭建一个基本的http服务器2.返回json数据3.编写一个简单的静态服务器4.SSR5.调试6.部署总结前言 本堂课程重点内容&#xff1a; Node.js的应用场景Node.js的运行时结构Node.js实战 Node.js的应…

使用Markdown写出一份漂亮的简历

文章目录背景Markdown编辑器开始写你的简历个人优势项目经历            牧竹子个人技能公司经历项目经验XXXXXX项目 202N.N0.15-202N.N.N导出文档格式高级版修改样式背景 每当你要更新简历时是否因为各个平台不同输入框而陷入适配不同的模板&#xff0c;如此以来为…

全球开源学习平台Moodle

今天是正月初九&#xff0c;老苏开始上班了&#xff0c;起航新程&#xff0c;开工大吉&#xff01; 什么是 Moodle &#xff1f; Moodle 是一个开源的在线教育系统&#xff08;慕课&#xff09;。旨在为教育工作者、管理人员和学习者提供一个强大、安全且集成的系统&#xff0c…

DP背包问题

目录 一、前言 二、0/1背包 1、装箱问题&#xff08;lanqiaoOJ题号763&#xff09; 2、2022&#xff08;2022年国赛填空题&#xff0c;lanqiaoOJ题号2186&#xff09; 三、完全背包 1、小明的背包2&#xff08;lanqiaoOJ题号1175&#xff09; 四、分组背包 五、多重背包…

Kylin 4.0.1 分布式集群安装部署

目录1. 安装依赖2. 安装Kylin(kylin1上操作)2.1 下载解压2.2 修改conf/kylin.properties2.3 下载Mysql驱动包和创建Mysql数据库2.4 hive-site.xml复制到spark的conf目录2.5 配置环境变量(两台kylin服务器)2.6 kylin运行环境检查2.7 ConfigurationException问题(没有则忽略)2.8 …