`
xitong
  • 浏览: 6178465 次
文章分类
社区版块
存档分类
最新评论

key_buffer_size 参数

 
阅读更多

为了最小化磁盘的 I/O , MyISAM 存储引擎的表使用键高速缓存来缓存索引,这个键高速缓存的大小则通过 key-buffer-size 参数来设置。如果应用系统中使用的表以 MyISAM 存储引擎为主,则应该适当增加该参数的值,以便尽可能的缓存索引,提高访问的速度。

默认情况下,所有的索引都使用相同的键高速缓存,当访问的索引不在缓存中时,使用 LRU ( Least Recently Used 最近最少使用)算法来替换缓存中最近最少使用的索引块。为了进一步避免对键高速缓存的争用,从 MySQL5.1 开始,可以设置多个键高速缓存,并为不同的索引键指定使用的键高速缓存。下面的例子演示如何修改高速键缓存的值,如何设置多个键高速缓存,以及如何为不同的索引指定不同的缓存:

显示当前的参数大小,为16M:

mysql> show variables like 'key_buffer_size';

+-----------------+-------+

| Variable_name | Value |

+-----------------+-------+

| key_buffer_size | 16384 |

+-----------------+-------+

1 row in set (0.00 sec)

修改参数值到200M:

mysql> set global key_buffer_size=204800;

Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'key_buffer_size';

+-----------------+--------+

| Variable_name | Value |

+-----------------+--------+

| key_buffer_size | 204800 |

+-----------------+--------+

1 row in set (0.00 sec)

上面介绍的是默认的键缓存,下面介绍如何设置多个键缓存:

设置 hot_cache 的键缓存 100M , cold_cache 的键缓存 100M ,另外还有 200M 的默认的键缓存。如果索引不指定键缓存,则会放在默认的键缓存中。

mysql> set global hot_cache.key_buffer_size=102400;

Query OK, 0 rows affected (0.00 sec)

mysql> set global cold_cache.key_buffer_size= 1024 00;

Query OK, 0 rows affected (0.01 sec)

mysql> show variables like 'key_buffer_size';

+-----------------+--------+

| Variable_name | Value |

+-----------------+--------+

| key_buffer_size | 204800 |

+-----------------+--------+

1 row in set (0.00 sec)

如果要显示设置的多键缓存的值,可以使用:

mysql> SELECT @@global.hot_cache.key_buffer_size;

+------------------------------------+

| @@global.hot_cache.key_buffer_size |

+------------------------------------+

| 102400 |

+------------------------------------+

1 row in set (0.03 sec)

mysql> SELECT @@global.cold_cache.key_buffer_size;

+-------------------------------------+

| @@global.cold_cache.key_buffer_size |

+-------------------------------------+

| 102400 |

+-------------------------------------+

1 row in set (0.00 sec)

指定不同的索引使用不同的键缓存:

mysql> CACHE INDEX test1 in hot_cache;

+------------+--------------------+----------+----------+

| Table | Op | Msg_type | Msg_text |

+------------+--------------------+----------+----------+

| test .test1 | assign_to_keycache | status | OK |

+------------+--------------------+----------+----------+

1 row in set (0.00 sec)

mysql> CACHE INDEX test2 in hot_cache;

+------------+--------------------+----------+----------+

| Table | Op | Msg_type | Msg_text |

+------------+--------------------+----------+----------+

| test .test2 | assign_to_keycache | status | OK |

+------------+--------------------+----------+----------+

1 row in set (0.00 sec)

通常在数据库刚刚启动的时候,需要等待数据库热起来,也就是等待数据被缓存到缓存区中,这段时间数据库会因为 buffer 的命中率低而导致应用的访问效率不高。使用键高速缓存的时候,可以通过命令将索引预加载到缓存区中,大大缩短了数据库预热的时间。具体的操作方式是:

mysql> LOAD INDEX INTO CACHE test1,test2 IGNORE LEAVES;

+------------+--------------+----------+----------+

| Table | Op | Msg_type | Msg_text |

+------------+--------------+----------+----------+

| test .test1 | preload_keys | status | OK |

| test .test2 | preload_keys | status | OK |

+------------+--------------+----------+----------+

2 rows in set (3.89 sec)

如果已经使用 CACHE INDEX 语句为索引分配了一个键高速缓冲,预加载可以将索引块放入该缓存,否则,索引块将被加载到默认的键高速缓冲。

分享到:
评论

相关推荐

    mysql Key_buffer_size参数的优化设置

    当设置key_buffer_size,操作系统不会马上分配key_buffer_size设置的值,而是在需要的时候,再分配的。可以设置多个key_buffer,当设置不是默认key_buffer为0时,mysql会把缓存的索引块移到默认的key_buffer中去并...

    mysql优化的重要参数 key_buffer_size table_cache

    对于使用Myisam存储引擎来说,主要有key_buffer_size和table_cache两个参数。对于InnoDB引擎来说主要还是以innodb_开始的参数,也很好辨认。 查看MySQL参数,可以使用show variables和show status命令查看,前者查看...

    Mysql优化调优中两个重要参数table_cache和key_buffer

    本文根据作者的一点经验,讨论了Mysql服务器优化中两个非常重要的参数,分别是table_cache,key_buffer_size。 table_cache指示表高速缓存的大小。当Mysql访问一个表时,如果在Mysql表缓冲区中还有空间,那么这个表...

    MySQL8.0内存相关参数总结

    也就是:innodb_buffer_pool_size + innodb_log_buffer_size + thread_cache_size +table_open_cache + table_definition_cache +key_buffer_size + max_connections *( thread_stack+ sort_buffer_size+join_...

    可以改善mysql性能的InnoDB配置参数

    而由于InnoDB是一个健壮的事务型存储引擎,已经有10多年的历史,一些重量级的...推荐此参数至少设置为2MB,实际上,是需要根据项目的InnoDB表的数目相应地增加 2.innodb_data_pool_size 此参数类似于MySQL的key_bu

    my.cnf(my.ini)重要参数优化配置说明

    MyISAM存储引擎 MyISAM存储引擎适用于读多写少,对读性能要求比较...通过 show global status like ‘%key_blocks_unused%’ 查看是否还有剩余,如果剩余很多,就不需要再加大key_buffer_size了 如果不用MyISAM,建议

    mysqld-nt: Out of memory (Needed 1677720 bytes)解决方法

    今天发现网站有点慢,发现mysql日志中提示mysqld-nt: Out of memory (Needed 1677720 bytes),经排查是...key_buffer、key_buffer_size、read_buffer_size、sort_buffer_size记住了有这个参数的就改,没有也不要添加

    Mysql数据库管理系统优化方案.doc

    28800 //服务器在关上它之前在洋交互连接上等待的时间 join_buffer_size current value:131072 //用与全部连接的缓冲区大小 key_buffer_size current value:1048540 //用语索引块的缓冲区的大小,增加它可以更好的...

    mysql数据库my.cnf配置文件

    # 联合查询操作所能使用的缓冲区大小,和sort_buffer_size一样,该参数对应的分配内存也是每连接独享 thread_cache_size = 8 # 这个值(默认8)表示可以重新利用保存在缓存中线程的数量,当断开连接时如果缓存中还有...

    php资料库4 防止foeach中变量不是数组

    MySQL优化经验 key_buffer_size,query_cache_size,table_cache.txt bbscon.mht mysql SHOW STATUS 详解_病毒的BLOG_新浪博客.mht MYSQL系统优化与系统设置参数的一次调查-(2)_Linux技术文章_Linux_操作系统.mht ...

    MySQL服务器性能优化.docx

    key_buffer_size是用于索引块的缓冲区大小,增加它可得到更好处理的索引(对所有读和多重写),到你能负担得起那样多。如果你使它太大,系统将开始换页并且真的变慢了。默认数值是8388600(8M),我的MySQL主机有2GB内存...

    gc2145_parrotv1.1_r16m_验证完成_20170523_1408没有外层目录.7z

    key_support_picture_size = 1600x1200, 1280x720, 800x600, 640x480 key_support_picture_size = 1600x1200, 640x480 key_default_picture_size = 640x480 used_flash_mode = 0 key_support_flash_mode = on,off,...

    r58_bmi160_bma250_ov2640_dev点亮VGA的ov2640HDMI显示_20160630_1142.7z

    key_support_preview_size = 640x480 key_default_preview_size = 640x480 used_picture_size = 1 key_support_picture_size = 640x480 key_default_picture_size = 640x480 used_flash_mode = 0 key_support_...

    p720_ov2640_r58_dev拍照和录像都是720p的分辨率20160713_1430.7z

    key_support_preview_size = 640x480 key_default_preview_size = 640x480 used_picture_size = 1 key_support_picture_size = 640x480 key_default_picture_size = 640x480 used_flash_mode = 0 key_support_...

    OC AES 128位解密

    size_t bufferSize = [data length] + kCCBlockSizeAES128; void *buffer = malloc(bufferSize); size_t numBytesEncrypted = 0; // 设置加密参数 /** 这里设置的参数ios默认为CBC加密方式,如果需要其他...

    wen_ov5640_r16设置为vga分辨率20160720_1003.7z

    key_support_picture_size = 640x480 key_default_picture_size = 640x480 used_flash_mode = 0 key_support_flash_mode = on,off,auto key_default_flash_mode = on used_color_effect=0 key_support_color_...

    gc2135_parrotv1.1_r16m_验证完成VGA分辨率_20171010_1700没有外层目录.7z

    key_support_preview_size = 1600x1200, 1280x960, 1024x768, 1280x720, 800x600, 640x480 key_default_preview_size = 1280x720 used_picture_size = 1 key_support_picture_size = 1600x1200, 1280x960, 1024x768...

Global site tag (gtag.js) - Google Analytics