在MySQL服务器高负载的情况下,必须采取一种措施给服务器减轻压力,减少服务器的IO操作。一般采用的方法是优化SQL操作语句,优化服务器的配置参数,从而提高服务器的性能。MySQL使用了几种内存缓存数据的策略来提高性能。对于使用和管理MySQL的人员来说,了解并掌握MySQL数据库的缓存机制和MySQL是如何利用内存来提升数据高频率的存取性能,是很重要的一个方面。
16.1 MySQL的缓存机制
MySQL缓存主要包括关键字缓存(Key Cache)和查询缓存(Query Cache),本节主要讲解MySQL的查询缓存机制。
16.1 查询缓存概述
在MySQL的性能优化方面经常涉及到缓存区(Buffer)和缓存(Cache),MySQL通过在内存中建立缓存区(Buffer)和缓存(Cache)来提升MySQL的性能。对于InnoDB数据库,MySQL采用缓存池(Buffer Pool)的方式来缓存数据和索引;对于MylSAM数据库,MySQL采用缓存的方式来缓存数据和索引。
MySQL查询缓存机制(Query Cache)简单地说就是缓存SQL语句及查询结果,如果运行相同的SQL,服务器直接从缓冲中取到结果,而不需要再去解析和执行SQL。而且这些缓存能被所有的会话共享,一旦某个客户端建立了查询缓存,其他发送同样SQL语句的客户端也可以使用这些缓存。
如果表更改了,那么使用这个表的所有缓存查询将不在有效,查询缓存值的相关条目被清空。更改指的是表中任何数据或是结构的改变,包括INSERT、UPDATE、DELETE、TRUNCATE、ALTER TABLE、DROP TABLE或DROP DATABASE等。也包括那些映射到改变了的表的使用MERGE表的查询。显然,这对于频繁更新的表,查询缓存是不适合的,而对于一些不常改变数据且有大量相同SQL查询的表,查询缓存会节约很大的性能。
查询必须是完全相同的(逐字节)才能够被认为是相同的,字符的大小写也被认为是不同的。另外,同样的查询字符串由于其他原因可能认为是不同的。使用不同的数据库、不同的协议版本或者不用默认字符集的查询被认为是不同的查询并且分别进行缓存。