MySQL性能优化之系统配置优化

  数据库优化维度有四个:硬件升级、系统配置、表结构设计、SQL语句及索引。按优化成本和优化效果两个不同维度排序,如下:
    优化成本:硬件升级>系统配置>表结构设计>SQL语句及索引。
    优化效果:硬件升级<系统配置<表结构设计<SQL语句及索引。
  即成本越高优化效果反而是最小的,所以如果做优化选择在条件许可下必然选择成本小效果好的。
  对于MySQL的性能优化,本文从软件可支配角度对系统配置优化进行探究,对其实现方式进行实践。
  1、保证从内存中读取数据

    MySQL会在内存中保存一定的数据,通过LRU算法将不常访问的数据保存在硬盘文件中。尽可能的扩大内存中的数据量,将数据保存在内存中,从内存中读取数据,可以提升MySQL性能。

    具体操作就是修改配置参数innodb_buffer_pool_size,将其扩大能够全然从内存中读取数据并最大限度降低磁盘操作。
   
 确定innodb_buffer_pool_size足够大:show global status like 'innodb_buffer_pool_pages_%';
      

     innodb_buffer_pool_size默认为128M,理论上可以扩大到内存的3/44/5。直接修改配置 my.cnf

        innodb_buffer_pool_size = 750M

        

    如果是专用的MySQL Server可以禁用SWAP

       

     使用命令swapoff -a ,可关闭所有交换设备和文件。

    让数据库占用更多内存的操作方式,如果要不影响其他同机运行的文件对内存设备要求比较高。
  
2、数据预热

    默认情况,仅仅有某条数据被读取一次后,才会缓存在 innodb_buffer_pool——即不用不加载。所以,数据库刚刚启动,须要进行数据预热,将磁盘上的全部数据缓存到内存中。数据预热能够提高读取速度,具体操作如下:

    1)对于InnoDB数据库,编写数据预热的脚本命名为:loadtomem.sql
    2)执行命令:mysql -uroot -pXXXX -AN < /root/loadtomem.sql > /root/loadtomem.sql

    3)在需要数据预热时,比如重启数据库执行命令:mysql -uroot < /root/loadtomem.sql > /dev/null 2>&1

  3、降低磁盘写入次数

    1)增大redolog,减少落盘次数:innodb_log_file_size 设置为 0.25 * innodb_buffer_pool_size。

    2)通用查询日志、慢查询日志可以不开 ,bin-log生产中不开通用查询日志,遇到性能问题开慢查询日志。

    3)写redolog策略 innodb_flush_log_at_trx_commit设置为02。如果不涉及非常高的安全性 (金融系统),或者基础架构足够安全,或者事务都非常小,都能够用 0或者 2 来减少磁盘操作。

  4、提高磁盘读取性能

     这个就是内存磁性能的问题了,经济条件许可下采购性能更好的内存盘。

  

    

posted on 2022-02-24 15:10  池塘里洗澡的鸭子  阅读(657)  评论(0编辑  收藏  举报