innodb_buffer_pool_size

说明:

表示缓冲池字节大小,默认 128MB,最大值 32位系统 4294967295B(2^32-1),约为3.xGB,64位系统18446744073709551615B(2^64-1),差不多是18000000TB

作用:

主要是缓存innodb表的索引,数据,插入数据时的缓冲。

网上评价:

如果设定的缓冲池的大小大于1G,设置innodb_buffer_pool_instances的值大于1,在服务器繁忙的时候可以提高伸缩性,不过在实际的测试中,发现带来的性能提升并不明显,而且参考了这里的一篇文章mysql优化---第7篇:参数 innodb_buffer_pool_instances设置,初步设置innodb_buffer_pool_instances为1。
这个值设置的越大,在不止一次的访问相同的数据表数据时,消耗的磁盘I / O就越少。在一个专用的数据库服务器,则可能将其设置为高达80%的机器物理内存大小。不过在实际的测试中,发现无限的增大这个值,带来的性能提升也并不显著,对CPU的压力反而增大,设置合理的值才是最优。在出现以下问题时,你就需要考虑减少这个参数的值了:
  1. 物理内存的竞争可能会导致操作系统分页。
  2. InnoDB储备额外的内存缓冲区和控制结构,以便总分配空间大于指定的大小大约是10%。
  3. 地址空间必须是连续的,在通过DLL加载特定地址的Windows系统中,这可能存在问题。
  4. 初始化缓冲池的时间大致与它的大小成正比。在大型系统中,初始化的时间可能很显著。例如:在现代化的Linux x86_64服务器上,初始化一个10GB的缓冲池大小,大约需要6秒钟。

table_cache

table_cache 是一个非常重要的MySQL性能参数,它在5.1.3之后的版本中叫做 table_open_cache, table_cache 主要用于设置table高速缓存的数量, 由于每个客户端连接都会至少访问一个表,因此此参数的值与 max_connections 有关。

key_buffer_size

key_buffer_size 是对MyISAM表性能影响最大的一个参数。

参考: mysql Key_buffer_size参数的设置

mysql> show variables like 'key_buffer_size';
+-----------------+---------+
| Variable_name   | Value   |
+-----------------+---------+
| key_buffer_size | 8384512 |
+-----------------+---------+
1 row in set (0.00 sec)

mysql>  show global status like 'key_read%';
+-------------------+-----------+
| Variable_name     | Value     |
+-------------------+-----------+
| Key_read_requests | 597758917 |
| Key_reads         | 29400717  |
+-------------------+-----------+
2 rows in set (0.00 sec)

Prod 服务器未命中缓存的概率

key_cache_miss_rate = Key_reads / Key_read_requests * 100%
29400717 / 597758917 * 100% = 0.04918491%

mysql>  show global status like 'key_blocks_u%';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| Key_blocks_unused | 6694  |
| Key_blocks_used   | 6694  |
+-------------------+-------+
2 rows in set (0.00 sec)

Key_blocks_unused 表示未使用的缓存簇(blocks)数,Key_blocks_used 表示曾经用到的最大的 blocks 数,比如这台服务器,所有的缓存都用到了,要么增加 key_buffer_size,要么就是过渡索引了,把缓存占满了。比较理想的设置:

Key_blocks_used / (Key_blocks_unused + Key_blocks_used) * 100% ≈ 80%

我们 prod 为 50%,偏小,说明。。。

标签: mysql