数据库层与硬件层优化
优化概览
高性能的数据库依赖与几个因素,如表结构,查询语句,服务器的硬件配置和软件的设置。
软件上的构造直接导致了硬件层CPU和I/O操作,所以,我们优化的策略,一般为,减少不必要的磁盘I/O,尽量利用好表的物理结构,如索引来快速访问数据,达到高效的查询。
在数据库层的优化
让数据库应用更加快速的最重要的因素当然是它的基本的设计,如:
-
1:表的结构是否合理
这些表现在:是否使用了正确的数据类型,如果是一个写频繁的结构,是否一次一次写入,会更新到很多的列,这些的负荷是,会有相应的索引需要进行维护
-
2:是否使用了正确的索引
索引使用不当,当数据很大的时候,可能会被全部扫描,如果内存不够大,会利用相应的磁盘进行排序等操作,将会非常慢
-
3:是否使用了合理的存储引擎,
mysql中innodb支持事务与外键,并且索引和数据文件是一体的;如果你的引用对于事物要求不是很高,可以考虑使用MyISM,这个存储引擎的速度比较快的,但就是安全性方面有待考虑,并且索引和数据文件是分离的。
-
4:是否使用了正确的行格式
mysql中支持压缩的行格式,这样会导致更少的磁盘I/O和读写数据,当然不好的地方是不能在此上建立好的索引和进行数据的比较,比如blob等
-
5:是否你的应用程序使用了了锁策略
对于Innodb,使用了行级锁,这鼓励更多的并行操作,如果对与应用程序,如果能把锁移动到应用程序中,使用相应的语言特性,或是系统调用如互斥锁,信号量等来处理,而不应该把维护数据的正确行来锁表
-
6:是否使用了合理的缓存cache
这个缓存就更内存的分页一样,大了的话,会造成大量的碎片不能使用,因此,很多查询没有地方缓存而清空之前的缓存,当下一次查询时,就不能利用缓存了,另外,如果小了,会造成mysql对缓存的管理压力加大,因为会为没一次查询可能分好几页来缓存数据,管理这些数据是需要一定的开销的
硬件层的优化
当数据库更加忙的时候,对硬件的要求就更高了,因此,提前识别出系统的瓶颈,一般都是在内存达到80%时更换或添加相应的硬件,有效的慢SQL监控机制也是提前识别系统瓶颈的一种重要方法。
典型的瓶颈有以下方面:
-
1:磁盘I/O相关
下面几个是按照IOPS性能提升的幅度排序,对于磁盘I/O可优化的一些措施:
- (1)、使用SSD或者PCIe SSD设备,至少获得数百倍甚至万倍的IOPS提升;
- (2)、购置阵列卡同时配备CACHE及BBU模块,可明显提升IOPS(主要是指机械盘,SSD或PCIe SSD除外。同时需要定期检查CACHE及BBU模块的健康状况,确保意外时不至于丢失数据);
- (3)、有阵列卡时,设置阵列写策略为WB,甚至FORCE WB(若有双电保护,或对数据安全性要求不是特别高的话),严禁使用WT策略。并且闭阵列预读策略,基本上是鸡肋,用处不大;
- (4)、尽可能选用RAID-10,而非RAID-5;
- (5)、使用机械盘的话,尽可能选择高转速的,例如选用15KRPM,而不是7.2KRPM的盘,不差几个钱的;
-
2:内存带宽
当CPU需要更多的数据来填充cache时,主存可能会变成一个瓶颈,可以考虑更快更大的内存,相比,更快可能会好些,因为cpu的处理速度比内存的速度高几个数量级,如果内存足够快,相对来说,CPU等待的时间就少了,自然速度就是上去了