1.MySQL缓存
为了提高查询速度,我们可以通过不同的方式去缓存我们的结果从而提高响应效率。当我们的数据库打开了QueryCache(简称QC)功能后,数据库在执行SELECT语句时,会将其结果放到QC中,当下一次处理同样的SELECT请求时,数据库就会从QC取得结果,而不需要去数据表中查询。如果缓存命中率非常高的话,有测试表明在极端情况下可以提高效率%。
但一个缓存机制是否有效,效果如何,却是一个需要好好思考的问题。QueryCache有如下规则,如果数据表被更改,那么和这个数据表相关的全部Cache全部都会无效,并删除之。这里“数据表更改”包括:INSERT,UPDATE,DELETE,TRUNCATE,ALTERTABLE,DROPTABLE,orDROPDATABASE等。
举个例子,如果数据表item访问频繁,那么意味着它的很多数据会被QC缓存起来,但是每一次item数据表的更新,无论更新是不是影响到了cache的数据,都会将全部和item表相关的cache清除。如果你的数据表更新频繁的话,那么QueryCache将会成为系统的负担。有实验表明,糟糕时,QC会降低系统13%的处理能力。
1.1.1.全局缓存
数据库属于IO密集型的应用程序,其主职责就是数据的管理及存储工作。而我们知道,从内存中读取一个数据库的时间是微秒级别,而从一块普通硬盘上读取一个IO是在毫秒级别,二者相差3个数量级。所以,要优化数据库,首先第一步需要优化的就是IO,尽可能将磁盘IO转化为内存IO,也就是使用缓存
启动MySQL时就要分配并且总是存在的全局缓存,可以在MySQL的my.conf或者my.ini文件的[mysqld]组中配置。
目前有:key_buffer_size(默认值:,即M)、innodb_buffer_pool_size(默认值:即:M)、innodb_additional_mem_pool_size(默认值:即:8M)、innodb_log_buffer_size(默认值:即:8M)、query_cache_size(默认值:即:32M)等五个。总共:M.
1.1.1.1.key_buffer_size
key_buffer_size是用于索引块的缓冲区大小,增加它可得到更好处理的索引(对所有读和多重写),对MyISAM表性能影响最大的一个参数。如果你使它太大,系统将开始换页并且真的变慢了。
严格说是它决定了数据库索引处理的速度,尤其是索引读的速度。对于内存在4GB左右的服务器该参数可设置为M或M.
1.1.1.2.innodb_buffer_pool_size
innodb_buffer_pool_size:主要针对InnoDB表性能影响最大的一个参数。功能与Key_buffer_size一样。InnoDB占用的内存,除innodb_buffer_pool_size用于存储页面缓存数据外,另外正常情况下还有大约8%的开销,主要用在每个缓存页帧的描述、adaptivehash等数据结构,如果不是安全关闭,启动时还要恢复的话,还要另开大约12%的内存用于恢复,两者相加就有差不多21%的开销。
1.1.1.3.innodb_additional_mem_pool_size
innodb_additional_mem_pool_size设置了InnoDB存储引擎用来存放数据字典信息以及一些内部数据结构的内存空间大小,所以当我们一个MySQLInstance中的数据库对象非常多的时候,是需要适当调整该参数的大小以确保所有数据都能存放在内存中提高访问效率的。
1.1.1.4.innodb_log_buffer_size
innodb_log_buffer_size这是InnoDB存储引擎的事务日志所使用的缓冲区。类似于BinlogBuffer
InnoDB在写事务日志的时候,为了提高性能,也是先将信息写入InnofbLogBuffer中,当满足innodb_flush_log_trx_