Mysql服务器采用默认配置,过于通用,未针对特定服务器进行优化。如果不调整Mysql,则无法获得高效的服务器资源利用率。通过调整Mysql,您可以获得10倍...数据库服务器性能提高倍。
使用最新的Mysql版本
伙计,只需升级您的服务器,不要争论。最新版本不费吹灰之力地带来了(除其他好处外)性能优化(不要对你的DevOps这么说,因为他害怕升级任何东西)。
InnoDBvsMyISAM
长话短说,不要使用Myisam,使用InnoDB。聪明的人说,当你的写入量低,读取量高时,你可以使用MyISAM。但是狗屎,这很难控制,更难计划。最重要的是,它不仅与性能和节省的磁盘空间有关。
为什么InnoDB更好?
首先,InnoDB是未来,MyISAM是过去。InnoDB与MyISAM有很多好处,但从性能感知来看,重要的是行级锁和聚簇索引。
行级锁与表级锁
虽然MyISAM将锁定每次写入的完整表,但InnoDB将仅锁定相应的行(或行):
这会导致在大量同时写入操作的情况下出现巨大的性能差异。如您所见,MyISAM只会将所有客户端排成长等待队列,而InnoDB将并行处理尽可能多的客户端(只要它们访问不同的行)。当您拥有组合读/写环境时,这将产生显着的性能提升(在我们的艰苦生活中,99.99%的情况)。
聚集索引
InnoDB将行数据存储在其主键“附近”(这就是为什么它们被称为集群)。此方法可节省检索主键找到的行数据的时间:
Mysql服务器将需要单个操作来按主键查找行并获取整行数据。如果没有为InnoDB表定义主键(请不要这样做),Mysql将尽力使用唯一索引或虚拟列作为主键。
调整InnoDB配置
调整文件(Mysql服务器配置文件)中的多个InnoDB选项是提高Mysql服务器性能的必要条件:my.conf
nano/etc/mysql/my.cnf
增加缓冲池
缓冲池基本上是InnoDB存储表数据和索引缓存的内存区域。
增加缓冲池始终是开始调优的好步骤。将缓冲池大小设置为服务器上可用RAM的80%(例如,在16GRAM服务器上):
innodb_buffer_pool_size=12G
当您重新启动具有大型缓冲池和数据库本身中大量数据的Mysql服务器时,请准备好等待片刻。但是伙计,您是否经常重新启动生产Mysql服务器?
增加日志文件和日志缓冲区
当InnoDB表中的数据发生变化时,Mysql会先将更改写入缓冲池。之后,它将更改操作(以低级格式)记录到日志文件(所谓的“重做日志”):
如果这些日志文件很小,Mysql必须直接对磁盘进行大量写入数据文件。因此,请将日志文件设置为大(如果可能,与缓冲池一样大):
innodb_log_file_size=12G
警告。当您更改选项时,您必须在重新启动服务器时删除旧的日志文件:innodb_log_file_size
servicemysqlstoprm/var/lib/mysql/ib_logfile*servicemysqlstart
大型事务将强制Mysql将大量数据写入日志文件。为了节省资源,Mysql会先将数据写入日志缓冲区:
如果日志缓冲区小于事务影响,Mysql将不得不等到将所有内容写入磁盘。如果您有一次插入/更新/删除多行的查询,请增加日志缓冲区:
innodb_log_buffer_size=M
更改数据刷新周期和方法
Mysqly必须偶尔将数据写入磁盘。这称为将数据刷新到磁盘。首先要更改的是Mysql刷新数据的频率,由选项控制:innodb_flush_log_at_trx_