Mysql服务器参数小结

内存配置相关参数

mysql设置分配需要考虑到操作系统需要使用内存,其他应用程序所要使用的内存,mysql的会话数以及每个会话使用的内存,然后就是操作系统实例所使用的的内存。生产环境的mysql往往都是一个实例独占一个服务,因此mysql实例需要考虑mysql的会话数,会话内存以及实例内存。
会话内存参数会为每一个连接会话分配对应大小的内存,相关的主要参数有如下几个:
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会为每个客户连接发放该缓冲空间,所以应尽量适当设置该值,以避免内存开销过大。
实例相关的内存:
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更好(上述状态值可以使用'key_read%'获得用来显示状态数据)。key_buffer_size只对MyISAM表起作用。即使你不使用MyISAM表,但是内部的临时磁盘表是MyISAM表,也要使用该值。设置改制大小可通过以下语句获取。

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中,但是并不会引起数据刷新到磁盘中,这样在系统崩溃时候有可能造成1s的数据丢失。
innodb_flush_method:这个参数控制着innodb数据文件及redo log的打开、刷写模式。
fdatasync,调用fsync()去刷数据文件与redo log的buffer。(默认)
O_DSYNC,innodb会使用O_SYNC方式打开和刷写redo log,使用fsync()刷写数据文件。
O_DIRECT,innodb使用O_DIRECT打开数据文件,使用fsync()刷写数据文件跟redo log。
innodb_double_wirte:双写缓存 ,用来缓存保护数据避免写数据块时造成了数据块损坏。

myisam相关的参数

delay_key_write
DELAY_KEY_WRITE是指在表关闭之前,将对表的update操作只更新数据到磁盘,而不更新索引到磁盘,把对索引的更改记录在内存。

安全相关配置参数

expire_logs_days
指定二进制日志是保留的天数
skip_name_resolve
禁用DNS查找
read_only
将数据库设置为只读模式
skip_slave_start
mysql启动后不会启动主从复制

其他配置

sync_binlog同步二进制日志的频率.设置0是的bin log日志刷新到磁盘完全依赖于文件的操作系统.当设置为n时指每个N次操作时进行磁盘同步.这里将磁盘设置为1是最安全的设置.
tmp_table_size:它规定了内部内存临时表的最大值,每个线程都要分配.如果内存临时表超出了限制,MySQL就会自动地把它转化为基于磁盘的MyISAM表,存储在指定的tmpdir目录下
max_heap_table_size
这个变量定义了用户可以创建的内存表(memory table)的大小.这个值用来计算内存表的最大行数值。这个变量支持动态改变,即set @max_heap_table_size=#,但是对于已经存在的内存表就没有什么用了,除非这个表被重新创建(create table)或者修改(alter table)或者truncate table。服务重启也会设置已经存在的内存表为全局max_heap_table_size的值。这个变量和tmp_table_size一起限制了内部内存表的大小。
max_connections
设置mysql会话连接的最大值

你可能感兴趣的:(Mysql服务器参数小结)