问题单状态查询服务器,3.4.1 单条查询问题还是服务器问题(2)

3.4.1 单条查询问题还是服务器问题(2)

使用SHOW PROCESSLIST 命令时,在尾部加上\G 可以垂直的方式输出结果,这很有用, 因为这样会将每一行记录的每一列都单独输出为一行, 这样可以方便地使用sort|uniq|sort 一类的命令来计算某个列值出现的次数:

$ mysql -e 'SHOW PROCESSLIST\G' | grep State: | sort | uniq -c | sort -rn

744 State:

67 State: Sending data

36 State: freeing items

8 State: NULL

6 State: end

4 State: Updating

4 State: cleaning up

2 State: update

1 State: Sorting result

1 State: logging slow query

如果要查看不同的列,只需要修改grep 的模式即可。在大多数案例中,State 列都非常有用。从这个例子的输出中可以看到,有很多线程处于查询执行的结束部分的状态,包括“freeing items”、end”、“cleaning up”和“logging slow query”。事实上,在案例中的这台服务器上,同样模式或类似的输出采样出现了很多次。大量的线程处于“freeingitems”状态是出现了大量有问题查询的很明显的特征和指示。

用这种技术查找问题,上面的命令行不是***的方法。如果MySQL 服务器的版本较新,也可以直接查询INFORMATION_SCHEMA 中的PROCESSLIST 表;或者使用innotop 工具以较高的频率刷新,以观察屏幕上出现的不正常查询堆积。上面演示的这个例子是由于InnoDB 内部的争用和脏块刷新所导致,但有时候原因可能比这个要简单得多。一个经典的例子是很多查询处于“Locked”状态,这是MyISAM 的一个典型问题,它的表级别锁定,在写请求较多时,可能迅速导致服务器级别的线程堆积。

使用查询日志

如果要通过查询日志发现问题,需要开启慢查询日志并在全局级别设置long_query_time 为0,并且要确认所有的连接都采用了新的设置。这可能需要重置所有连接以使新的全局设置生效;或者使用Percona Server 的一个特性,可以在不断开现有连接的情况下动态地使设置强制生效。

如果因为某些原因,不能设置慢查询日志记录所有的查询,也可以通过tcpdump 和ptquery-digest 工具来模拟替代。要注意找到吞吐量突然下降时间段的日志。查询是在完成阶段才写入到慢查询日志的,所以堆积会造成大量查询处于完成阶段,直到阻塞其他查询的资源占用者释放资源后,其他的查询才能执行完成。这种行为特征的一个好处是,当遇到吞吐量突然下降时,可以归咎于吞吐量下降后完成的***个查询(有时候也不一定是***个查询。当某些查询被阻塞时,其他查询可以不受影响继续运行,所以不能完全依赖这个经验)。

再重申一次,好的工具可以帮助诊断这类问题,否则要人工去几百GB 的查询日志中找原因。下面的例子只有一行代码,却可以根据MySQL 每秒将当前时间写入日志中的模式统计每秒的查询数量:

$ awk '/^# Time:/{print $3, $4, c;c=0}/^# User/{c++}' slow-query.log

080913 21:52:17 51

080913 21:52:18 29

080913 21:52:19 34

080913 21:52:20 33

080913 21:52:21 38

080913 21:52:22 15

080913 21:52:23 47

080913 21:52:24 96

080913 21:52:25 6

080913 21:52:26 66

080913 21:52:27 37

080913 21:52:28 59

从上面的输出可以看到有吞吐量突然下降的情况发生,而且在下降之前还有一个突然的高峰,仅从这个输出而不去查询当时的详细信息很难确定发生了什么,但应该可以说这个突然的高峰和随后的下降一定有关联。不管怎么说,这种现象都很奇怪,值得去日志中挖掘该时间段的详细信息(实际上通过日志的详细信息,可以发现突然的高峰时段有很多连接被断开的现象,可能是有一台应用服务器重启导致的。所以不是所有的问题都是MySQL 的问题)。

理解发现的问题(Making sense of the findings)

efbd9c5482068eda85ed34f67096c935.png

能又消失了。这样我们很容易会认为其实没有问题。

发现输出的图形异常意味着什么?通常来说可能是查询在某个地方排队了,或者某种查询的量突然飙升了。接下来的任务就是找出这些原因。

【责任编辑:book TEL:(010)68476606】

点赞 0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
图像识别技术在病虫害检测中的应用是一个快速发展的领域,它结合了计算机视觉和机器学习算法来自动识别和分类植物上的病虫害。以下是这一技术的一些关键步骤和组成部分: 1. **数据收集**:首先需要收集大量的植物图像数据,这些数据包括健康植物的图像以及受不同病虫害影响的植物图像。 2. **图像预处理**:对收集到的图像进行处理,以提高后续分析的准确性。这可能包括调整亮度、对比度、去噪、裁剪、缩放等。 3. **特征提取**:从图像中提取有助于识别病虫害的特征。这些特征可能包括颜色、纹理、形状、边缘等。 4. **模型训练**:使用机器学习算法(如支持向量机、随机森林、卷积神经网络等)来训练模型。训练过程中,算法会学习如何根据提取的特征来识别不同的病虫害。 5. **模型验证和测试**:在独立的测试集上验证模型的性能,以确保其准确性和泛化能力。 6. **部署和应用**:将训练好的模型部署到实际的病虫害检测系统中,可以是移动应用、网页服务或集成到智能农业设备中。 7. **实时监测**:在实际应用中,系统可以实时接收植物图像,并快速给出病虫害的检测结果。 8. **持续学习**:随着时间的推移,系统可以不断学习新的病虫害样本,以提高其识别能力。 9. **用户界面**:为了方便用户使用,通常会有一个用户友好的界面,显示检测结果,并提供进一步的指导或建议。 这项技术的优势在于它可以快速、准确地识别出病虫害,甚至在早期阶段就能发现问题,从而及时采取措施。此外,它还可以减少对化学农药的依赖,支持可持续农业发展。随着技术的不断进步,图像识别在病虫害检测中的应用将越来越广泛。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值