当服务器出现瓶颈时,对服务器的配置参数调整往往不是优先级最高的。一般来讲优化的效果是:SQL及索引>数据库表结构>系统配置>硬件,而优化的成本却恰好反过来,此外,对于大部分参数配置,mysql默认设置已经够用,也许调整后会有一些小提升,但可能也为其他方面的问题埋下隐患,因而服务器参数配置的一个原则应该是如果非必要,尽量不要随便调整参数。
对于OLTP场景,一般是高并发,事务提交要求小而快,属于cpu密集型,同时读写频繁,对于资源的竞争需要处理好,对性能要求较高。
对于OLAP场景,需要对大量数据进行查询搜集分析,对提交速度要求不如OLTP,应该尽量追求处理速度(就是说不要求你马上提交,因而可以尽量使用临时表等有帮助的手段提升数据处理过程的速度),由于需要处理大量数据,因而对硬盘io要求较高,属于io密集型。
OLTP场景配置
*硬件配置:
*CPU配置:对于OLTP场景多核处理器很有优势,现在的mysql一般可以在16~24核心cpu上运行较好,所以建议尽量使用更多核的处理器。
*内存配置:一般来讲要保证io等待的时间维持在可接受范围内选择内存大小。比如说在80%cpu利用率下,用于io等待的时间为1%,那么侧面说明缓存命中率还不错,内存应该够用,如果io等待占比较大的话,就应该考虑是否增大内存了(不过首先应该考虑的是mysql配置,查询,索引或者其他方面是否有异常,最后才考虑增加内存的问题)。
*硬盘配置:一般来讲使用多块硬盘组成的raid磁盘阵列,如果经费允许尽量使用ssd。对于oltp来说一般要保证安全性的话,并且对并发性速度有一定要求,则选择raid5,数据量大的话可以选择raid50,这种选择在磁盘损坏重建的时候会导致性能下降,如果钞票实在够多那也可以选择raid10.。
此外,对于数据库来说,硬盘具有断电保护(带有电池)的缓存功能很有必要,既可以提高读写速度,也可以一定程度保证断电