key_buffer_size

  为了最小化磁盘的 I/O , MyISAM 存储引擎的表使用键高速缓存来缓存索引,这个键高速缓存的大小则通过 key-buffer-size 参数来设置。如果应用系统中使用的表以 MyISAM 存储引擎为主,则应该适当增加该参数的值,以便尽可能的缓存索引,提高访问的速度。
  默认情况下,所有的索引都使用相同的键高速缓存,当访问的索引不在缓存中时,使用 LRU ( Least Recently Used 最近最少使用)算法来替换缓存中最近最少使用的索引块。为了进一步避免对键高速缓存的争用,从 MySQL5.1 开始,可以设置多个键高速缓存,并为不同的索引键指定使用的键高速缓存。[1]

  下面一台以MyISAM为主要存储引擎服务器的配置:[2]

mysql> show variables like 'key_buffer_size';

+-----------------+------------+
| Variable_name | Value
|
+-----------------+------------+
| key_buffer_size | 536870912
|
+-----------------+------------+

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

mysql> show global status like 'key_read%';

+------------------------+-------------+
| Variable_name          |  Value
|
+------------------------+-------------+
| Key_read_requests | 27813678764 |
| Key_reads              | 6798830        |
+------------------------+-------------+

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

key_cache_miss_rate = Key_reads / Key_read_requests * 100%

  比如上面的数据,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> show global status like 'key_blocks_u%';

+------------------------+-------------+
| Variable_name          | Value
|
+------------------------+-------------+
| Key_blocks_unused   | 0           |
| Key_blocks_used       | 413543 |
+------------------------+-------------+

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

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

  注,不能仅凭这个结果值来判断key_buffer_size值设置是否合理,参考[3]

query_cache_size

  mysql 查询缓存 query_cache_type。那么mysql到底是怎么决定到底要不要把查询结果放到查询缓存中呢?是根据query_cache_type这个变量来决定的。[4]
  这个变量有三个取值:0,1,2,分别代表了off、on、demand。[5]

  • 0或OFF将阻止缓存或查询缓存结果。
  • 1或ON将允许缓存,以SELECT SQL_NO_CACHE开始的查询语句除外。
  • 2或DEMAND,仅对以SELECT SQL_CACHE开始的那些查询语句启用缓存。

thread_cache_size

  如果我们在MySQL服务器配置文件中设置了thread_cache_size,当客户端断开之后,服务器处理此客户的线程将会缓存起来以响应下一个客户而不是销毁(前提是缓存数未达上限)。Threads_created表示创建过的线程数,如果发现Threads_created值过大的话,表明 MySQL服务器一直在创建线程,这也是比较耗资源,可以适当增加配置文件中thread_cache_size。[6]

  查询进程使用情况:

mysql> show global status like ‘Thread%';

+—————————-+——————-+
| Variable_name      | Value |
+—————————-+——————-+
| Threads_cached      | 26           |
| Threads_connected | 510          |
| Threads_created     | 35168165 |
| Threads_running     | 459          |
+—————————-+——————-+

  查询服务器 thread_cache_size配置:

mysql> show variables like ‘thread_cache_size';

+————————-+————-+
| Variable_name      | Value |
+————————-+————-+
| thread_cache_size  | 32   |
+————————-+————-+

参考:

[1] 调节 key_buffer_size 参数.http://blog.sina.com.cn/s/blog_4a8902380100brg0.html

[2] mysql Key_buffer_size参数的设置.http://database.51cto.com/art/201010/229939.htm

[3] mysql优化:Key_buffer_size.http://www.php1.cn/article/9810.html

[4] mysql 查询缓存 query_cache_type.http://blog.csdn.net/wmsjlihuan/article/details/16337685

[5] Mysql查询高速缓存(学习笔记).http://blog.csdn.net/linuxin/article/details/2665015

[6] mysql优化参数thread_cache_size.http://www.fangshanzi.com/mysql%E4%BC%98%E5%8C%96%E5%8F%82%E6%95%B0thread_cache_size/http://www.fangshanzi.com/mysql%E4%BC%98%E5%8C%96%E5%8F%82%E6%95%B0thread_cache_size/

mysql性能优化(二)的更多相关文章

  1. MySQL性能优化(二):优化数据库的设计

    原文:MySQL性能优化(二):优化数据库的设计 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.n ...

  2. mysql性能优化(二)

    ###> mysql中有一个explain 命令可以用来分析select 语句的运行效果,例如explain可以获得select语句使用的索引情况.排序的情况等等.除此以外,explain 的e ...

  3. Mysql性能优化三(分表、增量备份、还原)

    接上篇Mysql性能优化二 对表进行水平划分 如果一个表的记录数太多了,比如上千万条,而且需要经常检索,那么我们就有必要化整为零了.如果我拆成100个表,那么每个表只有10万条记录.当然这需要数据在逻 ...

  4. 二十种实战调优MySQL性能优化的经验

    二十种实战调优MySQL性能优化的经验 发布时间:2012 年 2 月 15 日 发布者: OurMySQL 来源:web大本营   才被阅读:3,354 次    消灭0评论     本文将为大家介 ...

  5. ​二十种实战调优MySQL性能优化的经验

    ​http://www.searchdatabase.com.cn/showcontent_58391.htm   [为查询缓存优化你的查询] 像 NOW() 和 RAND() 或是其它的诸如此类的S ...

  6. MySQL性能优化总结

    一.MySQL的主要适用场景 1.Web网站系统 2.日志记录系统 3.数据仓库系统 4.嵌入式系统 二.MySQL架构图: 三.MySQL存储引擎概述 1)MyISAM存储引擎 MyISAM存储引擎 ...

  7. MYSQL性能优化的最佳20+条经验

    MYSQL性能优化的最佳20+条经验 2009年11月27日 陈皓 评论 148 条评论  131,702 人阅读 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数 ...

  8. mysql 性能优化方案

    网 上有不少MySQL 性能优化方案,不过,mysql的优化同sql server相比,更为麻烦与复杂,同样的设置,在不同的环境下 ,由于内存,访问量,读写频率,数据差异等等情况,可能会出现不同的结果 ...

  9. mysql 性能优化方案1

    网 上有不少mysql 性能优化方案,不过,mysql的优化同sql server相比,更为麻烦与复杂,同样的设置,在不同的环境下 ,由于内存,访问量,读写频率,数据差异等等情况,可能会出现不同的结果 ...

  10. mysql 性能优化方案 (转)

    网 上有不少mysql 性能优化方案,不过,mysql的优化同sql server相比,更为麻烦与复杂,同样的设置,在不同的环境下 ,由于内存,访问量,读写频率,数据差异等等情况,可能会出现不同的结果 ...

随机推荐

  1. ROS学习(十一)—— msg srv

    一.msg 和 srv介绍 1.定义 消息(msg): msg文件就是一个描述ROS中所使用消息类型的简单文本.它们会被用来生成不同语言的源代码 服务(srv): 一个srv文件描述一项服务.它包含两 ...

  2. linux下磁盘相关工具(待整理)

    一.概述: fsck tune2fs mke2fs badblocks mkfs* fdisk mount umount mknod e2label blkid hdparm mkswap swapo ...

  3. ASP.NET MVC4中的App_start中BundleConfig的介绍使用

    在BundleConfig.cs中,指定CSS和JS,主要用来压缩JS和CSS   在ASP.NET MVC4中(在WebForm中应该也有),有一个叫做Bundle的东西,它用来将js和css进行压 ...

  4. 【Oracle】Oracle中常用的系统函数

    Oracle SQL 提供了用于执行特定操作的专用函数.这些函数大大增强了 SQL 语言的功能.函数可以接受零个或者多个输入参数,并返回一个输出结果.在Oracle还可以自定义函数,关于更多信息可以查 ...

  5. jquery实现点击展开列表同时隐藏其他列表 js 对象操作 对象原型操作 把一个对象A赋值给另一个对象B 并且对象B 修改 不会影响 A对象

    这篇文章主要介绍了jquery实现点击展开列表同时隐藏其他列表的方法,涉及jquery鼠标事件及节点的遍历与属性操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下 本文实例讲述了jquery实现点击 ...

  6. springboot 中使用Druid 数据源提供数据库监控

    一.springboot 中注册 Servlet/Filter/Listener 的方式有两种,1 通过代码注册 ServletRegistrationBean. FilterRegistration ...

  7. shell编程入门(一)

    运行Linux程序有三种方法: (1).使文件具有可执行权限,直接运行文件. (2).直接调用命令解释器执行程序(Linux shell是一种解释型语言). (3).使用source执行文件 第一种: ...

  8. 开始学习使用 Semantic UI

    最近在找一个功能比较丰富的前端框架,之前一直使用的Bootstrap,感觉组件还是不够丰富,很多东西都需要不少自定义.于是就发现了 Semantic UI. 不过感觉网上相关的中文资料好少,官方网站( ...

  9. SQL SERVER 的排序规则

    有时候查询数据库的时候会发现(比如做重名检查的时候):数据库的查询时对大小写不敏感的,也就是 A 和 a 是一样的. 也就是说 select * from tabletest where name = ...

  10. Android 计算文件 MD5 遇到的问题

    版本下载,做 MD5 校验,使用的 MD5 算法出现了异常,当出现以 0 开头的 MD5的时候,会把 0 给忽略掉,造成 MD5 只有 31 位,造成校验失败. 转:http://blog.csdn. ...