mysql性能调优之配置文件优化

调优背景

最近在项目并发测试过程中发现mysql几乎占满了cpu:

  • 20并发,循环调用4个接口,其中一个接口存在inner join连表查询,连表中其中有一个表数据量在20万条左右
  • 20并发运行后,mysql几乎占满了CPU,在mysql workbench中,调用sql只有0.6s左右

分析后发现,由于调用的同一个接口,并且查询参数没有改变,查出来的结果也基本是一样的所以开启缓存后效果很好
在这里插入图片描述

优化结果

优化前,CPU基本上被占满
在这里插入图片描述
优化后,几乎不占CPU
在这里插入图片描述

配置文件

[client]
port=3306
#socket=/var/lib/mysql/mysql.sock

[mysql]
no-beep
default-character-set=utf8

[mysqld]
#mysql实例端口
port=3306
#socket=/var/lib/mysql/mysql.sock

external-locking=FALSE

#basedir=D:/tools/MySQL/mysql-5.7.19-winx64
#配错了(路径不存在)会导致启动不了!!!!!
datadir=D:/mysql/data
#pid_file=/var/lib/mysql/mysql.pid
#user=mysql

secure-file-priv="D:/tools/MySQL/mysql-5.7.19-winx64/uploads"

#服务器安装时指定的默认编码格式,这个变量建议由系统自己管理,不要人为定义
character-set-server=utf8
#指定默认字符集
collation-server=utf8_general_ci
#################################################
#------------------GTID主从---------------------#

#遇有主从复制,必设该值,每个参与主从复制的mysql实例的server-id不能重复,必须为阿拉伯数字。
server-id=1
#gtid_mode=ON
#enforce_gtid_consistency=ON

#从库开启binlog记录执行过的GTID,5.6必须开启,5.7版本后非必须,影响从库IO性能
#log_slave_updates=ON

#开启基于库的多线程复制默认0不开启
#slave_parallel_workers=4

#主从复制时用,推荐TABLE.
#从机保存主节点信息方式,设成file时 会生成master.info 和 relay-log.info2个文件,设成table,信息就会存在mysql.master_slave_info表中。不管是设置的哪种值,都不要移动或者编辑相关的文件和表。
#master_info_repository=TABLE
#主从复制时用,推荐TABLE.
#这个参数和上面的master_info_repository必须保持一致,要不然mysql实例启不起来。
#relay_log_info_repository=TABLE

#################################################
#--------二进制日志文件(主从复制时用)---------#
#log_bin=mysql3306-binlog

#二进制日志格式,OLTP为row,DSS系统为mixed,如不确定,使用row
#binlog_format=ROW
#保留15天=内的binlog历史日志
expire_logs_days=15
#禁用二进制日志时间校验和
#binlog_checksum=NONE

#控制binlog_cache中的所有binlog什么时候刷新进磁盘,1最安全,每一次事务提交均写;0最不安全,由文件系统自行控制;N表示每N次事务后刷新进磁盘,如果IO压力大可以设置为500或1000
sync_binlog=1

#full(默认),记录所有前镜像(修改前)、后镜像(修改后)的内容,最安全;
#MINIMAL前镜像只记录唯一识别列(唯一索引列、主键列),后镜像只记录修改列。
#binlog_row_image=full

#max_binlog_cache_size=100M
#max_binlog_size=500M
#binlog_cache_size=8M

#################################################
#------------------文本日志---------------------#

general-log=0
general_log_file="UTPW-SERVER.log"

#开启慢日志
slow_query_log=on
slow_query_log_file="UTPW-SERVER-slow.log"

#指定多少秒未返回结果的查询属于慢查询 
long_query_time=10
#记录没有索引的查询
log_queries_not_using_indexes=1
#指定慢查询日志的输出方式,日志文件(FILE),数据库表(TABLE,mysql.slow_log)
log-output=FILE
#设置错误日志
log-error="UTPW-SERVER.err"

#记录执行缓慢的管理SQL,如altertable,analyzetable,checktable,createindex,dropindex,optimizetable,repairtable等
log-slow-admin-statements=1

#指定超过阈值的查询类型计入慢日志,如full_scan,filesort等
#log_slow_filter

#设置慢查询日志中,需要增加的额外信息,可选值query_plan
#log_slow_verbosity

#################################################
#-------------------globalvariables------------#

#5.7后的兼容配置
#sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION


#生产上开启成1,如果你开启的是0会有一个这样的情况:a运行一条insert语句,并未作commit;b去做查询此时b是查询不到的。这种操作一般用于在写store procedure时用到。
autocommit=1

##SkipOptions
#开启域名解析
skip-name-resolve
#跳过外部锁定,当多台数据库使用同一数据库目录时需要注释掉该项
skip_external_locking
#不对表使用软连接
skip-symbolic-links



#默认设置
default-time-zone=system
default-storage-engine=InnoDB
explicit_defaults_for_timestamp=1
lower_case_table_names=1
# Set the SQL mode to strict
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"


#收集数据库服务器性能参数
performance_schema=1

#锁定内存,不使用swap空间
#https://blog.csdn.net/java_w/article/details/103554374
#memlock=true

#设置事务隔离级别,READ-COMMITTED:读已提交REPEATABLE-READ:可重复读
#transaction-isolation=READ-COMMITTED

#支持大页内存模式,内存压力大时考虑开启,否则不建议设置
#large-pages

#关闭定时调度器
event_scheduler=OFF

######################################
#--------------连接相关--------------#

#允许客户端并发连接的最大数量,默认值是151,一般将该参数设置为500-2000
max_connections=2000
#如果客户端尝试连接的错误数量超过这个参数设置的值,则服务器不再接受新的客户端连接。
#可以通过清空主机的缓存来解除服务器的这种阻止新连接的状态,通过FLUSH  HOSTS或mysqladmin flush-hosts命令来清空缓存。这个参数的默认值是100,一般将该参数设置为100000。
max_connect_errors=20000

#Mysql关闭非交互连接前的等待时间,单位是秒,默认是8小时,建议不要将该参数设置超过24小时,即86400
wait_timeout=600
#Mysql关闭交互连接前的等待时间,单位是秒,默认是8小时,建议不要将该参数设置超过24小时,即86400
#注意variable出来的是基于这个参数的,因此实际wait_timeout是需要看配置文件确定的
interactive_timeout=600

#操作系统允许MySQL服务打开的文件数量。这个参数实际的值以系统启动时设定的值、max_connections和table_open_cache为基础,使用下列的规则:
# 1. 10 + max_connections + (table_open_cache * 2)
# 2. max_connections * 5
# 3. MySQL启动时指定open_files_limit的值
open_files_limit=65535

#MySQL服务器连接请求队列所能处理的最大连接请求数,如果队列放满了,后续的连接才会拒绝。
#当主要的MySQL线程在很短时间内获取大量连接请求时,这个参数会生效。接下来,MySQL主线程会花费很短的时间去检查连接,然后开启新的线程。
#这个参数指定了MySQL的TCP/IP监听队列的大小。如果MySQL服务器在短时间内有大量的连接,可以增加这个参数。
back_log=100

######################################
#-----------缓存控制参数-------------#

#数据读取超时时间
net_read_timeout=3600
#数据库写超时时间
net_write_timeout=3600
#mysqldump时提高insert效率,默认1M,最大16M,数据量大时可减少insert次数提高效率
net_buffer_length=16384

#设置查询缓存的类型。
#当这个参数为0或OFF时,则MySQL服务器不会启用查询缓存;
#当这个参数为1或ON时,则MySQL服务器会缓存所有查询结果(除了带有SELECT  SQL_NO_CACHE的语句);
#当这个参数为2或DEMAND时,则MySQL服务器只会缓存带有SELECT SQL_CACHE的语句。
query_cache_type=1
#为查询结果所分配的缓存,默认这个参数是没有开启的。
#这个参数的值应设为整数的1024倍,如果设为其他值则会被自动调整为接近此数值的1024倍。
#这个参数最小需要40KB。建议不要将此参数设为大于256MB,以免占用太多的系统内存。
query_cache_size=128M
#指定单个查询能够使用的缓冲区大小,缺省为1M
query_cache_limit=2M
#查询缓存所分配的最小块的大小。默认值是4096(4KB)。
query_cache_min_res_unit=4K

#指定表高速缓存的数量
table_open_cache=1024
#表定义文件.frm缓存大小,最大2000
table_definition_cache=1024

#每个连接线程被创建时,MySQL给它分配的内存大小
thread_stack=192K
#MySQL服务缓存以重用的线程数。当客户端断开连接的时候,如果线程缓存没有使用满,则客户端的线程被放入缓存中。
#如果有客户端断开连接后再次连接到MySQL服务且线程在缓存中,则MySQL服务会优先使用缓存中的线程;如果线程缓存没有这些线程,则MySQL服务器会创建新的线程。
#如果数据库有很多的新连接,可以增加这个参数来提升性能。如果MySQL服务器每秒有上百个连接,可以增大thread_cache_size参数来使MySQL服务器使用缓存的线程。
#通过检查Connections和Threads_created状态参数,可以判断线程缓存是否足够。这个参数默认的值是由下面的公式来决定的:8  + (max_connections / 100)
#线程缓存的命中率计算公式为(1-thread_created/connections)*100%,可以通过这个公式来优化和调整thread_cache_size参数。
#简单来说是:当客户端断开连接后将当前线程缓存起来当在接到新的连接请求时快速响应无需创建新的线程)优化参照2G—>16;3G—>32;>3G—>64,
thread_cache_size=128

#这个参数设置用户创建的MEMORY表允许增长的最大容量,这个参数用来MEMORY表的MAX_ROWS值。设置这个参数对已有的MEMORY表没有影响,除非表重建或执行ALTER TABLE、TRUNCATE TABLE语句。
#这个参数也和tmp_table_size参数一起来现在内部in-memory表的大小。如果内存表使用频繁,可以增大这个参数的值。
max_heap_table_size=512M
#sql执行时生成临时数据表的内存缓存大小,受max_heap_table_size影响限制,需同时调整
tmp_table_size=512M

#每个会话执行排序操作所分配的内存大小。
#想要增大max_sort_length参数,需要增大sort_buffer_size参数。
#如果在SHOW  GLOBAL  STATUS输出结果中看到每秒输出的Sort_merge_passes状态参数很大,可以考虑增大sort_buffer_size这个值来提高ORDER  BY 和 GROUP BY的处理速度。
#建议设置为1~4MB。当个别会话需要执行大的排序操作时,在会话级别增大这个参数。
sort_buffer_size=2M
#为每个线程对MyISAm表执行顺序读所分配的内存。如果数据库有很多顺序读,可以增加这个参数,默认值是131072字节。这个参数的值需要是4KB的整数倍。
#这个参数也用在下面场景中:
# - 当执行ORDER BY操作时,缓存索引到临时文件(不是临时表)中;
# - 执行批量插入到分区表中;
# - 缓存嵌套查询的执行结果。
#一般保留默认:64k,保守作法是设置在1~4M,不过它的应用场景很有限,对于互联网场景真的不太用,我推荐设成4M
read_buffer_size=4M
#这个参数用在MyISAM表和任何存储引擎表随机读所使用的内存。
#当从MyISAM表中以键排序读取数据的时候,扫描的行将使用这个缓存以避免磁盘的扫描。
#将这个值设到一个较大的值可以显著提升ORDER BY的性能。
#然后,这个参数会应用到所有的客户端连接,所有不应该将这个参数在全局级别设为一个较大的值;在运行大查询的会话中,在会话级别增大这个参数即可。
#一般它的推荐设置在8-16M,我推荐8M,根据sql分析计划如果碰到高频的查询且order by的返回包体都很大,那么再在session级别去放。
read_rnd_buffer_size=8M
#MySQL服务器用来作普通索引扫描、范围索引扫描和不使用索引而执行全表扫描这些操作所用的缓存大小。
#通常,获取最快连接的方法是增加索引。当不能增加索引的时候,使全连接变快的方法是增大join_buffer_size参数。
#对于执行全连接的两张表,每张表都被分配一块连接内存。对于没有使用索引的多表复杂连接,需要多块连接内存。
#通常来说,可以将此参数在全局上设置一个较小的值,而在需要执行大连接的会话中在会话级别进行设置。默认值是256KB。
#推荐8-16M
join_buffer_size=8M

#MyISAM表使用一种特殊的树状缓存来提高批量插入的速度,如INSERT  ... SELECT,INSERT ... VALUES (...),(...), ...,对空表执行执行LOAD DATA  INFILE。
#这个参数每个线程的树状缓存大小。将这个参数设为0会关闭这个参数。这个参数的默认值是8MB。
bulk_insert_buffer_size=64M

#########################################

#----------------MGR--------------------#

#在server收集写集合的同时将其记录到二进制日志。写集合基于每行的主键,并且是行更改后的唯一标识此标识将用于分布式冲突检测和处理。
#transaction_write_set_extraction=XXHASH64

#组的名字必须是有效的UUID,但不能用主机的GTID!所有节点的这个组名必须保持一致!在二进制日志中为组复制事件设置GTID时,将在内部使用此UUID。可使用SELECTUUID()生成一个UUID。
#loose-group_replication_group_name='ce9be252-2b71-11e6-b8f4-00212844f856'

#表示组复制是否随实例启动而启动
#loose-group_replication_start_on_boot=off

#不同节点配置本身的IP地址和端口,负责组内通信,需区分MYSQL自身的3306端口
#loose-group_replication_local_address='192.168.x.x:33061'

#设置组成员的主机名和端口
#loose-group_replication_group_seeds='192.168.157.128:33061,192.168.157.129:33061,192.168.157.130:33061'

#只用于集群初始化的时候设置ON开启,主节点必须执行,其他节点不需要执行
#loose-group_replication_bootstrap_group=off

#单主模式为ON,多主模式为OFF
#loose-group_replication_single_primary_mode=on

#是否在所有节点启用多主数据更新的严格一致性检查
#loose-group_replication_enforce_update_everywhere_checks=off
#设置IP白名单
#loose-group_replication_ip_whitelist='192.168.x.0/24'


########################################
#-----------------InnoDB---------------#

#启用InnoDB的status_file
innodb_status_file=1
#不设auto_inc锁,在binlog_format是raw|mixed时,2在性能最好的同时主从复制也是安全的
innodb_autoinc_lock_mode=2

#InnoDB严格检查模式,当语句写法错误时,无警告信息,直接报错
innodb_strict_mode=true

#0:logbuffer将每秒一次地写入logfile中,并且logfile的flush(刷到磁盘)操作同时进行。该模式下在事务提交的时候,不会主动触发写入磁盘的操作,(不安全,但速度最快)。
#1:每次事务提交时都会把logbuffer的数据写入logfile,并且flush(刷到磁盘)中去,该模式为系统默认(最安全)。
#2:每次事务提交时都会把logbuffer的数据写入logfile,但是flush(刷到磁盘)操作并不会同时进行。该模式下,MySQL会每秒执行一次flush(刷到磁盘)操作,(速度快些,较安全)。只有在操作系统崩溃或者系统断电的情况下,上一秒钟所有事务数据才可能丢失。IO无法满足时考虑设置为2。
innodb_flush_log_at_trx_commit=2

#io读写线程的个数,可根据cpu*核心数调整,默认是4
innodb_read_io_threads=4
innodb_write_io_threads=4

#-------与硬盘有关的--------#
#默认值为1,SSD设置为0,Neighbors指的是属于一个extent的所有页面,一个extent共64个页面,出于硬盘IO顺序写的考虑,InnoDB通常会刷新一个extent中的所有页面,因为SSD在随机IO上没有额外负载,所以不需要启用该特性
innodb_flush_neighbors=0

#虽然SSD建议设置为4KB,确实会提高性能,但会出现索引不能超过768的错误,建议保持默认16KB
#有效值:4K,8K,16K,32K,64K
#生产环境中,可以选择16k和8k的长度
#https://jishuin.proginn.com/p/763bfbd33765
innodb_page_size=16K

#InnoDB后台进程最大的IO性能指标,根据服务器IOPS性能调整(建议使用Oracle ORION进行测试),200代表每次可以执行200次IOPS
#默认是200,单位是页,该设置大小取决与硬盘的IOPS。如果6块15000转的磁盘RAID10,可考虑设置为2000比较合适。
#这个值很重要,它对读无效,对写很有决定意义,它会直接决定mysql的tps(吞吐性能)
#sas/sata:           200               innodb_io_capacity=200,innodb_io_capacity_max不用设置
#sas*12 raid10:      2000              innodb_io_capacity=200,innodb_io_capacity_max不用设置
#普通ssd:            5000-200000       innodb_io_capacity=8000,innodb_io_capacity_max=12000
#fusion-io高性能ssd:50000-80000       innodb_io_capacity=50000,innodb_io_capacity_max=80000
#一般为IO QPS总能力的75%,比如SSD是3W QPS,75%大概是2W,双实例减半,为1W,几个实例除以几
innodb_io_capacity=5000
#当flush操作落后太多时,可能会做一些非常有侵略性的刷新(超过指定的innodb_io_capacity),这会影响到正常的业务,指定这个值,可以限制innodb_io_capacity的上限,减少对正常应用的影响.
#一般为innodb_io_capacity的两倍左右,不要超过硬盘最大IOPS
innodb_io_capacity_max=12000

#InnDB存储引擎缓存表和索引数据所使用的内存大小。默认值是128MB。在以InnDB存储引擎为主的系统中,可以将这个参数设为机器物理内存的80%。
#同时需要注意:
# -设置较大物理内存时是否会引擎页的交换而导致性能下降;
# -InnoDB存储引擎会为缓存和控制表结构信息使用部分内存,因而实际花费的内存会比设置的值大于10%;
# -这个参数设置的越大,初始化内存池的时间越长。
# -在MySQL  5.7.5版本,可以以chunk为单位增加或减少内存池的大小。chunk的大小可以通过innodb_buffer_pool_chunk_size参数设定,默认值是128MB。内存池的大小可以等于或是innodb_buffer_pool_chunk_size  * innodb_buffer_pool_instances的整数倍。
#例如8G内存设置6G左右
innodb_buffer_pool_size=12G
#InnoDB缓存池被分成的区域数。
# -对于1GB以上大的InnoDB缓存,将缓存分成多个部分可以提高MySQL服务的并发性,减少不同线程读缓存页的读写竞争。
# -每个缓存池有它单独的空闲列表、刷新列表、LRU列表和其他连接到内存池的数据结构,它们被mutex锁保护。
# -这个参数只有将innodb_buffer_pool_size参数设为1GB或以上时才生效。建议将每个分成的内存区域设为1GB大小。
innodb_buffer_pool_instances=12
#-----------------------------#

#InnoDB存储引擎可以并发使用的最大线程数。当InnoDB使用的线程超过这参数的值时,后面的线程会进入等待状态,以先进先出的算法来处理。等待锁的线程不计入这个参数的值。这个参数的范围是0~1000。默认值是0。当这个参数为0时,代表InnoDB线程的并发数没有限制,这样会导致MySQL创建它所需要的尽可能多的线程。设置这个参数可以参考下面规则:
# -如果用户线程的并发数小于64,可以将这个参数设为0;
# -如果系统并发很严重,可以先将这个参数设为128,然后再逐渐将这个参数减小到96, 80, 64或其他数值,直到找到性能较好的一个数值。
# -http://blog.itpub.net/15498/viewspace-2141352/
innodb_thread_concurrency=0

#指定刷新数据到InnoDB数据文件和日志文件的方法,刷新方法会对I/O有影响。
#如果这个参数的值为空,在类Unix系统上,这个参数的默认值为fsync;在Windows系统上,这个参数的默认值为async_unbuffered。
#在类Unix系统上,这个参数可设置的值如下:
# - fsync: InnoDB使用fsync()系统函数来刷新数据和日志文件,fsync是默认参数。
# - O_DSYNC: InnoDB使用O_SYNC函数来打开和刷新日志文件,使用fsync()函数刷新数据文件
# - littlesync: 这个选项用在内部性能的测试,目前MySQL尚不支持,使用这个参数有一定的风险
# - nosync: 这个选项用在内部性能的测试,目前MySQL尚不支持,使用这个参数有一定的风险
# - O_DIRECT: 每次读写文件时是直接向磁盘写入,绕过os缓冲,但是返回的时候不保证数据和元数据信息已经完全刷入磁盘
# - O_DIRECT_NO_FSYNC: 在Flush IO操作时使用O_DIRECT,但在每次write操作时跳过fsync()系统调用。(O_DIRECT_NO_FSYNC在MySQL 5.6.6版本引入,但不适合XFS和EXT4文件系统)
#在有RAID卡和写缓存的系统中,O_DIRECT有助于避免InnoDB缓存池和操作系统缓存之间的双重缓存。在InnoDB数据和日志文件放在SAN存储上面的系统,默认值或O_DSYNC方法会对以读为主的数据库起到加速作用。
#生产环境中使用innodb_flush_method=O_DIRECT,如果不使用硬件RAID控制器或者使用SAN,则不用设置
#innodb_flush_method=O_DIRECT

#InnoDB使用Changebuffering以最小化随机IO,默认为25,最大值是50,代表bufferpool大小的25%,写多读少的业务,才需要调大这个值。
innodb_change_buffer_max_size=25

#InnDB事务等待行锁的时间长度。默认值是50秒。
#当一个事务锁定了一行,这时另外一个事务想访问并修改这一行,当等待时间达到innodb_lock_wait_timeout参数设置的值时,
#MySQL会报错"ERROR  1205 (HY000): Lock wait timeout exceeded; try restarting  transaction",同时会回滚语句(不是回滚整个事务)。
#如果想回滚整个事务,需要使用--innodb_rollback_on_timeout参数启动MySQL。在高交互性的应用系统或OLTP系统上,可以减小这个参数来快速显示用户的反馈或把更新放入队列稍后处理。
#在数据仓库中,为了更好的处理运行时间长的操作,可以增大这个参数。这个参数只应用在InnoDB行锁上,这个参数对表级锁无效。这个参数不适用于死锁,因为发生死锁时,InnoDB会立刻检测到死锁并将发生死锁的一个事务回退。
#我们一般会碰到,mysql innodb_lock_wait_timeout这个错,这个错是慢sql导致,它代表的是慢sql的事务锁超过了mysql锁超时的设置了。默认这个值为:50s,这个值是可以动态改变的,我不建议去改这个值,因为一个sql能达50s这得多夸张?
innodb_lock_wait_timeout=60

#专用redo磁盘文件系统路径
#innodb_log_group_home_dir=/usr/mysql/5.7/redo
#InnoDB写入磁盘日志文件所使用的缓存字节大小。
#如果innodb_page_size参数为32K,则默认值是8MB;如果innodb_page_size参数为64K,则默认值是16MB。
#如果日志的缓存设置较大,则MySQL在处理大事务时,在提交事务前无需向磁盘写入日志文件。建议设置此参数为4~8MB。
innodb_log_buffer_size=16M
#日志组中每个日志文件的字节大小。所有日志文件的大小(innodb_log_file_size * innodb_log_files_in_group)不能超过512GB。
#默认值为5M,远远不够,建议设置100M以上。
#logfile的大小调优:https://blog.csdn.net/liyanqiang19/article/details/93737632
innodb_log_file_size=512M
#InnoDB日志组包含的日志个数,3-5(默认2)。
#InnoDB以循环的方式写入日志,这个参数的默认值和推荐值均是2,日志的路径由innodb_log_group_home_dir参数设定。
innodb_log_files_in_group=3

#开启死锁日志计入到error_log中
innodb-print-all-deadlocks=true

#开启独立表空间,每个数据库的每个表都会生成一个独立的数据空间,.frm文件。
innodb-file-per-table=true

#开启后利用linux异步I/O在一定程度上提高系统的并发能力
innodb_use_native_aio=1

#InnoDB为独立表空间模式,每个数据库的每个表都会生成一个数据空间,0关闭,1开启
innodb_file_per_table = 1                          
innodb_adaptive_flushing=1
innodb_purge_threads=1
innodb_change_buffering=ALL
#当Innodb缓存池中脏页所占的百分比达到这个参数的值时,InnoDB会从缓存中向磁盘写入数据。默认值是75。
innodb_max_dirty_pages_pct=85
innodb_support_xa=1

#0,保障数据的完整性,会做清除脏页和插入缓冲区的合并操作,也会将脏页全部刷新到磁盘上面去,但是这个时候关闭的速度是最慢的innodb_max_dirty_pages_pct 
#1,关闭MySQL的时候不会做清除脏页和插入缓冲区的合并操作,也不会将脏页刷新到磁盘
#2,不会做清除脏页和插入缓冲区的合并操作,也不会将脏页刷新到磁盘,但是会刷新到redolog里面,再下次启动mysql的时候恢复
innodb_fast_shutdown=0


#事务中超时报错回滚开启,需结合事务隔离级别,注意RR+TRUE的时候事务超时前的sql也会回滚,其他组合不会。具体参照https://www.cnblogs.com/gjc592/p/12084729.html,
#innodb_rollback_on_timeout=true

#InnoDB标准监控输出文件
#innodb-status-file=TRUE

#InnoDB系统表空间所使用的数据文件的物理路径,默认路径是MySQL数据文件路径。如果这个参数的值为空,可以在innodb_data_file_path参数里使用绝对路径
#(专用data磁盘文件系统路径,存储系统表空间,建议不要明确设置,如需设置,ibdata1的大小需要和实际大小相同)
#innodb_data_home_dir=/data/mysql/data
#InnoDB数据文件的路径和大小。
#innodb_data_file_path=ibdata1:2000M;ibdata2:10M:autoextend


#此选项为创建索引时使用,创建完释放,一般不用设置,默认1M
#innodb-sort-buffer-size=1M

########################################
#---------------replicate--------------#
#relay-log=/usr/mysql/5.7/mysql-relay-bin
#relay-log-index=relay3306.index
#log-slave-updates


########################################
#--------------MyISAM引擎--------------#

#所有线程所共有的MyISAM表索引缓存,这块缓存被索引块使用。
#增大这个参数可以增加索引的读写性能,在主要使用MyISAM存储引擎的系统中,可设置这个参数为机器总内存的25%。
#如果将这个参数设置很大,比如设为机器总内存的50%以上,机器会开始page且变得异常缓慢。
#可以通过SHOW STATUS 语句查看 Key_read_requests,Key_reads,Key_write_requests, and  Key_writes这些状态值。正常情况下Key_reads/Key_read_requests  比率应该小于0.01。
#数据库更新和删除操作频繁的时候,Key_writes/Key_write_requests 比率应该接近1。
#建议设置内存的30-40%
#https://www.imooc.com/article/47132
key_buffer_size=256M
#在REPAIR TABLE、CREATE INDEX 或 ALTER TABLE操作中,MyISAM索引排序使用的缓存大小。
myisam_sort_buffer_size=128M
#当重建MyISAM索引的时候,例如执行REPAIR  TABLE、 ALTER TABLE、 或 LOAD DATA  INFILE命令,MySQL允许使用的临时文件的最大容量。如果MyISAM索引文件超过了这个值且磁盘还有充裕的空间,增大这个参数有助于提高性能。
myisam_max_sort_file_size=100G
#如果这个参数的值大于1,则MyISAM表在执行Repair操作的排序过程中,在创建索引的时候会启用并行,默认值为1。
myisam_repair_threads=1
#设置MyISAM存储引擎的恢复模式。变量值是OFF、DEFAULT、BACKUE、FORCE或QUICK值的任意组合。如果指定多个值,则用逗号分隔。
#在服务器启动时指定不带值的变量与指定DEFAULT相同,并且指定exlitvale为“禁用恢复(与值OFF相同)”。
#如果启用了恢复,那么每次mysąld打开MyISAM表时,它会检查表是否被标记为崩溃或未被正确关闭。(最后一个选项只在禁用外部锁定的情况下运行)
#如果是这种情况,mysqld会对表进行检查。如果表被损坏,mysqld尝试修复它。
myisam_recover_options=BACKUP,FORCE

[mysqlhotcopy]
interactive-timeout

[mysqld_safe]
#文件描述符
open-files-limit=32767
#限制Innodb能打开的表的数据
innodb_open_files=32767

重要的参数

有一些比较重要的参数如下,其他详见配置文件

  • 查询缓存
    是否开启,根据业务需求决定,在高并发系统,对性能影响很大

  • SDD与普通硬盘
    在这里插入图片描述

  • 其他与硬件相关
    innodb_buffer_pool_size
    在这里插入图片描述
    innodb_read_io_threads
    innodb_write_io_threads
    在这里插入图片描述

参考链接

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云帆Plan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值