1)默认存储引擎
default_storage_engine=innodb
2)独立表空间
innodb_file_per_table=1
3)"双一"标准——控制将redo log刷写到磁盘的设置。
innodb_flush_log_at_trx_commit=1
mysql中的数据写入磁盘过程以下图为例。redo log会先从redo buffer中刷写到文件系统缓存中,再从OS buffer中被刷写到磁盘上。
当参数为1,意味着每次事务提交时,redo log会先刷写到OS buffer中,并立即刷写到磁盘中,commit动作才算执行完成。
当参数为0,意味着每秒,日志从mysql buffer刷写到os buffer,并且刷写到磁盘。根据每秒的时间作为刷写磁盘的触发器,当断电时,就会丢失该秒提交的许多事务。
当参数为2,意味着每次提交事务,会把日志从mysql buffer刷写到os buffer中;每秒钟把日志从os buffer中刷写到磁盘中。
追求安全,选1;
追求性能,选0。
4)
控制buffer pool(ibd数据文件)和redo buffer的刷写策略,
从mysql buffer到DISK中日志和数据刷写的顺序如图所示。
innodb_flush_method=FSYNC
innodb_flush_method=O_DSYNC
innodb_flush_method=O_DIRECT
一般建议选择O_DIRECT。
考虑安全,选O_DIRECT;
考虑性能,选FSYNC。
5)
日志缓冲区大小设置
innodb_log_buffer_size
日志文件大小
innodb_log_file_size
redo文件的个数
innodb_log_files_in_group
6)
innodb_max_dirty_pages_pct=75
脏页刷写策略(脏页刷写策略的机制之一)
以上面的75为例,当脏页占用内存比例的75%时,会触发脏页“写”。希望脏页写的快一点,就要把该数据调小,可能会影响性能。
ps.还有其他触发脏页写的机制:
CSR;
redo被写满了。
7)最大并发连接数
max_connections=1024
8)当短时间内mysql的连接数据达到max_connections时,新来的请求将被存在堆栈中,等待某一连接释放资源,该堆栈的数量就是back_log。一般不建议设置过大,不然会给客户端一种“卡了”的体验,大量进程会夯住。
back_log=1024
9)关闭非交互式连接所等待的秒数(连接后啥都不干)
wait_timeout=300
关闭交互式连接所等待的秒数
interactive_timeout=1800
10)临时表的缓冲区或Myisam表的索引缓冲区
key_buffer_size=64M
内存临时表占内存和磁盘临时表之和的比例越高越好,判断如下:
在命令行输入
show status like "%created_tmp%";
然后计算公式
created_tmp_disk_tables/(created_tmp_disk_tables+created_tmp_tables)
该值控制在5%-10%以内最佳
11)排序缓冲区大小,为每个需要排序的线程提供一个该大小的缓冲区,但设置过高会耗尽系统内存资源。
sort_buffer_size=1M
读入缓冲区大小,同上,每个连接分配的内存独享。
read_buffer_size=1M
12)服务端接收的数据包大小
max_allowed_packet=256M
13)服务器线程缓存。在缓存数未达到上限时,断开连接的客户端线程将被放到缓存中来响应下一个客户请求,请求从缓存中读取;若缓存为空,则创建新的线程。
thread_cache_size=16
14)用该大小的内存来缓冲数据和索引
innodb_buffer_pool_size=2048M
最大设置为物理内存的80%,建议一般不超过70%。
15)“双一”标准
sync_binlog=1
将binlog刷写到磁盘后,才算事务提交成功,最安全;
参数为0,由文件系统而非mysql去控制缓存的刷新,性能最高。