主要参数 : 1) 、 key_buffer_size- 这对 MyISAM 表来说非常重要,是用来设置整个 MySQL 中常规 Key Cache 的大
主要参数 :
1) 、 key_buffer_size- 这对 MyISAM 表来说非常重要,是用来设置整个 MySQL 中常规 Key Cache 的大小。一般来说,如果 MySQL 运行在 32 位平台,此值建议不超过 2GB ,如果是 64 位平台上则不用考虑此限制,但也最好不要超过 4GB 。
合理的值取决于索引大小、数据量以及负载 -- 记住, MyISAM 表会使用操作系统的缓存来缓存数据,因此需要留出部分内存给它们,很多情况下数据比索引大多了。尽管如此,需要总是检查是否所有的 key_buffer 都被利用了 -- .MYI 文件只有 1GB ,而 key_buffer 却设置为 4GB 的情况是非常少的。这么做太浪费了。如果你很少使用 MyISAM 表,那么也保留低于 16-32MB 的 key_buffer_size 以适应给予磁盘的临时表索引所需。
2 )、 key_buffer_block_size- 索引缓存中的 Cache Block Size.
用来设置每个 Cache Block 的大小,实际上也同时限定了将 ".MYI" 文件中的 Index Block 被读入时 File Block 的大小。
次要参数:
1 )、 table_cache-- 打开一个表的开销可能很大。例如 MyISAM 把 MYI 文件头标志该表正在使用中。你肯定不希望这种操作太频繁,所以通常要加大缓存数量,使得足以最大限度 地缓存打开的表。它需要用到操作系统的资源以及内存,对当前的硬件配置来说当然不是什么问题了。如果你有 200 多个表的话,那么设置为 1024 也许比较合适(每个线程都需要打开表),如果连接数比较大那么就加大它的值。我曾经见过设置为 100,000 的情况。
2 )、 thread_cache-- 线程的创建和销毁的开销可能很大,因为每个线程的连接 / 断开都需要。我通常至少设置为 16 。如果应用程序中有大量的跳跃并发连接并且 Threads_Created 的值也比较大,那么我就会加大它的值。它的目的是在通常的操作中无需创建新线程。
3 )、 query_cache-- 如果你的应用程序有大量读,而且没有应用程序级别的缓存,那么这很有用。不要把它设置太大了,因为想要维护它也需要不少开销,这会导致 MySQL 变慢。通 常设置为 32-512Mb 。设置完之后最好是跟踪一段时间,查看是否运行良好。在一定的负载压力下,如果缓存命中率太低了,就启用它。
4 )、 sort_buffer_size-- 如果你只有一些简单的查询,那么就无需增加它的值了,尽管你有 64GB 的内存。搞不好也许会降低性能。
与 Key Cache 相关的性能状态参数变量:
1 )、 key_cache_division_limit : 以百分比的形式将整个缓存区划分为多个区域。系统默认为 100 ,即只有 Warm Area 实际上,在 MySQL 的 Key Cache 中所使用的 LRU 算法并不像传统算法,仅仅是访问频率,以及最后访问时间,并通过唯一的链表实现,而是将其分成了两部分。
2 )、 key_cache_age_threshold : 控制各区域中的何时被降级,值越小,越容易降级到下一级 area 中表的扫描分为 Sequential Scan 和 Radom Scan 2 种方式, read_buffer_size 设置 sequential scan 时使用的缓存, read_rnd_buffer_size 设置 radom scan 时使用的缓存
3 )、 Key_blocks_not_flushed : 键缓存内已经更改但还没有清空到硬盘上的键的数据块数量。
4 )、 Key_blocks_unused : 键缓存内未使用的块数量。你可以使用该值来确定使用了多少键缓存;参见 5.3.3 节, “ 服务器系统变量 ” 中 Key_buffer_size 的讨论。
5 )、 Key_blocks_used : 键缓存内使用的块数量。该值为高水平线标记,说明已经同时最多使用了多少块。
6 )、 Key_read_requests : 从缓存读键的数据块的请求数。
7 )、 Key_reads : 从硬盘读取键的数据块的次数。如果 Key_reads 较大,则 Key_buffer_size 值可能太小。可以用 Key_reads/Key_read_requests 计算缓存损失率。
8 )、 Key_write_requests : 将键的数据块写入缓存的请求数。
9 )、 Key_writes : 向硬盘写入将键的数据块的物理写操作的次数。
10 )、 Last_query_cost : 用查询优化器计算的最后编译的查询的总成本。用于对比同一查询的不同查询方案的成本。默认值 0 表示还没有编译查询。 默认值是 0 。 Last_query_cost 具有会话范围。