<code id='6y170'><strong id='6y170'></strong></code>

    <i id='6y170'></i>
    <ins id='6y170'></ins>

  1. <tr id='6y170'><strong id='6y170'></strong><small id='6y170'></small><button id='6y170'></button><li id='6y170'><noscript id='6y170'><big id='6y170'></big><dt id='6y170'></dt></noscript></li></tr><ol id='6y170'><table id='6y170'><blockquote id='6y170'><tbody id='6y170'></tbody></blockquote></table></ol><u id='6y170'></u><kbd id='6y170'><kbd id='6y170'></kbd></kbd>
  2. <fieldset id='6y170'></fieldset>

      <span id='6y170'></span>

        <i id='6y170'><div id='6y170'><ins id='6y170'></ins></div></i>
          <dl id='6y170'></dl>
          <acronym id='6y170'><em id='6y170'></em><td id='6y170'><div id='6y170'></div></td></acronym><address id='6y170'><big id='6y170'><big id='6y170'></big><legend id='6y170'></legend></big></address>
        1. Linux下MySQL数据库性能调优方法

          • 时间:
          • 浏览:3
          • 来源:124软件资讯网

            以下的情况具备一定的代表性  ,可以说是中小企业一样平常设置和事情情况 。希望通过本文能让各人明白Linux下MySQL数据库性能调优要领  。

            硬件准备情况:

            硬盘: 16块 SAS 15K RAID5 带512MCache

            CPU: AMD 4核两颗

            内存: 16G

            软件情况:

            操作系统: RedHat AS4.6 2.6.9-67.ELsmp MySQL: 5.0

            下面划分凭据差别场景举行性能调优:

            使用场景A: 写操作(插入/查询/删除)麋集  ,而且数据容量远远超硬件准备情况:

            硬盘: 16块 SAS 15K RAID5 带512MCache

            CPU: AMD 4核两颗

            内存: 16G

            软件情况

            操作系统: RedHat AS4.6 2.6.9-67.ELsmp

            MySQL: 5.0

            下面划分凭据差别场景举行性能调优:

            使用场景A:

            写操作(插入/查询/删除)麋集  ,而且数据容量远远凌驾内存的巨细(最小是200G以上 ,甚至更大到1.5T以上)  , 每秒需要以千为单元的事务操作

            数据可靠性要求不高  ,允许丢几条记载(硬件出故障时)

            优化方式:

            在这种情形下  ,数据库的Cache基本上掷中率是很是低的  ,对数据库的操作基本上就是对磁盘举行操作 , 因此偏重点应该是对磁盘相关优化  。

            首先是思量数据库存储引擎  ,由于涉及插入/删除/查询等操作 ,而且要支持事务  ,因此思量使用InnoDB存储引擎 ,不思量MyIsam缘故原由是该存储引擎是表级锁 ,有数据删除时会很是慢 。

            设置合适的MySQL 参数 ,由于有16G内存 ,因此参数设置如下

            innodb_buffer_pool_size=8G innodb_additional_mem_pool_size = 800M, innodb_log_buffer_size = 4M innodb_log_file_size = 500M innodb_log_files_in_group = 4 log-bin 由于使用主备复制  ,因此需要打开Log-Bin ,这里就涉及一个sync-bin的观点  ,缺省情形下  ,sync-bin 在MySQL中是关闭的  ,但存在一个风险 ,由于写日志没有刷新到硬盘中去的话  ,日志是写在操作系统的文件系统里的Cache中 ,这样若机械断电  ,那么日志信息将部门丢失  。为了淘汰数据丢失  ,我们测试了sync-bin=1,sync-bin=5和sync-bin=20 ,三种情形  ,sync-bin=1的情形下  ,丢失数据最坏概率是丢一个事务的数据 ,但性能很是差;设置sync-bin=5的情形下 ,性能可以提高1倍左右;设置sync-bin=20时 ,性能比sync-bin=5又可以提高1倍  ,设置大于20的值 ,基本上相差不大  ,性能提高不了几多  ,最坏20个事务数据丢失是在我们的允许规模之内  ,因此设置20是个合理的值  ,这个值详细取决于你的系统能够最坏允许丢少的事务数据  。

            若你的系统对数据丢失不于思量 ,可以关闭sync-bin,这时数据刷新到硬盘完全取决于操作系统的设置  ,相关的设置参数有如下:

            /proc/sys/vm/dirty_ratio 这 个参数控制一个历程在文件系统中的文件系统写缓冲区的巨细  ,单元是百分比  ,表现系统内存的百分比 ,表现当一个历程中写缓冲使用到系统内存几多的时间  ,再有 磁盘写操作时最先向磁盘写出数据  。增大之会使用更多系统内存用于磁盘写缓冲  ,也可以极大提高系统的写性能 。可是  ,当你需要连续、恒定的写入场所时 ,应该降 低其数值 ,一样平常缺省是 40 。更新要领

            echo 30 >/proc/sys/vm/dirty_ratio (或则修改/etc/sysctl.conf文件  ,增添sys.vm.dirty_ratio=30 重起机械)

            /proc/sys/vm/dirty_background_ratio 这个参数控制文件系统的pdflush历程  ,在何时刷新磁盘  。单元是百分比  ,表现系统总内存的百分比 ,意思是当磁盘的脏数据缓冲到系统内存几多的时间  ,pdflush最先把脏数据刷新到磁盘 。增大会使用更多系统内存用于磁盘写缓冲  ,也可以极大提高系统的写性能  。可是  ,当你需要连续、恒定的写入场所时  ,应该降低其数值 ,一样平常缺省是10 。

            /proc/sys/vm/dirty_writeback_centisecs Pdflush写后台历程每隔多久被叫醒并执行把脏数据写出到硬盘  。单元是 1/100 秒  。缺省数值是500 ,也就是 5 秒  。若是你的系统是连续地写入行动  ,那么现实上照旧降低这个数值比力好  ,这样可以把尖峰的写操作削平成多次写操作  。设置要领如下:

            echo 200 >/proc/sys/vm/dirty_writeback_centisecs /proc/sys/vm/dirty_expire_centisecs 这个参数声明Linux内核写缓冲区内里的脏数据多“旧”了之后 ,pdflush历程就最先思量写到磁盘中去 。单元是 1/100秒  。缺省是 30000  ,也就是 30 秒的数据就算旧了  ,将会刷新磁盘  。对于特殊重载的写操作来说  ,这个值适当缩小也是好的  ,但也不能缩小太多  ,由于缩小太多也会导致IO提高太快  。建议设置为 1500  ,也就是15秒算旧  。

            echo 1500 >/proc/sys/vm/ dirty_expire_centisecs 因此若没有调整这些参数  ,所有以缺省值 ,而且关闭sync-bin的话 ,那么最多丢失的数据是:

            5秒种(dirty_writeback_centisecs)之内的  ,小于1.6G的数据(dirty_background_ratio  ,16G/10=1.6G)

            固然  ,现实上5秒之内不太可能写1.6G的数据  ,因此最坏就是5秒钟之内的数据丢失 。因此若要关闭sync-bin  ,又不想丢失太多数据的话  ,可以通过调整dirty_writeback_centisecs这个参数 ,如调整到200(2秒) ,这样最多就丢2秒钟的数据 。又可以提高数据的写能力  。

            MySQL里另有一个参数可以调整  ,提高数据库的写能力 ,那就是

            innodb_flush_log_at_trx_commit 这个参数默认是1  ,即每次事务Commit时 ,都刷新日志  ,以免数据丢失  。由于我们的系统允许丢失少量数据  ,因此可以把innodb_flush_log_at_trx_commit设置为2 ,允许丢失一个事务的数据  ,经测试 ,发现2可以提高25%左12下一页