MySQL内存及虚拟内存优化设置参数

2019-01-03 23:47:35王旭

次的可能性存在。从而造成内存资源的过渡消耗。当然,可能有人会说我们可以限定Query
Cache 的大小啊。是的,我们确实可以限定Query Cache 的大小,但是这样,Query Cache 就很
容易造成因为内存不足而被换出,造成命中率的下降。
 
QueryCache 的正确使用:
虽然Query Cache 的使用会存在一些负面影响,但是我们也应该相信其存在是必定有一定价值。我
们完全不用因为Query Cache 的上面三个负面影响就完全失去对Query Cache 的信心。只要我们理解了
Query Cache 的实现原理,那么我们就完全可以通过一定的手段在使用Query Cache 的时候扬长避短,重
发发挥其优势,并有效的避开其劣势。
首先,我们需要根据Query Cache 失效机制来判断哪些表适合使用Query 哪些表不适合。由于Query
Cache 的失效主要是因为Query 所依赖的Table 的数据发生了变化,造成Query 的Result Set 可能已经
有所改变而造成相关的Query Cache 全部失效,那么我们就应该避免在查询变化频繁的Table 的Query 上
使用,而应该在那些查询变化频率较小的Table 的Query 上面使用。MySQL 中针对Query Cache 有两个专
用的SQL Hint(提示):SQL_NO_CACHE 和SQL_CACHE,分别代表强制不使用Query Cache 和强制使用
Query Cache。我们完全可以利用这两个SQL Hint,让MySQL 知道我们希望哪些SQL 使用Query Cache 而
哪些SQL 就不要使用了。这样不仅可以让变化频繁Table 的Query 浪费Query Cache 的内存,同时还可以
减少Query Cache 的检测量。
其次,对于那些变化非常小,大部分时候都是静态的数据,我们可以添加SQL_CACHE 的SQL Hint,
强制MySQL 使用Query Cache,从而提高该表的查询性能。
最后,有些SQL 的Result Set 很大,如果使用Query Cache 很容易造成Cache 内存的不足,或者将
之前一些老的Cache 冲刷出去。对于这一类Query 我们有两种方法可以解决,一是使用SQL_NO_CACHE 参
数来强制他不使用Query Cache 而每次都直接从实际数据中去查找, 另一种方法是通过设定
“query_cache_limit”参数值来控制Query Cache 中所Cache 的最大Result Set ,系统默认为
1M(1048576)。当某个Query 的Result Set 大于“query_cache_limit”所设定的值的时候,Query
Cache 是不会Cache 这个Query 的。

(13)、innodb_buffer_pool_size
innodb_buffer_pool_size 定义了 InnoDB 存储引擎的表数据和索引数据的最大内存缓冲区大小。和 MyISAM 存储引擎不同, MyISAM 的 key_buffer_size 只能缓存索引键,而 innodb_buffer_pool_size 却可以缓存数据块和索引键。适当的增加这个参数的大小,可以有效的减少 InnoDB 类型的表的磁盘 I/O 。在一个以 InnoDB 为主的专用数据库服务器上,可以考虑把该参数设置为物理内存大小的 60%-80%