高性能的MySQL(3)单条查询问题还是服务器问题

发现问题的时候,要确定是单条查询的问题还是服务器的问题,如果服务器上的所有程序都变慢了,又突然都变好了,每一条查询都变慢了,那么慢查询就不一定是原因,反过来说,如果服务器整体运行没有问题,只有某条查询偶尔变慢,就需要将注意力放到这条特定查询上。

为了确定问题的根源,一般我们通过三种技术来解决。

1、show global status

这个方法实际就是以较高的频率比如一秒执行一次show global status命令来捕获数据,问题出现时,则通过某些计数器(比如 Threads_running、Threads_connected、Questions、Queries)的变化来发现。这个对服务的影响比较小。例如下面的例子

通过awk计算输出每秒的查询数、线程连接数和正在执行查询的线程数,通过一段时间的运行,把数据绘制成图像,可以有利于分析和定位问题。

2、使用show processlist

这个方法通过不停的捕获 show processlist的输出,来观察是否有大量线程处于不正常状态。

使用show processlist命令时,在尾部加上\G可以垂直输出,可以方便的结合sort|uniq|sort一类的命令来计算某个列值出现的次数

如下面的例子

因为是我本地的测试环境,所以没有什么数据,另外ubuntu下的截图太不好用了,只能将就了。

如果MySQL版本较新也可以采用上一篇介绍的方法,查询INFORMATIONA_SCHEMA.PROCESSLIST表。

比如:state大量的线程处于“freeing items”状态是出现了大量有问题查询的很明显的特征

MyISAM一个典型的问题是,他的表级别锁定,在写请求很多时,可能迅速导致服务器级别的线程堆积。

时间: 2024-09-08 19:15:28

高性能的MySQL(3)单条查询问题还是服务器问题的相关文章

高性能的MySQL(6)查询慢与重构查询

只有好的库表结构.合理的索引还不够,我们还需要合理的设计查询,齐头并进,一个不少才能充分发挥MySQL的优势. 一.查询为什么会慢? 每一个查询由一系列的子任务组成,每个子任务都会消耗一定的时间.这个我们在之前的单个查询分析时已经简单介绍了,当然还有额外的因素,比方说包括网络,CPU计算,统计信息,执行计划,锁等待等操作,或者底层引擎在调用内存,CPU操作,I/O操作等上的消耗时间. 优化查询的目的就是减少和消除这些操作所花费的时间. 查询性能低下的最基本原因是访问的数据太多,大部分的性能低下的

高性能的MySQL(2)单条SQL性能

实际应用中,分析单条查询SQL性能,有3种方法:show status.show profile和慢查询日志. 一.使用SHOW PROFILE 1.默认是禁用的,在会话中开启 #开启profile set profiling=1; 2.当一个查询到达服务器时,此工具会把分析信息记录到一张临时表,并且给查询赋予一个从1开始的整数标识符,可以通过show profiles查看. 3.上面只显示了时间上的精度,但是有些时候我们需要更多的信息那么,我们可以使用 show profile for que

高性能的MySQL(6)查询执行机制(一)

希望优化查询性能的时候,最好的办法是弄清楚MySQL是如何优化和执行查询的.了解了内部机制,才能更好的实施设计. 当MySQL执行一个查询时,到底做了什么,先看一副图吧: 1.客户端发送一条查询给服务器. 2.服务器先检查查询缓存,如果命中了缓存,则立刻返回缓存中的结果,否则进入下一步. 3.服务器端进行SQL解析.预处理.再由优化器生成对应的执行计划. 4.MySQL根据优化器生成的执行执行计划,调用存储引擎的API来进行查询. 5.将结果返回给客户端 上面的每一步都很复杂,特别是查询优化器这

高性能的MySQL(2)慢查询

一.剖析MySQL查询 1.首先从慢查询开始,慢查询是开销最低,精度最高的测量查询时间的工具. a.开始mysql的慢查询,修改my.conf [mysqld] #开启慢查询 log_slow_queries = ON #指定日志文件存放位置,可以为空,系统会给一个缺省的文件host_name-slow.log log-slow-queries = /usr/local/mysq/var/slowquery.log #记录超过的时间,默认为10s long_query_time = 1 #log

【转载】低成本和高性能的MySQL云数据库的实现淘宝 MySQL

低成本和高性能的MySQL云数据库的实现 作者: 鸣嵩/曹伟(集团技术专家) 本文刊登于<程序员>杂志2012年12期上,转载请注明         UMP(Unified MySQL Platform)系统是淘宝核心系统数据库团队开发的低成本和高性能的MySQL云数据方案,关键模块采用Erlang语言实现.系统中包含了controller服务器.proxy服务器.agent服务器.API/Web服务器.日志分析服务器.信息统计服务器等组件,并且依赖于Mnesia.LVS.RabbitMQ.Z

什么是mysql左链接查询 如何使用?

MySQL左连接查询是连接查询中的一种方式,下面就为您介绍MySQL左连接查询中的一些问题谈论,如果您感兴趣的话,不妨一看. 我这里所说的主表是指在连接查询里MySQL以哪个表为主进行查询.比如说在MySQL左连接查询里,一般来说左表就是主表,但这只是经验之谈,很多时候经验主义是靠不住的,为了说明问题,先来个例子,建两个演示用的表categories和posts: CREATE TABLE IF NOT EXISTS `categories` (     `id` int(10) unsigne

高性能的MySQL(7)Query Cache技术详解

MySQL查询缓存保存查询返回的完整结果.当查询命中该缓存,会立刻返回结果,跳过了解析,优化和执行阶段. 查询缓存会跟踪查询中涉及的每个表,如果这写表发生变化,那么和这个表相关的所有缓存都将失效. 但是随着服务器功能的强大,查询缓存也可能成为整个服务器的资源竞争单点. 如何来判断打开查询缓存的好坏呢,就是本篇的内容~~~ 一.如何判断命中缓存 缓存存放在一个引用表中,通过一个哈希值引用,这个哈希值包括查询本身,数据库,客户端协议的版本等,任何字符上的不同,例如空格,注释都会导致缓存不命中. 当查

mysql树形结构查询(存储过程)

就用数据数据库表地址数据(中国地区)来说吧(用Windows请使用gbk !!) 可直接运行(去除注解) 存储过程: DELIMITER //drop procedure if exists findLChild///* iid 递归父节点 , layer 允许递归深度 */CREATE PROCEDURE findLChild(iid bigint(20),layer bigint(20))BEGIN /*创建接受查询的临时表 */ create temporary table if not

MySQL 数据库简单查询的方法

  建立如此结构的数据表,并插入110万条随机记录,进行查询性能测试. 插入110万条随机记录后,数据表的大小为102MB. 现在使用phpMyAdmin自带的SQL查询器进行性能分析. 下面进行带索引的模式下查询测试: A. 随机的字符型字段全匹配查询,用时 0.0005(S) B.随机的主键查询,用时 0.0005(S) C.随机的使用字符函数查询,用时 0.4482(S) D.使用LIKE模式一查询,用时 0.0007(S) E.使用LIKE模式二查询,用时 0.7361(S) 下面是删除