数据库的性能取决于很多因素,比如:表,查询,和配置。配置就是最简单的算法,用于调整程序逻辑,以便适应更多场景。优化主要从如下几个方面进行:
- 硬件层面
- 数据库层面
- 可移植和性能的平衡
硬件层面
随着数据库的越来越忙碌,任何一个数据库应用最终会受到硬件的制约。一个DBA一定要评估是否可以通过调整应用或者重新配置服务器来避免瓶颈,是否需要更多硬件资源。系统瓶颈一般有如下几个来源:
-
磁盘寻址
磁盘上寻找一块数据的时间。在现在的磁盘中,平均时间通常小于10ms,所以我们可以寻找100次在1s内。这个时间对于新磁盘有小幅度提高,对单表的优化非常难。优化寻找数据的时间是将数据分布到多个磁盘。 -
磁盘读写
当磁盘到达正确的位置,我们需要读写数据。现在磁盘中,一个磁盘吞吐至少10-20MB/S。你可以通过并行读取多个磁盘。 -
CPU周期
当数据在内存的时候,我们为了得到结果来处理数据。大量的大表是主要的因素。对于小表,完全不是问题。 -
主存带宽
当CPU需要更多数据,而不是命中CPU自带的缓存。主存带宽就是一个瓶颈,多数系统基本不会是这个瓶颈。
数据库层面
- 表结构的合理性。列的数据类型的合理性,一个表中列的合理性。比如:多更新数据应该设计多表(少列),分析大量数据则设计成少表(多列)。
- 合理的索引。索引的数据结构伟B树,查询效率很高。而且Mysql的锁的机的粒度就是基于索引。
- 对于行的格式设定。Mysql的行的设置模式有:COMPACT,REDUNDANT,DYNAMIC,COMPRESSED。引擎Innodb默认COMPACT。
- 正确的锁策略。分为共享模式和排他模式,选用Innodb引擎性能更好。
- 配置缓存合适的大小。具体就是配置InnoDB buffer pool合适的大小。
可移植和性能的平衡
编写高新能的SQL语句(Mysql 特殊SQL方言)和可移植的SQL语句需要进行取舍。
网友评论