mysql核心参数_MySQL技术体系之核心参数

本文主要基于MySQL 5.7版本的数据库环境,总结my.cnf文件中核心参数的配置使用,让更多的人对MySQL技术体系有更全面、更专业的深度了解。

一、客户端核心参数

1、port

端口号,默认3306

2、socket

Socket文件地址,默认以.sock为文件名称后缀,用于UNIX套接字通信。

二、服务端全局区(SGA)缓冲区参数

1、innodb_buffer_pool

InnoDB缓冲池,位于主内存

缓存被访问过的表数据、索引文件、插入缓冲、数据字典等

推荐大小设置为物理内存的50%-80%

2、innodb_buffer_pool_instance

将缓冲池进一步划分为互相隔离的内存区域,更好的支持并发读写,减少内存争用现象

默认值为1

仅当innodb_buffer_pool参数配置大于1024MB有效

通过命令show engine innodb status查看每个内存区域的内存使用情况

3、innodb_old_blocks_time和innodb_old_blocks_pct

InnoDB缓冲池innodb_buffer_pool,内部由LRU链表管理

LRU链表进一步分为old pages list和young pages list:

old pages list:存放长时间未被访问的数据页

young pages list:存放最新、最近被访问的数据页

当超过innodb_old_blocks_time参数设置的时间时,就会移动到old pages list,默认是1000ms。

innodb_old_blocks_pct参数决定old pages list在LRU链表及innodb_buffer_pool中占比:

存在大表扫描或者执行mysqldump备份操作时,可能会剔除热数据,增加I/O压力,因此要适当减少innodb_old_blocks_pct参数值

4、innodb_log_buffer_size和innodb_log_waits

innodb_log_buffer_size:日志缓冲区的大小,取值范围16MB-64MB

innodb_log_waits:等待日志缓冲刷出的次数

通过命令show global status like "%innodb_log_waits%"查看:

如果发现innodb_log_waits值大于0,并且持续增长,可以考虑增大innodb_log_buffer_size

5、innodb_log_buffer

事务在内存中的缓冲区的大小,即redo log buffer

6、query_cache_size和query_cache_type

query_cache_siz静态数据的缓存区大小

默认关闭,建议关闭,保证数据库的TPS

数据仓库场景可能会选择开启

实例启动前,设置query_cache_size=0和query_cache_type=off才算真正关闭

三、服务端程序缓冲区(PGA)参数

1、sort_buffer_size

用于SQL语句在内存中的临时排序

2、join_buffer_size

表连接使用,用于BKA

3、read_buffer_size

MyISAM存储引擎的表顺序扫描的缓存

4、read_rnd_buffer_size

随机读缓冲区大小

用于mrr特性

5、tmp_table_size和max_heap_table_size

tmp_table_size:SQL语句在排序或者分组时没有用到索引,会使用临时表空间

max_heap_table_size:管理heap、memory存储引擎表

建议tmp_table_size和max_heap_table_siz大小配置一致

三、服务端刷盘参数

内存中的数据需要根据刷新机制决定在某一时刻如何刷新到磁盘,刷新机制涉及redo log buffer、data buffer、binlog cache等内存缓冲区,read thread、write thread、redo log thread、change buffer thread四大I/O线程,及master thread后台主线程。

1、innodb_flush_log_at_trx_commit

控制由内存redo log buffer写入磁盘relo log、和执行刷盘操作的频率

可选参数值(实践根据业务场景选择):

0:redo log thread每隔1s会执行一次刷盘策略;

此种情况,每次事务提交不会触发redo log thread将日志缓冲中的数据写入redo log;

性能最好,但是安全性最低,MySQL进程崩溃将会导致丢失1s的数据;

1:每次事务提交时,都会触发redo log thread将日志缓冲中的数据写入redo log,并且执行刷盘操作,以便保证数据确实已经写入磁盘;

安全性最高,但是性能最差;

2:每次事务提交时,都会触发redo log thread将日志缓冲中的数据写入redo log,但是不会同时执行刷盘操作;

另外两个决定redo log buffer刷到磁盘的条件:

master thread每秒进行刷新;

redo log buffer使用超过一半时触发刷新;

2、sync_binlog

控制由内存binlog cache刷新到磁盘binglog的频率

参数值为正整数:

0:每次事务提交后,不主动做fsync之类的磁盘同步指令刷新binlog cache,让FileSystem自行决定同步时机,或者binlog cache满才同步到磁盘;

1:每次事务提交后,主动做刷新binlog cache到磁盘;

n:每进行n次事务提交后,主动做fsync之类的磁盘同步指令刷新binlog cache到磁盘;

3、数据库的双一模式:

innodb_flush_log_at_trx_commit = 1

sync_binlog = 1

4、innodb_max_dirty_pages_pct

控制脏页的刷新频率,在buffer pool中dirty page所占的百分比,达到阈值会触发page cleaner thrad执行脏页刷新

默认值是75%

建议设置为25%-50%之间,保证数据库整体的TPS

5、innodb_flush_method

控制InnoDB数据文件、redo log文件的打开刷写模式;

可选参数值:

O_SYNC:

O_DSYNC:

O_DIRECT:数据文件直接从MySQL InnoDB Buffer写入到磁盘,不用通过OS buffer;

四、服务端并发量参数

1、innodb_max_thread_concurrency

InnoDB内核最大并发线程数,默认值为0(含义不受限制)

2、innodb_open_files

InnoDB可同时打开的.ibd文件个数

参数值规则>=10,默认值300

建议调整为65535,提高并发数

3、max_connections和innodb_thread_concurrency

max_connections控制MySQL数据库最大的连接数,默认值151,高并发场景中经常遇到的"too many connections"异常报错,即为此参数配置过低或者集群需要水平扩容

innodb_thread_concurrency控制InnoDB内部并发数,参数值为正整数(默认值为0):

0:不受限制;

n:并发数为n,建议设置为服务器逻辑CPU核数的2倍,根据实际情况由小及大逐步调整验证;

五、服务端事务参数

1、transaction_isolation

事务隔离级别

可选参数值(默认值REPEATABLE-READ):

READ-UNCOMMITTED:读未提交

READ-COMMITTED:读已提交

REPEATABLE-READ:可重复读

SERIALIZABLE:序列化

六、服务端影响I/O性能的参数

1、innodb_log_file_size

redo log日志的大小,需要合理设置:

如果设置偏小,将会导致redo log切换频繁,产生无用的I/O消耗,影响数据库性能;

如果设置偏大,将会导致实例宕机恢复需要较长时间;

2、innodb_log_files_in_group

redo log文件组中的日志文件的数量,默认情况下至少需要2个。

3、innodb_stats_on_metadata

information_schema中的表,某些监控程序读取innodb_stats_on_metadata表

可通过命令"set global innodb_stats_on_metadata=0"关闭

七、服务端慢查询参数

1、show_query_log

慢查询日志开关

可选参数值:

1:开启状态,推荐配置;

2、long_query_time

慢查询的时间阈值,单位为秒;

超过阈值就会记录到慢查询日志文件;

3、log_queries_not_using_indexs

运行的SQL没有使用索引,是否记录到慢查询日志文件

可选参数值:

on:记录,推荐配置,set global set log_queries_not_using_indexs=on;

off:不记录;

八、服务端二进制文件参数

1、expire_logs_days

binlog文件的过期时间,单位为天

2、binlog_format

二进制日志文件的内容格式

可选参数值:

statement:记录的是一条SQL语句

row:此模式较为安全,不会出现跨库复制丢失数据的情况;

一般中间件采集数据解析也是这种模式,记录行变更前的样子及变更后的内容

mixed:混合模式

九、服务端其它参数

1、innodb_buffer_pool_load_at_startup和innodb_buffer_pool_dump_at_shutdown

快速加载实例宕机前内存中的热数据,减少磁盘I/O压力

可选参数值(默认0):

0:关闭状态

1:启用状态

在实例关闭时,将热数据的元数据信息保存到innodb_buffer_pool_filename参数指定的文件(默认ib_buffer_pool)

在实例启动时,从innodb_buffer_pool_filenam参数指定的文件(默认ib_buffer_pool)快速加载回内存

2、innodb_data_file_path

指定系统表空间文件的路径和ibdata1文件的大小

默认大小是10MB

3、interactive_timeout和wait_timeout

interactive_timeout是服务器关闭交互式连接前等待活动的时间,默认值28800s,即8小时

iwait_timeout是服务器关闭非交互式连接前等待活动的时间,默认值28800s,即8小时

两个参数需要一起调整,并且保持一致,默认值时间过长,建议调整为300s-600s之间

4、server-id

主从环境中,当前MySQL在主从结构中的唯一标识

5、lower_case_table_names

表名称是否区分大小写

可选参数值:

0:区分大小写

1:不区分大小写,实际存储使用小写;

6、innodb_fast_shutdown和innodb_force_recoverty

innodb_fast_shutdown控制表的InnoDB存储引擎在关闭时的行为

可选参数值:

0:默认值;

需要执行purge all、merge change buffer、flush dirty pages操作;

此方式是最慢的关闭方式,但是restart时最快;

1:不需要执行purge all、merge change buffer等操作,但是需要执行flush dirty pages操作;

2:不完成purge all、merge change buffer等操作,也不刷新脏页到磁盘;

只是将日志写入日志文件,因此不会丢数据,但是重新启动会进行recovery操作;

7、innodb_force_recoverty

控制表的InnoDB存储引擎在恢复时的行为

可选参数值:

0:默认值,当需要恢复时执行所有操作;

1:忽略检查到的corrupt页;

2:阻止主线程的运行,

3:不执行事务回滚操作;

4:不执行插入缓冲的合并操作;

5:不查看撤销日志,InnoDB存储引擎会将未提交的事务视为已提交;

6:不执行前滚操作;

7、innodb_status_output和innodb_status_output_locks

数据库监控信息记录到error log

建议关闭,防止错误日志增长过快,造成磁盘空间使用紧张

8、innodb_io_capacity

InnoDB后台进程最大的I/O性能指标,影响刷新脏页和插入缓冲的数量

默认值为200,可根据实际使用的磁盘类型选择调整

9、auto_increment_increment和auto_increment_offset

auto_increment_increment表示自增长字段每次递增的量,默认值为1

auto_increment_offset表示自增长字段从哪个值开始,默认值为1

欢迎订阅个人公众号,浏览更多MySQL技术体系知识。

2c9123dc46843f03bcfc8ee6fff0f299.png

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

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

相关文章

jtag引脚定义_从逆向分析的角度学习硬件调试技巧JTAG,SSD和固件提取

我想从逆向的角度做了深入了解JTAG,JTAG是许多嵌入式CPU使用的硬件级别调试机制,我希望通过这篇文章从逆向工程师的角度解释如何使用JTAG,并在此过程中提供一些实际示例。0x01 研究目标通过这篇文章,我希望做到以下几点&#xff1…

python virtualenv conda_在vscode中启动conda虚拟环境的思路详解

问题:cudatoolkit cudnn 通过conda 虚拟环境安装,先前已经使用virtualenv安装tf,需要在conda虚拟环境中启动外部python虚拟环境思路:conda prompt即将 [虚拟环境位置] 以参数形式传入 [activate.bat]VSOCDE中的设置添加以下语句{&…

远程过程调用失败_Java开发大型互联网RPC远程调用服务实现之问题处理方案

引言RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络…

chrome 新的session 设置_为什么还是由这么多人搞不懂Cookie、Session、Token?

作者:不学无数的程序员链接:https://urlify.cn/Yfm6Vr# Cookie洛:大爷,楼上322住的是马冬梅家吧? 大爷:马都什么? 夏洛:马冬梅。 7大爷:什么都没啊? 夏洛…

eview面板数据之混合回归模型_【视频教程】Eviews系列25|面板数据回归分析之Hausman检验及本章常见问题解答...

点击上方关注我们!本期我们学习Eviews统计建模最后一部分--面板数据回归分析Hausman检验及本章常见问题解答。实操:Hausman检验判断是固定效应模型还是随机效应模型上期我们讲到模型判断若选择模型2,需进一步通过Hausman检验判断固定效应还是随机效应,接…

mybatis mysql selectkey_Mybatis示例之SelectKey的应用

SelectKey在Mybatis中是为了解决Insert数据时不支持主键自动生成的问题,他可以很随意的设置生成主键的方式。不管SelectKey有多好,尽量不要遇到这种情况吧,毕竟很麻烦。SelectKey需要注意order属性,像Mysql一类支持自动增长类型的…

java treetable_在Swing中创建TreeTable | 学步园

TreeTable是Tree和Table的一个结合-就是一个即能够展开和收起行,同时也能够显示多个列的组件。在Swing的标准包里没有一个叫做JtreeTable的组件,但是我们很容易通过把Jtree做成Jtable的渲染器来创建一个这样的组件。这篇文章就是关于如何使用…

python期末大作业_大一期末考试很重要,考得好不仅有机会有钱拿,还有机会换专业...

现阶段很多高校放寒假的时间已经公布,这也就意味着,大学期末考试即将到来。对于大一新生来说,大学的期末考试是比较新鲜的,因为大家都没有经历过。经历过大学考试的学生,都知道大学的大概学习模式,一般情况…

java http 302重定向_Java 纯HTTP请求 禁止302自动重定向

Java 纯HTTP Get请求获取响应内容,如果发生302重定向,继而模拟请求域获取重定向后的响应内容。关键点:设置conn.setInstanceFollowRedirects为false即可示例代码public static void main(String[] args) {try {StringBuffer buffer new Stri…

python 且_Pyface库:一个基于pyqt、pyside、wx且简化的python的GUI

1 说明:1.1 Pyface库由大名鼎鼎的enthought出品。1.2 介绍:1.2.1 英文:traits-capable windowing framework.The pyface project contains a toolkit-independent GUI abstraction layer, which is used to support the "visualization&…

java方法的参数类型_Java 基础 14 方法的重载 与 方法参数类型详解

1.1 方法重载的概述和特点方法重载概述在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。方法重载特点与返回值类型无关,只看方法名和参数列表在调用时,虚拟机通过参数列表的不同来区分同名方法…

crv仪表上的i是什么指示灯_汽车打不着火是怎么回事,仪表盘汽车发动机故障灯亮是什么情况故障指示灯图解大全集...

如果打不着火,那有可能是起动机坏了,有可能是电池没电了,有可能是电路出现了问题,还有可能是点火系统出现了问题。汽车发动机的点火系统主要部件是火花塞和点火线圈,火花塞是一个需要定期更换的易损件。如果火花塞长时…

restful风格_什么是RESTful风格的API设计?

随着移动互联网的兴起,RESTful风格的API设计也随之流行起来,但我们说了那么多RESTful设计,它到底是什么?本篇文章带大家来了解一下它的真实面目。RESTful概念首先,我们需要明确的是RESTful,它是一个理念&am…

zookeeper 分布式锁_关于redis分布式锁,zookeeper分布式锁原理的一些学习与思考

编辑:业余草来源:https://www.xttblog.com/?p4946首先分布式锁和我们平常讲到的锁原理基本一样,目的就是确保,在多个线程并发时,只有一个线程在同一刻操作这个业务或者说方法、变量。在一个进程中,也就是一…

网页无法调用java9_JAVA 9 (内部类,异常,包)

内部类:将一个类定义在另一个类里面,称里面那个类为内部类。举例:class Zx{public static void main(String []arr){Outer o new Outer();o.method();}}class Outer{class Inner //内部类,可以定义多个内部类{void function(){S…

spark算子_Spark篇之持久化算子

一、前述Spark中控制算子也是懒执行的,需要Action算子触发才能执行,主要是为了对数据进行缓存。控制算子有三种,cache,persist,checkpoint,以上算子都可以将RDD持久化,持久化的单位是partition。cache和persist都是懒执…

java g1 gc ref proc_深入理解垃圾收集器的G1及日志分析

尽管Hotspot 最新的垃圾回收器G1是在2006年推出的。但是G1从推行至今的市场反响来看,但现在足以证明这款垃圾收集器是经得起考验的,从java9开始,就默认为G1垃圾收集器。G1是一款面向服务端应用的垃圾收集器。HotSpot开发团队赋予它的使命是(在…

gif透明背景动画_【超实用干货! 】iPad上的动画App大推荐

作者/立夏编辑/彼方大家好,我是立夏。大概在两年前吧我为大家写过几款动画APP的评测,这一次我也想给大家推荐一些我的新宠,供大家参考。我在这里就不过多提及如Animation Desk、Procreate或是Callipeg之类知名度相对更高一些的动画App了&…

iphone如何信任软件_【手机软件】千禾影院:全新观影神器,支持安卓+iOS,最新、最全、高清、免费!...

Hello,大家好,我是春哥!每天记得打卡哦!感谢每一位小伙伴们的关注和支持!免责声明大部分资源来源于网络,仅供学习和交流使用,如有侵权请联系我们删除。每期文章末尾都会有关键词,在公众号发消息…

Java小魔女芭芭拉_沉迷蘑菇不可自拔,黏土人《小魔女学园》苏西·曼芭芭拉 图赏...

GOOD SMILE出品的黏土人系列手办新作——《小魔女学园》苏西曼芭芭拉,已经开始接受预定了。这款黏土人的原型师是来自中国上海的陈天,售价4167日元,预计2018年4月发售。苏西是主人公亚可的室友,她是从东南亚来的身份不明的魔女。热…