`
- 浏览:
235795 次
- 性别:
- 来自:
广州
-
Θ Sleep状态
√ 通常代表资源未释放,如果是通过连接池,sleep状态应该恒定在一定数量范围内
√ 实战范例:因前端数据输出时(特别是输出到用户终端)未及时关闭数据库连接,导致因网络连接速度产生大量sleep连接,在网速出现异常时,数据库too many connections挂死。
√ 简单解读,数据查询和执行通常只需要不到0.01秒,而网络输出通常需要1秒左右甚至更长,原本数据连接在0.01秒即可释放,但是因为前端程序未执行close操作,直接输出结果,那么在结果未展现在用户桌面前,该数据库连接一直维持在sleep状态!
Θ Waiting for net, reading from net, writing to net
√ 偶尔出现无妨
√ 如大量出现,迅速检查数据库到前端的网络连接状态和流量
√ 案例:因外挂程序,内网数据库大量读取,内网使用的百兆交换迅速爆满,导致大量连接阻塞在waiting for net,数据库连接过多崩溃
Θ Locked状态
√ 有更新操作锁定
√ 通常使用innodb可以很好的减少locked状态的产生,但是切记,更新操作要正确使用索引,即便是低频次更新操作也不能疏忽。如上影响结果集范例所示。
√ 在myisam的时代,locked是很多高并发应用的噩梦。所以mysql官方也开始倾向于推荐innodb。
Θ Copy to tmp table
√ 索引及现有结构无法涵盖查询条件,才会建立一个临时表来满足查询要求,产生巨大的恐怖的i/o压力。
√ 很可怕的搜索语句会导致这样的情况,如果是数据分析,或者半夜的周期数据清理任务,偶尔出现,可以允许。频繁出现务必优化之。
√ Copy to tmp table通常与连表查询有关,建议逐渐习惯不使用连表查询。
实战范例:
某社区数据库阻塞,求救,经查,其服务器存在多个数据库应用和网站,其中一个不常用的小网站数据库产生了一个恐怖的copy to tmp table操作,导致整个硬盘i/o和cpu压力超载。Kill掉该操作一切恢复。
Θ Sending data
Sending data并不是发送数据,别被这个名字所欺骗,这是从物理磁盘获取数据的进程,如果你的影响结果集较多,那么就需要从不同的磁盘碎片去抽取数据,
√ 偶尔出现该状态连接无碍。
√ 回到上面影响结果集的问题,一般而言,如果sending data连接过多,通常是某查询的影响结果集过大,也就是查询的索引项不够优化。
√ 如果出现大量相似的SQL语句出现在show proesslist列表中,并且都处于sending data状态,优化查询索引,记住用影响结果集的思路去思考。
Θ Storing result to query cache
√ 出现这种状态,如果频繁出现,使用set profiling分析,如果存在资源开销在SQL整体开销的比例过大(即便是非常小的开销,看比例),则说明query cache碎片较多
√ 使用flush query cache可即时清理,也可以做成定时任务
√ Query cache参数可适当酌情设置。
Θ Freeing items
√ 理论上这玩意不会出现很多。偶尔出现无碍
√ 如果大量出现,内存,硬盘可能已经出现问题。比如硬盘满或损坏。
√ i/o压力过大时,也可能出现Free items执行时间较长的情况。
Θ Sorting for …
√ 和Sending data类似,结果集过大,排序条件没有索引化,需要在内存里排序,甚至需要创建临时结构排序。
Θ 其他
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
MySQL中的`SHOW PROCESSLIST`命令是一个非常实用的工具,它允许管理员查看当前正在运行的所有MySQL进程,包括查询、更新和其他数据库操作。这个命令对于诊断性能问题、监控活动以及管理资源至关重要。下面我们将深入...
总的来说,`show processlist`是MySQL性能调优的得力助手,通过分析其输出,我们可以及时发现并解决性能问题,确保数据库高效稳定运行。在日常运维中,定期检查和分析`processlist`可以帮助我们预防潜在的性能瓶颈,...
`SHOW PROCESSLIST`是MySQL管理工具中非常关键的一个命令,用于查看当前系统中所有线程的状态,帮助数据库管理员监控和诊断系统性能问题。这个命令在MySQL服务器资源占用过高时尤其有用,因为它能揭示哪些SQL语句...
这个表包含了与show processlist命令相同的信息,可以使用SQL语句进行查询和分析。 例如,我们可以通过以下SQL语句来查询和排序这些信息: select id, db, user, host, command, time, state, info from ...
这样的系统通常会定期抓取`SHOW PROCESSLIST`的结果,然后存储到一个日志文件或者数据库中,以便后续的分析和报告。这样可以提供历史数据,帮助分析数据库的负载模式,找出资源消耗高的查询,并进行优化。 在PHP中...
14. `SHOW INNODB STATUS`: 显示InnoDB存储引擎的状态,用于分析事务、锁等问题。 15. `SHOW LOGS` (仅适用于BDB存储引擎): 显示日志信息,有助于诊断和调试。 16. `SHOW WARNINGS` 和 `SHOW ERRORS`: 分别显示...
首先,Oracle并没有提供一个像MySQL中的`SHOW PROCESSLIST`命令来直接查看当前的SQL执行情况。不过,我们可以通过查询动态性能视图(Dynamic Performance Views)来获取类似的信息。以下是两个常用的脚本: 1. **...
4. **状态分析** - `State`列中的各种状态可以帮助识别潜在的问题,比如长时间的`Waiting for table metadata lock`可能表明有锁定问题,`Copying to tmp table on disk`可能表示内存不足,导致数据需写入磁盘临时...
2. **执行`SHOW PROCESSLIST`命令**: 登录后,在MySQL提示符下输入`SHOW PROCESSLIST;`命令,可以查看当前所有正在运行的进程列表。这个命令返回的结果包含了所有正在执行中的进程的信息,包括进程ID(Id)、用户、...
`SHOW PROFILE` 和 `SHOW PROCESSLIST` 是两个非常有用的工具,它们可以帮助我们理解和改善SQL语句的执行效率。 首先,我们来了解一下“慢查询”。在MySQL中,慢查询是指执行时间超过预设阈值(默认10秒)的SQL语句...
当感觉mysql性能出现问题时,通常会先看下当前mysql的执行状态,使用 show processlist 来查看,例如: 其中state状态列信息非常重要,先看下各列含义,然后看下state常用状态 各列的含义 1、id 一个标识,你要kill...
最后,MySQL提供了一个“SHOW PROCESSLIST”命令,让DBA可以直接查看当前所有活动进程的状态信息,包括id、user、host、db、command、time、state、info等列。其中,id为连接标识,user显示当前用户,host指示命令...
定期使用SHOW PROCESSLIST命令检查当前正在执行的查询和它们的状态,以发现潜在的死锁。 分析死锁原因: 仔细分析死锁日志,找出导致死锁的事务和查询。 确定死锁涉及的表和行,以及它们之间的依赖关系。 分析查询的...
MySQL Sending data导致查询很慢的问题详细分析 sphinx支持倒排索引,但sphinx从mysql查询源数据的时候,查询的记录4~5分钟左右 show processlist查看sql语句执行状态,查询结果如下
`SHOW PROCESSLIST`命令可以显示当前所有正在运行的MySQL连接和它们的状态信息,包括用户的名称、ID、主机地址、执行的查询、执行时间等。这对于诊断数据库性能问题非常有用。例如,如果发现某个查询长时间未完成,...