Mysql监控及优化

一、Mysql连接数

1、配置Mysql连接数:

  vim /etc/my.cnf [mysqld]下面修改

  max_connections=1000  不写默认为100。

  wait_timeout=60  设置超时时间

2、查看当前连接数:

  show status like ‘%Threads_connected%‘;

  

  show processlist;

  

 二、Mysql缓存

1、开启缓存:

  vim /etc/my.cnf mysqld下面添加或修改

  query_cache_type=on #开启缓存

  query_cache_size=10M #缓存总大小

  query_cache_limit=1M #查询结果超过设置值,就不会缓存

  需重启mysql服务生效。

2、查看缓存状态:

  SHOW VARIABLES LIKE ‘%query_cache%‘;

  

3、开启profile:

  set @@profiling=1;  设置profile开启

  select @@profiling;  查看profile是否开启

  show profiles;      查看所有的profile

  

  show profile for query  9;  查看指定的sql语句消耗的时间

  

  

  可以看出:同样的sql语句,第9条是首次查询消耗时间,耗时比较长,第10条是从缓存查询消耗时间,耗时明显比较短。

  注:1、select语句必须完全相同才会从走缓存,例如:大小写不一样,虽然查询结果一样,但是不会走缓存。

    2、任何一个包含不确定的函数(比如:now(),current_date())的查询不会被缓存。

4、queryCache使用状态:

  SHOW STATUS LIKE ‘Qcache%‘;

  

  Query Cache 命中率= Qcache_hits / ( Qcache_hits + Qcache_inserts );
  Qcache_free_blocks    Query Cache中目前还有多少剩余的blocks。如果该值显示较大,则说明Query Cache 中的内存碎片较多了,可能需要寻找合适的机会进行整理。如果这个值非常大,可以使用FLUSH QUERY CACHE;语句来清理查询缓存碎片以提高内存使用性能。该语句不从缓存中移出任何查询。

5、查询语句生命周期:

  1.Mysql服务器监听3306端口

  2.验证访问用户

  3.创建Mysql线程

  4.检查内存(qcache)

  5.解析SQL

  6.生成查询计划

  7.打开表

  8.检查内存(Buffer Pool)

  9.到磁盘读取数据

  10.写入内存

  11.返回数据给客户端

  12.关闭表

  13.关闭线程

  14.关闭连接

三、innodb 存储引擎

1、开启innodb_buffer_pool

  vim /etc/my.cnf mysqld 下面添加或修改

  innodb_buffer_pool_size=20M   #设置bufferpool大小

  innodb_buffer_pool_dump_now=on     #默认为关闭OFF。如果开启该参数,停止MySQL服务时,InnoDB将InnoDB缓冲池中的热数据保存到本地硬盘。

  innodb_buffer_pool_load_at_startup = on   #默认为关闭OFF。如果开启该参数,启动MySQL服务时,MySQL将本地热数据加载到InnoDB缓冲池中。

2、查看Innodb_buffer_pool状态

  SHOW VARIABLES LIKE ‘%innodb_buffer_pool%‘;

  

3、查询Innodb_buffer_pool当前使用情况:

  SHOW STATUS LIKE ‘%Innodb_buffer_pool%‘;

  

4、 自动提交

  set @@autocommit=0;  #关闭自动提交,仅对当前用户有效

  修改配置文件my.cnf在[mysqld]模块下加入autocommit = 0; #重启后永久生效

  select @@autocommit;  #查看自动提交是否开启

  commit;  #提交执行语句

5、锁:

  show processlist;  #查看当前锁定sql

  

  注:如果修改的数据条件是索引列,则是行级锁,否则就是表级锁。

四、慢查询

1、查询慢查询日志是否开启

  SHOW VARIABLES LIKE ‘%query%‘;

  

2、慢查询日志设置(执行命令)

  set global slow_query_log=on;  #开启慢查询日志

  set global long_query_time=1;  #设置记录查询超过多少秒的Sql存入慢查询

  set global slow_query_log_file=‘/opt/data/slow_query.log‘;  #设置慢查询日志路径,此路径需要有写入权限

3、解析慢查询日志

  -s:是表示按照何种方式排序,c、t、l、r分别是按照记录次数、时间、查询时间、返回的记录数来排序,ac、at、al、ar,表示相应的倒叙;

  -t:是top n的意思,即为返回前面多少条的数据;

  -g:后边可以写一个正则匹配模式,大小写不敏感的;

  如:查询按照Sql查询时间最长的前10条sql

  mysqldumpslow -s t -t 10 -g ‘select‘  /opt/lampp/var/mysql/xiaoxitest-slow.log

  

4、使用EXPLAIN/DESC 查看Sql效率

  EXPLAIN update user set age=11 where id=1;

  DESC update user set age=11 where id=1;

  

  type列:依次从最差到最优

  all<index<range<ref<eq_ref<const,system<null

  ALL

  就是全表扫描,通常意味着MySQL必须扫描整张表,从头到尾,去找需要的行。对innodb表就是按主键顺序。

  Index

  联接类型与ALL相同,除了只有索引树被扫描。这通常比ALL快,因为索引文件通常比数据文件小。(也就是说虽然all和Index都是读全表,但index是从索引中读取的,而all是从硬盘中读的)。

  Range

  范围扫描就是一个有限制的索引扫描,它开始于索引里面的一个点,返回匹配整个值域的行。这比全索引扫描好一些,因为它用不着遍历全部索引。显而易见的是between或在where字句带有“>”或“<”的查询或者in。

  Ref

  非唯一性索引扫描,返回匹配某个单独值的所有行。

  Eq_ref

  使用这种索引查找,MySQL知道最多只返回一条符合条件的记录。这种访问方式在MySQL使用主键或唯一索引时可以看到。MySQL对于这类访问类型优化的非常好。

  Const,system

  当MySQL能对查询的某部分进行优化并将其转化成一个常量时,它就会使用这些类型访问。

  NULL

  这种访问方式意味着MySQL能在优化阶段分解查询语句,在执行阶段甚至用不着再访问表或者索引。

五、Mysql优化

1、读写分离

  主:只负责写数据

  从:只负责读数据

2、分布数据

  MySQL通常不会对带宽造成很大的压力。因此可以在不同的地理位置来分布数据,实现跨机房跨地域的数据分布。

3、负载均衡

  通过MySQL复制可以将读操作分布到多个服务器上,实现对读密集型应用的优化。

4、减少IO次数

  大部分数据库操作中90%时间都是IO操作所占用的,减少IO次数是Sql优化种第一优先考虑。也是收效最明显优化手段。

5、减少CPU计算

  SQL优化中需要考虑的就是 CPU 运算量的优化了。order by, group by,distinct … 都是消耗 CPU 的大户(这些操作基本上都是 CPU 处理内存中的数据比较运算)。当我们的 IO 优化做到一定阶段之后,降低 CPU 计算也就成为了我们 SQL 优化的重要目标。

6、改变 SQL 执行计划

  明确了优化目标之后,我们需要确定达到我们目标的方法。对于 SQL 语句来说,达到上述2个目标的方法其实只有一个,那就是改变 SQL 的执行计划,让他尽量“少走弯路”,尽量通过各种“捷径”来找到我们需要的数据,以达到 “减少 IO 次数” 和 “降低 CPU 计算” 的目标。

7、为经常使用的查询条件创建索引

时间: 2024-10-29 19:10:52

Mysql监控及优化的相关文章

性能测试之mysql监控、优化

我们在做性能测试的目的是什么,就是要测出一个系统的瓶颈在哪里,到底是哪里影响了我们系统的性能,找到问题,然后解决它.当然一个系统由很多东西一起组合到一起,应用程序.数据库.服务器.中中间件等等很多东西.那我们测试的时候上面这些东西里面任何一个环节都可能会出问题,都可能会影响我们系统的性能.这篇博客主要讲下mysql数据库咱们在做性能测试的时候应该监控什么东西,又有哪些需要优化的地方. 一.哪些东西会影响mysql的性能? 1.硬件 2.系统配置 3.数据库表结构 4.SQL以及索引 硬件 硬件就

京东MySQL监控之Zabbix优化、自动化

随着京东业务的飞速发展, MySQL数据库的使用更加普及.服务器量级飞速增长,这对京东MySQL DBA团队的要求也越来越高.监控系统为数据库管理和维护提供了精确的数据依据,是数据库运维人员的千里眼和顺风耳. 准确.及时.有效的监控,能够使运维人员对生产服务系统运行情况了如指掌.通过分析获得的监控信息,判断被监控数据库的运行状态,对可能出现的问题进行预测,可以及时制定出适当的优化方案,从而保证整个系统正常.高效地运行.这也就在很大程度上保证了数据库的安全性,避免了一些不必要的损失.所以,我们有必

MySql监控优化

MySQL监控 MySQL服务器硬件和OS(操作系统)调优: 1.有足够的物理内存,能将整个InnoDB文件加载到内存里 —— 如果访问的文件在内存里,而不是在磁盘上,InnoDB会快很多. 2.全力避免 Swap 操作 — 交换(swapping)是从磁盘读取数据,所以会很慢. 3.使用电池供电的RAM(Battery-Backed RAM). 4.使用一个高级磁盘阵列 — 最好是 RAID10 或者更高. 5.避免使用RAID5 — 和校验需要确保完整性,开销很高. 6.将你的操作系统和数据

架构设计:系统存储(8)——MySQL数据库性能优化(4)

================================ (接上文<架构设计:系统存储(7)--MySQL数据库性能优化(3)>) 4-3.InnoDB中的锁 虽然锁机制是InnoDB引擎中为了保证事务性而自然存在的,在索引.表结构.配置参数一定的前提下,InnoDB引擎加锁过程是一样的,所以理论上来说也就不存在"锁机制能够提升性能"这样的说法.但如果技术人员不理解InnoDB中的锁机制或者混乱.错误的索引定义和同样混乱的SQL写操作语句共同作用,那么导致死锁出现的

MySQL监控、性能分析——工具篇

MySQL越来越被更多企业接受,随着企业发展,MySQL存储数据日益膨胀,MySQL的性能分析.监控预警.容量扩展议题越来越多.“工欲善其 事,必先利其器”,那么我们如何在进行MySQL性能分析.监控预警.容量扩展问题上得到更好的解决方案,就要利用各种工具来对MySQL各种指标进行分 析.本文是读书笔记,下面提及的工具,读者可能都用过,或打算准备是使用.MySQL服务器的发布包没有包含那些能完成许多常见任务的工具,例如监控服务器的工具.比较服务器间数据的工具.我们把这些工具分成以下几类:界面.监

Mysql线程池优化笔记

Mysql线程池优化我是总结了一个站长的3篇文章了,这里我整理到一起来本文章就分为三个优化段了,下面一起来看看. Mysql线程池系列一(Thread pool FAQ) 首先介绍什么是mysql thread pool,干什么用的?使用线程池主要可以达到以下两个目的:1.在大并发的时候,性能不会因为过载而迅速下降.2.减少性能抖动 thread pool的工作原理?线程池使用分而治之的方法来限制和平衡并发性.与默认的thread_handling不同,线程池将连接和线程划分开,所以连接数量和执

mysql的配置优化

需求:mysql的参数优化对于不同的网站,极其在线量,访问量,帖子数量,网络情况,以及机器硬件配置都有关系,优化不可能一次万次,需要在工作当中不断的监控观察和调试,才能得到最佳的效果.性能优化影响最大的变量分为连接请求变量和缓冲区变量. 理论总结: 修改vim/my.cnf max_connections = 1024    设置最大连接数为1024 back_log = 100      暂存的连接数量 wait_timeout = 100 interactive_timeout = 100

第23章 mysql 监控

2015-10-25 目录 参考资料 [1] 唐汉明.深入浅出MySQL 数据库开发.优化与管理维护(第2版)[M].北京:人民邮电出版社,2014 [2] Schwartz.高性能MySQL(第3版)[M].北京:电子工业出版社,2013 [3] mysql常用监控脚本命令整理 [4] MySQL监控应该知道的九件事 [5] MySQL Enterprise Monitor [6] ZABBIX监控MYSQL [7] MySQL InnoDB监控 [8] mysql性能监控指标 [9] MyS

MySQL 调优/优化的 100 个建议

MySQL 调优/优化的 100 个建议 提交 我的评论 加载中 已评论 MySQL 调优/优化的 100 个建议 2015-07-08 数据库开发 数据库开发 数据库开发 微信号 DBDevs 功能介绍 分享数据库相关技术文章.教程和工具,另外还包括数据库相关的工作.偶尔也谈谈程序员人生 :) (点击上方蓝字,快速关注我们) (编注:本文写于 2011 年) MySQL是一个强大的开源数据库.随着MySQL上的应用越来越多,MySQL逐渐遇到了瓶颈.这里提供 101 条优化 MySQL 的建议