有很多的服务器选项会影响这MySQL服务器的性能,比如内存中临时表的大小、排序缓冲区等。有些针对特定存储引擎(如InnoDB)的选项,也会对查询优化很有用。
调整服务器的配置从某种程度来说是一个影响全局的行为,因为每个修改都可能对该服务器上的每个查询造成影响。不过有些选项是针对特定类型的优化的,如果你的请求没有满足条件,它将没有任何作用。
首先我们需要检查的选项是缓冲区大小(buffersize)
每个缓冲区都有其存在的特定原因,一般的规律是大缓冲区意味着高性能,不过仅当请求可以针对该缓冲区扮演的特定角色使用大容量缓存的时候。
当然,增加缓冲区大小是有代价的,下面是一些大缓冲区可能带来的影响。
?交换区
大容量缓冲区可能会导致会使用到操作系统级别的交换区从而造成性能缓慢,这取决于系统内存大小。通常情况下,MySQL服务器在它所需的所有内存都来自物理内存的时候运行最快。当它使用到交换区的时候,性能显著下降。
当为缓冲区分配的内存大小超过服务器的物理内存大小的时候就会使用到交换区。有一些缓冲区是针对每个用户线程的。要确定这些缓冲区究竟需要多少内存,可以用公式max_connections*buffer_size来计算。计算出所有缓冲区的内存和,并确保小于mysqld服务器可以使用的内存大小。
?启动时间
mysqld需要分配的内存越多,其启动时间就越长。
?过期数据
我们还会有伸缩性问题,大部分时候是来自线程间的缓存共享。在这些场景中,扩充缓冲区做缓存会产生内存碎片。你通常会在服务器运行数小时后发现内存碎片问题,该问题发生在旧的数据需要从缓冲区中移除以给新数据腾出空间的时候。这会导致高速运转的服务器变慢。
其次我们不仅