mysql监控优化(一)连接数和缓存
一、mysql的连接数
MYSQL数据库安装完成后,默认最大连接数是100,一般流量稍微大一点的论坛或网站这个连接数是远远不够的,连接数少的话,在大并发下连接数会不够用,会有很多线程在等待其他连接释放,就可能会导致数据库连接超时或者响应时间过长,所以需要调整最大连接数。
1、设置mysql的最大连接数,在mysql的配置文件中增加:
max_connections = 1000 #mysql的最大连接数,默认如果不写的话是100个
wait_timeout = 10 超时时间
2、查看当前有多少个连接
show status like '%Threads_connected%';
show processlist;
二、mysql的缓存。缓存来自两个维度。
缓存1(MySQL层):查询缓存 Query Cache
缓存2(存储引擎层):InnoDB_Buffer_Pool
1、查询缓存Qcache
- 缓存完整的SELECT查询结果,当查询命中缓存,MySQL会立刻返回结果,跳过解析、优化和执行阶段。
- 查询缓存会跟踪系统中的每张表,如果这些表发生变化,那么和这张表相关的所有查询缓存全部失效。
- 查询缓存对应用程序是完全透明的。应用程序无须关心MySQL是通过查询缓存返回的结果还是实际执行返回的结果。事实上,这2种结果是完全相同的。
- 在检查查询缓存的时候,MySQL不会对SQL进行任何处理,它精确的使用客户端传来的查询(select),只要字符大小写,或者注释有一点点不同,查询缓存就认为是不同的查询。
- 任何一个包含不确定的函数(比如now(),current_date())的查询不会被缓存。
(1)mysql查询缓存开启需要注意的问题
- 开启查询缓存对于读写都增加了额外的开销。对于读,在查询开始前需要先检查缓存;对于写,在写入后需要更新缓存。
- 一般情况这些开销相对较小,所以查询缓存一般还是有好处的。但也要根据业务特征权衡是否需要开启查询缓存。
(2)Qcache参数。查询缓存参数,在mysql配置文件中添加,linux下为my.cnf,windows下为my.ini:
1.query_cache_type = on 是否开启查询缓存,具体选项是off,on
2.query_cache_size = 200M 分配给查询缓存的总内存,一般建议不超过256M
3.query_cache_limit = 1M 这个选项限制了MySQL存储的最大结果。如果查询的结果比这个大,那么就不会被缓存。
(3)查看Qcache状态
查询qcache状态:
SHOW VARIABLES LIKE '%query_cache%';
命令参数列表
have_query_cache 该MySQL 是否支持Query Cache;
query_cache_limit 缓存块大小,超过该大小不会被缓存
query_cache_min_res_unit 每个qcache最小的缓存空间大小
query_cache_size 分配给查询缓存的总内存
query_cache_type 是否开启
query_cache_wlock_invalidate 控制当有锁加在表上的时候,是否先让该表相关的 Query Cache失效
(4)监控Qcache的使用情况
查询qcache当前使用情况:
SHOW STATUS LIKE 'Qcache%';
命令参数列表
Qcache_free_blocks Query Cache中目前还有多少剩余的blocks。如果该值显示较大,则说明Query Cache 中的内存碎片较多了,可能需要寻找合适的机会进行整理。如果这个值非常大,可以使用FLUSH QUERY CACHE;语句来清理查询缓存碎片以提高内存使用性能。该语句不从缓存中移出任何查询。
Qcache_free_memory Query Cache 中目前剩余的内存大小
Qcache_hits 缓存命中次数
Qcache_inserts 多少次未命中然后插入
Query Cache 命中率= Qcache_hits / ( Qcache_hits + Qcache_inserts );
Qcache_lowmem_prunes 多少条Query 因为内存不足而被清除出Query
Qcache_not_cached 因为query_cache_type 的设置或者不能被cache 的Query 的数量
Qcache_queries_in_cache 当前Query Cache 中cache 的Query 数量;
Qcache_total_blocks 当前Query Cache 中的block 数量
2、存储引擎层-innodb buffer pool
- buffer pool是innodb存储引擎带的一个缓存池,查询数据的时候,它首先会从内存中查询,如果内存中存在的话,直接返回,从而提高查询响应时间。
- innodb buffer pool和qcache的区别是:qcacche缓存的是sql语句对应的结果集,buffer pool中缓存的是表中的数据。Buffer pool是设置的越大越好,一般设置为服务器物理内存的70%。
(1)Innodb_buffer_pool参数:
innodb_buffer_pool_size :Innodb_buffer_pool的大小
innodb_buffer_pool_dump_now:默认为关闭OFF。如果开启该参数,停止MySQL服务时,InnoDB将InnoDB缓冲池中的热数据保存到本地硬盘。
innodb_buffer_pool_load_at_startup:默认为关闭OFF。如果开启该参数,启动MySQL服务时,MySQL将本地热数据加载到InnoDB缓冲池中。
(2)查看Innodb_buffer_pool的状态
查询Innodb_buffer_pool状态:
SHOW VARIABLES LIKE '%innodb_buffer_pool%';
命令参数列表
innodb_buffer_pool_size 设置的bp大小
innodb_buffer_pool_filename 热数据文件名称
innodb_buffer_pool_dump_at_shutdown 停止mysq服务时是否自动保存热数据
innodb_buffer_pool_dump_now 启动mysql服务时是否自动读取热数据
(3)监控Innodb_buffer_pool使用情况
查询Innodb_buffer_pool当前使用情况:
SHOW STATUS LIKE '%Innodb_buffer_pool%';
命令参数列表
主要关注的两个参数
Innodb_buffer_pool_read_requests 总共查询bp的次数
Innodb_buffer_pool_reads 从物理磁盘中获取到数据的次数
通过这两个参数我们可以知道bp的命中率
mysql监控优化(一)连接数和缓存的更多相关文章
- MySql监控优化
MySQL监控 MySQL服务器硬件和OS(操作系统)调优: 1.有足够的物理内存,能将整个InnoDB文件加载到内存里 —— 如果访问的文件在内存里,而不是在磁盘上,InnoDB会快很多. ...
- MySQL性能优化方法一:缓存参数优化
原文链接:http://isky000.com/database/mysql-perfornamce-tuning-cache-parameter 数据库属于 IO 密集型的应用程序,其主要职责就是数 ...
- 根据 MySQL 状态优化 ---- 2. 连接数
查看 MySQL 服务器运行的各种状态值: mysql> show global status: 2. 连接数 查看设置的最大连接数: mysql> show variables like ...
- mysql监控优化(二)主从复制
复制解决的基本问题是让一台服务器的数据和其他服务器保持同步.一台主服务器的数据可以同步到多台从服务器上.并且从服务器也可以被配置为另外一台服务器的主库.主库和从库之间可以有多种不同的组合方式. MyS ...
- mysql监控优化(三)慢查询
顾名思义,慢查询日志中记录的是执行时间较长的query,也就是我们常说的slowquery,通过设--log-slow-queries[=file_name]来打开该功能并设置记录位置和文件名.慢查询 ...
- 性能测试之mysql监控、优化
我们在做性能测试的目的是什么,就是要测出一个系统的瓶颈在哪里,到底是哪里影响了我们系统的性能,找到问题,然后解决它.当然一个系统由很多东西一起组合到一起,应用程序.数据库.服务器.中中间件等等很多东西 ...
- 京东MySQL监控之Zabbix优化、自动化
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://wangwei007.blog.51cto.com/68019/1833332 随 ...
- MYSQL性能优化之Mysql数据库监控
监控对象 数据库可用性监控数据库进程或是端口存在并不意味着数据库就是可用的 也就是说登陆服务器,并且能正确执行mysql命令 数据库性能 QPS和DPS并发线程数量(同时执行sql语句的数量,不是连接 ...
- [MySQL性能优化系列]提高缓存命中率
1. 背景 通常情况下,能用一条sql语句完成的查询,我们尽量不用多次查询完成.因为,查询次数越多,通信开销越大.但是,分多次查询,有可能提高缓存命中率.到底使用一个复合查询还是多个独立查询,需要根据 ...
随机推荐
- 微信小程序 - IOS 仿饿了么"我的",下拉橡皮筋效果
这个需求是在wepy交流群里有群友提到的. 一个小花样. 注册mixins /** * IOS专用 顶部下拉橡皮筋效果 * 安卓的Page在到达顶部的时候,不能继续下拉...略过 * * 效果见 饿了 ...
- mysql -- 预处理语句
所谓预处理,即在真正执行某条SQL语句之前,先将SQL语句准备好,在执行过程中再绑定数据 语法: 准备预处理 prepare 预处理名字 from ‘要执行的SQL语句’ 执行预处理 execute ...
- 【BZOJ】1617: [Usaco2008 Mar]River Crossing渡河问题(dp)
http://www.lydsy.com/JudgeOnline/problem.php?id=1617 裸dp,很好做. 设f[i]表示i头牛到对岸所需最小时间.sum[i]表示运i头牛到对岸的时间 ...
- thinkphp中phpexcel的使用
1.下载phpexcel文件(之前提到过!) 2.下载后将文件放到: 3.在控制器中引用: 4.部分实现的代码: public function OutputExcel($data) //导入订单 { ...
- pl/sql developer导出数据到excel的方法
http://yedward.net/?id=92 问题说明:使用pl/sql developer导出数据到excel表格中是非常有必要的,一般的可能直接在导出的时候选择csv格式即可,因为该格式可以 ...
- layui多选框
多选下拉框:http://sun.faysunshine.com/layui/formSelects-v4/example/example_v4.html 1.下载formSelects-v4.1 2 ...
- ios开发之--系统控件显示中文
虽然一直知道X-code肯定提供有语言本地化的设置地方,但是一直也做个记录,有些时候的汉化,还是需要使用代码去控制,键盘的右下角.navagiton的return使用代码修改,调用系统相机时,也是出现 ...
- pybot/robot命令参数说明【dos下执行命令pybot.bat --help查看】
Robot Framework -- A generic test automation framework Version: 3.0 (Python 3.4.0 on win32) Usage: r ...
- 自定义控件_VIewPager显示多个Item
一直以来想搞明白这个不完全的VIewPager是怎么做到的,有幸看到这片篇文章 有二种实现方法 1.设置的属性 1.clipChildren属性 2.setPageMargin 3.更新Item外界面 ...
- spring基础---->spring自定义标签(一)
Spring具有一个基于架构的扩展机制,可以使用xml文件定义和配置bean.本博客将介绍如何编写自定义XML bean的解析器,并用实例来加以说明.其实我一直相信 等你出现的时候我就知道是你. Sp ...