当前位置: 首页 > 科技观察

优化MySQL:3个简单的小调整

时间:2023-03-13 12:30:42 科技观察

如果你不改变MySQL的默认配置,你的服务器的性能就会像标题图中一档的法拉利。我不奢望成为专家级的DBA,但是我在优化MySQL的时候,提倡80/20原则,就是说通过简单的调整一些配置,就可以挤出高达80%的性能提升。尤其是现在服务器资源越来越便宜了。警告没有两个数据库或应用程序是相同的。这假设我们正在调整的数据库是针对“典型”网站的,其中快速查询、良好的用户体验和处理大量流量是优先事项。在优化服务器之前,请做好数据库备份!1.使用InnoDB存储引擎如果你还在使用MyISAM存储引擎,是时候切换到InnoDB了。InnoDB优于MyISAM的原因有很多。如果你关心性能,我们来看看它们是如何使用物理内存的:MyISAM:只在内存中存储索引。InnoDB:将索引和数据保存在内存中。结论:存储在内存中的内容可以比在磁盘上更快地被访问。以下是如何在表上切换存储引擎:ALTERTABLEtable_nameENGINE=InnoDB;注意:您已经创建了所有适当的索引,对吗?为了获得更好的性能,索引应该始终是最高优先级。2.让InnoDB使用所有内存您可以在my.cnf文件中编辑您的MySQL配置。使用innodb_buffer_pool_size参数来配置允许InnoDB在您的服务器上使用的物理内存量。为此(假设您的服务器仅运行MySQL),公认的“经验法则”是将其设置为服务器物理内存的80%。在不使用swap分区的情况下保证操作系统正常运行的内存足够后,再为MySQL分配尽可能多的物理内存。因此,如果您的服务器有32GB的物理内存,您可以将该参数设置为最多25GB。innodb_buffer_pool_size=25600M*注:(1)如果你的服务器内存小,小于1GB。为了应用本文中的方法,您应该升级您的服务器。(2)如果你的服务器内存很大,比如有200GB,那么按照常理,你不需要为操作系统预留最多40GB的内存。*3.让InnoDB运行多个任务。如果服务器上参数innodb_buffer_pool_size的配置大于1GB,InnoDBbufferpool会根据参数innodb_buffer_pool_instances的设置分成倍数。拥有多个缓冲池的好处是当多个线程同时访问缓冲池时可能会遇到瓶颈。可以通过启用多个缓冲池来最小化这种争用:官方对缓冲池数量的建议是:为了达到最佳效果,考虑innodb_buffer_pool_instances和innodb_buffer_pool_size的设置,确保每个实例至少有一个小于1的缓冲池大于1GB。因此,在我们的示例中,在具有32GB物理内存的服务器上将参数innodb_buffer_pool_size设置为25GB。一个合适的设置是25600M/24=1.06GBinnodb_buffer_pool_instances=24注意!修改my.cnf文件后,需要重启MySQL才能生效:sudoservicemysqlrestart优化这些参数还有更科学的方法,但是可以把这几点作为一个通用的指导方针,这样会提高你的MySQL的性能服务器更好。