数据库应用优化(二)服务器和配置优化

mysql中有多种存储引擎,每种引擎都有自己的特色。

用途:       MyISAM:快读,Memory:内存数据,InnoDB:完整的事务支持
锁:           MyISAM:全表锁定,Memory:全表锁定,InnoDB:多种隔离级别的行锁
持久性:    MyISAM:基于表恢复,Memory:无磁盘I/O,无可持久性,InnoDB:基于日志恢复
事务类型: MyISAM:不支持,Memory:不支持,InnoDB:支持
支持索引类型: MyISAM:B-tree/FullText/R-tree,Memory:Hash/B-tree,InnoDB:Hash/B-tree

MyISAM注重性能,InnoDB注重事务,一般使用MyISAM类的表做非事务型的业务,最新的mysql建表默认都
是InnoDB类型的。MyISAM在高并发的性能瓶颈很明显,主要原因就说锁定机制导致阻塞。而InnoDB在
锁定机制采用行行级锁,不同于MyISAM的表级锁,行级锁在锁定上带来的消耗大于表级锁,但是在系统并
发访问量高时,InnoDB整体性能高于MyISAM。同时,InnoDB的索引不仅缓存索引本身,也缓存数据,
所以InnoDB需要更大的内存。

选择合适存储引擎

(1)采用MyISAM 引擎
            1.R/W(读写比例)>100:1切update相对较少
            2.并发不高,不需要事务
            3.表数据量小
            4.硬件资源有限
(2)采用InnoDB
          1.R/W(读写比例) 较小,频繁更新大字段
          2.表数据量超过1000W,并发高
          3.安全性和可用性要求高
 (3)采用Memory
          1.有足够的内存
          2.对数据一致性要求不高
          3.需要定期归档的数据

mysql服务器调整优化措施

     1.关闭不必要的二进制日志和慢查询日志,仅在内存足够和开发调试时打开他们,使用下面的语句查看是否打
开。
        show variables like '%slow%';
        还可以使用下面的语句查看慢查询的条数,定期打开方便优化
        show global status like '%slow%';
        但是慢查询也会带来一些CPU损耗,建议间断性打开慢查询日志来定位性能瓶颈
      2.适度使用Query,Cache
      3.增加mysql允许的最大连接数,使用下面的语句查看mysql允许的最大连接数
              show  variables like 'max_connections';
      4.对于MyISAM表适当增加key_buffer_size,这需要根据key_cache的命中率进行计算,例如:
              show global status like 'key_read%';
         计算方式  key_cache_miss_rate=Key_reads/Key_read_requests*100%;
        当key_cache_miss_rate值大于1%时就需要适当增加key_buffer_size了,对于MySAM,还需要注table_cach
        e的设置。当table_cache不够用的时候,mysql会采用LRU【缓存淘汰算法】踢掉最长时间没有使用的表;如果table_cache设置
过小,MySAM就会反复打开、关闭FRM文件,造成一定的性能损失;如果table_cache
设置过大,mysql将会消耗很多CPU资源
去处理table_cache的算法。因此table_cache值一定要合理,可以参考opened_tables参数的值,如果这个值一直增长,就需要适当增加table_cache值,
    对于InnoDB,需要重点注意,innodb_buffer_pool_size参数。
    5.从表中删除大量行后,可运行OPTIMIZE TABLE TableName 进行碎片整理。
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!