服务器硬件的优化

提升硬件设备,例如选择尽量高频率的内存(频率不能高于主板的支持)、提升网络带宽、使用SSD高速磁盘、提升CPU性能等。

CPU的选择:

  • 对于数据库并发比较高的场景,CPU的数量比频率重要。
  • 对于CPU密集型场景和频繁执行复杂SQL的场景,CPU的频率越高越好。

MySQL数据库配置优化

long-query-time=0.3

#慢查询日志的阈值设置,单位秒。

[mysqld]
slow_query_log = on
log-slow-queries = /home/mysql/log/mysqld-slow-query.log
long-query-time  = 3

innodb_buffer_pool_size

#缓冲池字节大小。推荐值为物理内存的50%~80%。

sql> show global variables like 'innodb_buffer_pool_size';

sql> show global status like 'Innodb_buffer_pool_pages_data';

sql> show global status like 'Innodb_buffer_pool_pages_total';

val = Innodb_buffer_pool_pages_data / Innodb_buffer_pool_pages_total * 100%

val > 95%
考虑增大 innodb_buffer_pool_size, 建议使用物理内存的75%

val < 95%
考虑减小 innodb_buffer_pool_size, 建议设置为:
Innodb_buffer_pool_pages_data * Innodb_page_size * 1.05 / (1024*1024*1024)G

my.cnf既支持单位字节、也支持单位G或M,而session中修改仅支持单位字节的方式

innodb_buffer_pool_size = 2G                   #设置2G
innodb_buffer_pool_size = 2147483648 #设置2G
innodb_buffer_pool_size = 500M            #设置500M

参考:https://www.49855.net/mysql-innodb_buffer_pool_size/

innodb_max_dirty_pages_pct=30

#脏页占innodb_buffer_pool_size的比例时,触发刷脏页到磁盘。

推荐值为25%~50%。

innodb_io_capacity=200

#后台进程最大IO性能指标。表示每秒刷新脏页的数量,默认200,如果SSD,调整为5000~20000

innodb_data_file_path

#指定innodb共享表空间文件的大小。

innodb_log_file_size

#过大,实例恢复时间长;过小,造成日志切换频繁。

innodb_flush_log_at_trx_commit=1

#用来控制redo log刷新到磁盘的策略。

  • 0:log buffer将每秒一次地写入log file中,并且log file的flush(刷到磁盘)操作同时进行.该模式下,在事务提交的时候,不会主动触发写入磁盘的操作;
  • 1:每次事务提交时MySQL都会把log buffer的数据写入log file,并且flush(刷到磁盘)中去;
  • 2:每次事务提交时MySQL都会把log buffer的数据写入log file,但是flush(刷到磁盘)操作并不会同时进行。该模式下,MySQL会每秒执行一次 flush(刷到磁盘)操作。

sync_binlog=1

#每提交1次事务同步写到磁盘中,可以设置为n。

  • 0,像操作系统刷其他文件的机制一样,MySQL不会同步到磁盘中去而是依赖操作系统来刷新binary log;
  • >0,MySQL 在每写 N次 二进制日志binary log时,会使用fdatasync()函数将它的写二进制日志binary log同步到磁盘中去。

当innodb_flush_log_at_trx_commit和sync_binlog 都为 1 时是最安全的,在mysqld 服务崩溃或者服务器主机crash的情下,binary log 只有可能丢失最多一个语句或者一个事务。

但是鱼与熊掌不可兼得,双11 会导致频繁的io操作,因此该模式也是最慢的一种方式。

binlog_format=row

#mysql复制的形式,row为MySQL8.0的默认形式。

sql> show global variables like ‘innodb_buffer_pool_size’;

参考:https://www.49855.net/mysql-binlog_format/

max_connections=200

#调高该参数则应降低interactive_timeout、wait_timeout的值。

参考:https://www.49855.net/mysql-innodb_buffer_pool_size/

general_log=0

#全量日志建议关闭。默认关闭。

sql> show global variables like ‘innodb_buffer_pool_size’;

作者 admin

百度广告效果展示