《Mysql入门mysql Key_buffer_size参数的优化设置》要点:

本文介绍了Mysql入门mysql Key_buffer_size参数的优化设置,希望对您有用。如果有疑问,可以联系我们。

MYSQL教程先来看看document对这个参数的解释:

MYSQL教程缓存myisam表的索引块大小,可以被所有进程所共享.当设置key_buffer_size,操作系统不会马上分配key_buffer_size设置的值,而是在需要的时候,再分配的.可以设置多个key_buffer,当设置不是默认key_buffer为0时,mysql会把缓存的索引块移到默认的key_buffer中去并删除不再使用的索引块.Myisam表中只能cache索引块,不能cache数据块.

MYSQL教程原本描述:

MYSQL教程Index blocks for MyISAM tables are buffered and are shared by all threads. key_buffer_size is the size of the buffer used for index blocks. The key buffer is also known as the key cache.

MYSQL教程The maximum allowable setting for key_buffer_size is 4GB on 32-bit platforms. As of MySQL 5.0.52, values larger than 4GB are allowed for 64-bit platforms (except 64-bit Windows, for which large values are truncated to 4GB with a warning). The effective maximum size might be less, depending on your available physical RAM and per-process RAM limits imposed by your operating system or hardware platform. The value of this variable indicates the amount of memory requested. Internally, the server allocates as much memory as possible up to this amount, but the actual allocation might be less.

MYSQL教程Increase the value to get better index handling (for all reads and multiple writes) to as much as you can afford. Using a value that is 25% of total memory on a machine that mainly runs MySQL is quite common. However, if you make the value too large (for example, more than 50% of your total memory) your system might start to page and become extremely slow. MySQL relies on the operating system to perform file system caching for data reads, so you must leave some room for the file system cache. Consider also the memory requirements of other storage engines.

MYSQL教程1、建立缓存索引 :

MYSQL教程mysql> set global key_buffer_1.key_buffer_size=8384512;

Query OK, 0 rows affected (0.01 sec)

mysql> set global key_buffer_2.key_buffer_size=8384512;

Query OK, 0 rows affected (0.01 sec)

MYSQL教程2、把指定表放到key buffer中

MYSQL教程mysql> cache index t1,t2 in key_buffer_1;

+――――+――――――C+―――-+―――-+

| Table | Op | Msg_type | Msg_text |

+――――+――――――C+―――-+―――-+

| luoxuan.t1 | assign_to_keycache | status | OK |

| luoxuan.t2 | assign_to_keycache | status | OK |

+――――+――――――C+―――-+―――-+

2 rows in set (0.00 sec)

MYSQL教程3、预先装载表的索引块

MYSQL教程mysql> load index into cache t1,t2;

+――――+――――C+―――-+―――-+

| Table | Op | Msg_type | Msg_text |

+――――+――――C+―――-+―――-+

| luoxuan.t1 | preload_keys | status | OK |

| luoxuan.t2 | preload_keys | status | OK |

+――――+――――C+―――-+―――-+

2 rows in set (0.00 sec)

MYSQL教程下面我们来看一下,如果计算命中率及key buffer的使用率

MYSQL教程Cache命中率:

100 C ( (Key_reads * 100) / Key_read_requests )

MYSQL教程Key buffer的使用率

100 C ( (Key_blocks_unused * key_cache_block_size) * 100 / key_buffer_size )在mysql数据库中,mysql key_buffer_size是对MyISAM表性能影响最大的一个参数,下面就将对mysql Key_buffer_size参数的设置进行详细介绍,供您参考.

MYSQL教程下面一台以MyISAM为主要存储引擎服务器的配置:

MYSQL教程mysql> show variables like 'key_buffer_size';

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

| Variable_name | Value |

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

| key_buffer_size | 536870912 |

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

MYSQL教程分配了512MB内存给mysql key_buffer_size,我们再看一下key_buffer_size的使用情况:

mysql> show global status like 'key_read%';

MYSQL教程+------------------------+-------------+

| Variable_name | Value |

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

| Key_read_requests | 27813678764 |

| Key_reads | 6798830 |

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

MYSQL教程一共有27813678764个索引读取请求,有6798830个请求在内存中没有找到直接从硬盘读取索引,计算索引未命中缓存的概率:

MYSQL教程key_cache_miss_rate = Key_reads / Key_read_requests * 100%

MYSQL教程比如上面的数据,key_cache_miss_rate为0.0244%,4000个索引读取请求才有一个直接读硬盘,已经很BT了,key_cache_miss_rate在0.1%以下都很好(每1000个请求有一个直接读硬盘),如果key_cache_miss_rate在0.01%以下的话,key_buffer_size分配的过多,可以适当减少.

MySQL服务器还提供了key_blocks_*参数:

MYSQL教程mysql> show global status like 'key_blocks_u%';

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

| Variable_name | Value |

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

| Key_blocks_unused | 0 |

| Key_blocks_used | 413543 |

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

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

MYSQL教程Key_blocks_used / (Key_blocks_unused + Key_blocks_used) * 100% ≈ 80%

MYSQL教程key_buffer_size设置注意事项

1.单个key_buffer的大小不能超过4G,如果设置超过4G,就有可能遇到下面3个bug:

MYSQL教程http://bugs.mysql.com/bug.php?id=29446

MYSQL教程http://bugs.mysql.com/bug.php?id=29419

MYSQL教程http://bugs.mysql.com/bug.php?id=5731

MYSQL教程2.建议key_buffer设置为物理内存的1/4(针对MyISAM引擎),甚至是物理内存的30%~40%,如果key_buffer_size设置太大,系统就会频繁的换页,降低系统性能.因为MySQL使用操作系统的缓存来缓存数据,所以我们得为系统留够足够的内存;在很多情况下数据要比索引大得多.

MYSQL教程3.如果机器性能优越,可以设置多个key_buffer,分别让不同的key_buffer来缓存专门的索引

MYSQL教程上面只是对"新手"来说的,我们还可以更深入地优化key_buffer_size,使用"show status"来查看"Key_read_requests, Key_reads, Key_write_requests 以及Key_writes ",以调整到更适合你的应用的大小,Key_reads/Key_read_requests的大小正常情况下得小于0.01

MYSQL教程参考资料:

MYSQL教程http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_key_buffer_size

MYSQL教程优化mysql之key_buffer_size

MYSQL教程key_buffer_size

key_buffer_size指定索引缓冲区的大小,它决定索引处理的速度,尤其是索引读的速度.通过检查状态值Key_read_requests和Key_reads,可以知道key_buffer_size设置是否合理.比例key_reads /key_read_requests应该尽可能的低,至少是1:100,1:1000更好(上述状态值可以使用SHOW STATUS LIKE ‘key_read%'获得).

key_buffer_size只对MyISAM表起作用.即使你不使用MyISAM表,但是内部的临时磁盘表是MyISAM表,也要使用该值.可以使用检查状态值created_tmp_disk_tables得知详情.

对于1G内存的机器,如果不使用MyISAM表,推荐值是16M(8-64M)

MYSQL教程提升性能的建议:

1.如果opened_tables太大,应该把my.cnf中的table_cache变大

2.如果Key_reads太大,则应该把my.cnf中key_buffer_size变大.可以用Key_reads/Key_read_requests计算出cache失败率

3.如果Handler_read_rnd太大,则你写的SQL语句里很多查询都是要扫描整个表,而没有发挥键的作用

4.如果Threads_created太大,就要增加my.cnf中thread_cache_size的值.可以用Threads_created/Connections计算cache命中率

5.如果Created_tmp_disk_tables太大,就要增加my.cnf中tmp_table_size的值,用基于内存的临时表代替基于磁盘的

MYSQL教程MySQL优化小案例:key_buffer_size

key_buffer_size是对MyISAM表性能影响最大的一个参数,下面一台以MyISAM为主要存储引擎服务器的配置:

MYSQL教程mysql> SHOW VARIABLES LIKE '%key_buffer_size%';

下面查看key_buffer_size的使用情况:

MYSQL教程mysql> SHOW GLOBAL STATUS LIKE '%key_read%';

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

| Variable_name     | Value           |

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

| Key_read_requests | 2454354135490   |

| Key_reads         | 23490           |

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

2 rows in set (0.00 sec)

一共有Key_read_requests个索引请求,一共发生了Key_reads次物理IO

MYSQL教程Key_reads/Key_read_requests ≈ 0.1%以下比较好.

MYSQL教程经过对比,针对我的内存是64G的,所以我把Key_buffer_size设置为2048M,感觉好多了,么有了内存溢出情况.解决了问题.后续有什么情况维易PHP小编继续补充.

mysql key_block_size_Mysql入门mysql Key_buffer_size参数的优化设置相关推荐

  1. SQL快速入门 ( MySQL快速入门, MySQL参考, MySQL快速回顾 )

    SQL 先说点废话,很久没发文了,整理了下自己当时入门 SQL 的笔记,无论用于入门,回顾,参考查询,应该都是有一定价值的,可以按照目录各取所需.SQL数据库有很多,MySQL是一种,本文基本都是SQ ...

  2. MySql基础入门-mysql体系结构

    mysql体系结构:      由:连接池组件.管理服务和工具组件.sql接口组件.查询分析器组件.优化器组件.                 缓冲组件.插件式存储引擎.物理文件组成.      m ...

  3. mysql 内存调整_mySQL内存及虚拟内存优化设置

    为了装mysql环境測试,装上后发现启动后mysql占用了非常大的虚拟内存,达8百多兆. 网上搜索了一下,得到高人指点my.ini. 再也没见再具体的了..仅仅好打开my.ini逐行的啃,虽然英文差了 ...

  4. MySQL最佳入门 - MySQL数据类型之存储带小数的类型

    本篇文章MySQL版本: +-----------+ | version() | +-----------+ | 5.5.53    | +-----------+ 存储带小数的类型 浮点数和定点数类 ...

  5. mysql数据库前端缓存_MySQL数据库性能优化--缓存参数优化

    在平时被问及最多的问题就是关于 MySQL 数据库性能优化方面的问题,所以最近打算写一个MySQL数据库性能优化方面的系列文章,希望对初中级 MySQL DBA 以及其他对 MySQL 性能优化感兴趣 ...

  6. 阿里云rds for mysql平台介绍_阿里云RDS for MySQL 快速入门——笔记

    1初始化配置 1.1设置白名单 创建RDS实例后,需要设置RDS实例的白名单,以允许外部设备访问该RDS实例.默认的白名单只包含默认IP地址127.0.0.1,表示任何设备均无法访问该RDS实例. 设 ...

  7. MySQL基础入门【3】

    文章目录 13 补充知识,查询结果的去重 14 连接查询 14.1 什么是连接查询? 14.2 连接查询的分类? 14.3 基础知识 补充,表的别名 14.4 内连接 等值连接 非等值连接 自连接 1 ...

  8. mysql属性配置提高查询_MYSQL性能优化-安装时优化参数配置提高服务性能

    MYSQL性能优化一直是个头痛的问题,目前大多都是直接把页面html静态页面或直接使用了缓存技术,下面我就mysql本身的性能优化来分享一下. 安装时优化参数配置提高服务性能 在Linux下安装Mys ...

  9. MySQL参数配置优化

    MySQL参数配置优化 max_connections Variable Scope:      Global Dynamic Variable:  Yes Default:              ...

最新文章

  1. Juniper EX3400 Rescue configuration is not set
  2. python 字典 列表 速度_高效使用Python字典的清单
  3. 2月28日云栖精选夜读 | 阿里云率先达成国家绿色数据中心标准,平均PUE低于1.3...
  4. (fofa信息收集骚操作)windows查看文件的md5值
  5. [CF452E]Three strings
  6. Hashmap存储大小
  7. java打印unicode,在Java中打印Unicode字符
  8. 神马js都是浮云-----限时秒杀
  9. Yedda Twitter C# Library
  10. SMTP邮件服务器要求安全连接或客户端未通过身份验证的各个解决方案
  11. qt5.6 mysql_qt 5.6 找不到 mysql 驱动解决
  12. 零基础全天自学PHP,7个月后我找到了工作
  13. NVMe ssd加速卡和NVMe ssd硬盘的区别
  14. re学习笔记(37)BUUCTF-re-[GUET-CTF2019]re Z3约束求解器
  15. 多用途互联网邮件扩展--MIME类型简介
  16. 交通·未来系列学术活动第1期:时空交通数据预测方法及应用
  17. 简智音科技:出色的抖音短视频需要以下几款辅助软件!
  18. 【Unity3D插件】UniRx(基于Unity的响应式编程框架)插件教程
  19. 从入门到精通,计算机er如何快速掌握机器学习(ML)?
  20. 机器学习(浙大课程b站)第二章

热门文章

  1. mingw w64 v8.0.0_使用Visual Studio Code和MinGW编译运行C++代码
  2. 主mysql删除从服务不同步_MySQL主从不同步解决
  3. mysql年份_【数据库_Mysql】查询当前年份的sql
  4. java concurrentmap原理_Java集合番外篇 -- ConcurrentHashMap底层实现和原理
  5. RS(纠删码)技术浅析及Python实现
  6. django中csrftoken跨站请求伪造的几种方式
  7. 如何解决 linux socket TIME_WAIT 过多造成的问题(SYN、ACK、FIN、MSL、RST含义)netstat查看TCP连接数命令
  8. python如何读取一个文件夹下的多个文件(夹)?
  9. linux——DHCP的配置问题
  10. SpringMVC(SSM)框架搭建JavaWeb项目时,前端页面文件上传,后台Java下载功能实现及相关问题记录说明