内存配置相关参数 mysql
mysql内存分配须要考虑到操做系统须要使用的内存,其余应用程序所要使用的内存,mysql的会话数以及每一个会话使用的内存,而后就是操做系统实例所使用的内存。生产环境的mysql每每都是一个实例独占一个服务,所以,mysql实例须要考虑 mysql 的会话数,会话内存以及实例内存。sql
会话内存参数会为每个链接的会话分配对应大小的内存,相关的主要参数有以下几个:数据库
sort_buffer_size:会话发送的语句须要进行排序时就会一次性分配对应的大小的缓存缓存
join_buffer_size:应用程序常常会出现一些两表(或多表)join 的操做需求,Mysql 在完成某些 join 需求的时候(all / index join),为了减小参与 join 的“被驱动表”的读取次数以提升性能,须要使用到 join buffer 来协助完成 join 操做。当 join buffer 过小,mysql 不会将该 buffer 存入磁盘文件,而是先将 join buffer 中的结果集与须要 join 的表进行 join 操做,而后清空 join buffer 中的数据,继续将剩余的结果集写入此 buffer 中,如此往复,会形成驱动表须要被屡次读取,成倍增长 IO 访问,下降效率。安全
read_buffer_size:mysql读入缓冲区的大小。对表进行顺序扫描的请求将分配一个读入缓冲区,mysql 会为他分配一段内存缓冲区。read_buffer_size 变量控制这一缓冲区的大小。若是对表的顺序扫描请求很是频繁,而且你认为频繁扫描进行的太慢,能够经过增长该变量以及内存缓冲区大小提升其性能。服务器
read_rnd_buffer_size:mysql 的随机读取缓冲区大小。当按任意顺序读取行时(例如,按照排序顺序),将分配一个随机读缓存区。进行排序查询时,mysql 会首先扫描一遍该缓冲,以免磁盘搜索,提升查询速度,若是须要排序大量数据,可适当调高该值。但 mysql 会为每一个客户链接发放该缓冲空间,因此应尽可能适当设置该值,以免内存开销过大。async
Innodb_buffer_size:InnoDB 使用该参数指定大小的内存来缓冲数据和索引,这个是 InnoDB引擎中影响性能最大的参数性能
key_buffer_size:myisam 决定索引处理的速度,尤为是索引读的速度。默认是 16M,经过检查状态值 key_read_requests(从缓存读取索引的请求次数) 和 key_reads(从磁盘读取索引请求次数),能够知道 key_buffer_size 设置是否合理。比例 key_reads / key_read_requests 应该尽量的低,至少是 1:100,1:1000 更好(SHOW STATUS LIKE 'key_read%')。key_buffer_size 只对 MyIsam 表起做用。即便你不使用 MyIsam 表,可是内部的临时磁盘表是 MyIsam 表,也要使用该值。设置该值大小能够经过以下语句获取。spa
select sum(index_length) from information_schema.tables where engine='myisam';操作系统
IO相关配置参数
innodb 相关参数
innodb_log_file_size:这个值设置 redo log 文件的大小
innodb_log_files_in_group:这个值设置 redo log 文件的个数
innodb_log_buffer_size:redo log 缓存池的大小
innodb_flush_log_at_trx_commit:这个参数设置了 mysql redo log 刷新到日志文件的方式。该参数设置有如下三个值:
0:每隔一秒 mysql 将 redo log buffer 中的数据刷新到操做系统 cache中,并刷新到磁盘中,可是事务提交并不会引发任何操做。这样会至少丢失1秒钟的数据。
1:在每次事务提交时执行 log 写入 cache,并将数据刷新到磁盘(系统默认)
2:事务提交时会将数据刷新到操做系统的cache中,可是并不会引发数据刷新到磁盘中,该模式下,mysql会每秒执行一次刷新到磁盘操做,这样在系统崩溃时有可能形成 1s 的数据丢失。
当设置为0,该模式速度最快,可是不太安全,mysqld 进程崩溃会致使上一秒全部事务数据的丢失。设置为1,该模式最安全,但也是最慢的一种方式。在mysqld服务器崩溃或者服务器主机 crash的状况下,binary log只有可能丢失最多一个语句或者一个事务。设置为2,该模式速度较快,也比0安全,只有在操做系统崩溃或者系统断电的状况下,上一秒数据才会丢失(介于0,1之间)
innodb_flush_method:这个参数控制着 innodb 数据文件及 redo log的打开、刷写模式。有三个值:fdatasync(默认,调用 fsync() 去刷数据文件redo log的buffer)、O_DSYNC、O_DIRECT
innodb_double_write:双写缓存,用来缓存保护数据避免写数据块时形成数据块损坏
MyIsam相关参数
delay_key_write:指在表关闭以前,将对表的 update 操做只更新数据到磁盘,而不更新索引到磁盘,把对索引的更改记录在内存
安全相关配置参数
expire_log_days:指定二进制日志保留的天数
skip_name_resolve:禁用DNS查找
read_only:将数据库设置为只读模式
skip_slave_start:mysql启动后不会启动主从复制
其余配置
sync_binlog:同步二进制日志的频率,设置0的表示 mysql 不控制 bin log的刷新, bin log 日志刷新到磁盘彻底依赖于文件的操做系统,这时候的性能是最好的,可是风险也是最大的。当设置为 n 时,指每一个 N 次操做时进行磁盘同步,这里将磁盘设置为1是最安全的设置,可是刷新的频率太高对 IO 的影响也很是大。
tmp_table_size:规定了内部内存临时表的最大值,每一个线程都要分配,若是内存临时表超出了限制,mysql 就会自动地把它转化为基于磁盘的 MyIsam表,存储在指定的 tmpdir 目录下
max_heap_table_size:这个变量定义了用户能够建立的内存表(memory table)的大小,这个值用来计算内存表的最大行数值。这个变量支持动态改变,即 set @max_heap_table_size = xxx,可是对于已经存在的内存表就没有什么用,除非这个表被从新建立或者修改或者 truncate table,服务重启也会设置已经存在的内存表为全局 max_heap_table_size 的值。这个参数和 tmp_table_size 一块儿限制了内部内存表的大小
max_connections:设置 mysql 会话链接的最大值