返回顶部
首页 > 资讯 > 数据库 >MySQL数据库执行analyze采集信息的示例
  • 241
分享到

MySQL数据库执行analyze采集信息的示例

2024-04-02 19:04:59 241人浏览 八月长安
摘要

这篇文章给大家分享的是有关Mysql数据库执行analyze采集信息的示例的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。故障简介之前,有开发找到我,说应用的某个功能查询比以前慢了

这篇文章给大家分享的是有关Mysql数据库执行analyze采集信息的示例的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。

故障简介

之前,有开发找到我,说应用的某个功能查询比以前慢了很多,让开发提供了慢的sql语句,去对应的mysql数据库看了一下执行计划,发现执行计划不正确,第一反应就是其中的一个表的统计信息不准确,导致了SQL语句的执行计划不对,从高效的查询SQL变成了慢SQL。定位到问题之后,自然是 analyze 一下,重新采集信息,这个时候,却发现 analyze 表上的所有 select 突然卡住了,不返回任何结果,然后应用就炸了,各种告警短信。

故障复盘

当时执行analyze操作的是一个slave库,受影响基本是select查询,所以在这里模拟的是查询操作。

创建模拟表

mysql> select * from t_test_1;
+----+--------+-------+--------+
| id | name   | name2 | status |
+----+--------+-------+--------+
|  1 | name1  | 1001  |      0 |
|  2 | name1  | 1002  |      1 |
|  3 | name1  | 1003  |      1 |
|  4 | name1  | 1004  |      0 |
|  5 | name1  | 1005  |      1 |
|  6 | name1  | 1006  |      0 |
|  7 | name1  | 1007  |      2 |
|  8 | name1  | 1008  |      0 |
|  9 | name1  | 1009  |      1 |
| 10 | name10 | 1001  |      0 |
+----+--------+-------+--------+
10 rows in set (0.00 sec)复制代码

模拟慢查询,由于这里数据量不够,所以用sleep代替 session1:模拟慢查询

mysql> select sleep(1000) from t_test_1;复制代码

session2:模拟收集表的统计信息

mysql> analyze table t_test_1;复制代码

session3:模拟执行analyze命令之后,在t_test_1表上执行一次select查询

mysql> select * from t_test_1 where id=5;复制代码

session4:查询所有会话信息

mysql> select * from processlist order by time desc;
+----+------+-----------+--------------------+---------+------+-------------------------+----------------------------------------------+
| ID | USER | HOST      | DB                 | COMMAND | TIME | STATE                   | INFO                                         |
+----+------+-----------+--------------------+---------+------+-------------------------+----------------------------------------------+
| 21 | root | localhost | testdb             | Query   |  242 | User sleep              | select sleep(1000) from t_test_1             |
| 23 | root | localhost | testdb             | Query   |  180 | Waiting for table flush | analyze table t_test_1                       |
| 24 | root | localhost | testdb             | Query   |    3 | Waiting for table flush | select * from t_test_1 where id=5            |
| 22 | root | localhost | infORMation_schema | Query   |    0 | executing               | select * from processlist order by time desc |
+----+------+-----------+--------------------+---------+------+-------------------------+----------------------------------------------+
4 rows in set (0.00 sec)复制代码

从session4获取的所有会话信息中,可以看到有2个会话的状态是“Waiting for table flush”。

Waiting for table flush原因

当MySQL数据库做FLUSH TABLES tbl_name, ALTER TABLE, RENAME TABLE, REPAIR TABLE, ANALYZE TABLE, or OPTIMIZE TABLE这些操作时,会导致需要关闭内存中的表,并重新打开表,加载新的表结构到内存中。但是关闭表,需要等待所有的在这个表上的操作执行结束(包括select,insert,update,lock table等),所以当有一个特别慢的select一直在执行时,analyze table命令就一直无法结束。

解决方案

既然知道什么原因导致的Waiting for table flush,就开始定位慢sql语句。在这里可以看到我们执行的是采集t_test_1表,所以需要查询涉及t_test_1表的慢查询,并且执行时间比analyze table t_test_1的执行时间还要长的会话。

mysql> select * from processlist where info like '%t_test_1%' and time >=(select time from processlist where id=23)  order by time desc;
+----+------+-----------+--------+---------+------+-------------------------+----------------------------------+
| ID | USER | HOST      | DB     | COMMAND | TIME | STATE                   | INFO                             |
+----+------+-----------+--------+---------+------+-------------------------+----------------------------------+
| 21 | root | localhost | testdb | Query   | 1187 | User sleep              | select sleep(1000) from t_test_1 |
| 23 | root | localhost | testdb | Query   | 1125 | Waiting for table flush | analyze table t_test_1           |
+----+------+-----------+--------+---------+------+-------------------------+----------------------------------+
2 rows in set (0.37 sec)复制代码

用上面的sql语句,很容易就定位到id=21的会话,导致analyze table t_test_1卡死,所以需要kill掉会话21.

mysql> kill 21;
Query OK, 0 rows affected (0.01 sec)

mysql> show full processlist;
+----+------+-----------+--------------------+---------+------+----------+-----------------------+
| Id | User | Host      | db                 | Command | Time | State    | Info                  |
+----+------+-----------+--------------------+---------+------+----------+-----------------------+
| 22 | root | localhost | information_schema | Query   |    0 | starting | show full processlist |
| 23 | root | localhost | testdb             | Sleep   | 1205 |          | NULL                  |
| 24 | root | localhost | testdb             | Sleep   | 1028 |          | NULL                  |
+----+------+-----------+--------------------+---------+------+----------+-----------------------+
3 rows in set (0.00 sec)复制代码

杀掉会话,故障解除。

建议

生产执行analyze table建议 1.执行之前,先估算一下表的数据量,根据经验预估需要消耗的时间,同时查看是否有采集信息表的慢SQL,长事务在执行。

2.避免在业务高峰期执行analyze table进行统计信息采集。

感谢各位的阅读!关于MySQL数据库执行analyze采集信息的示例就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到吧!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL数据库执行analyze采集信息的示例

本文链接: https://lsjlt.com/news/53376.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • MySQL数据库执行analyze采集信息的示例
    这篇文章给大家分享的是有关MySQL数据库执行analyze采集信息的示例的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。故障简介之前,有开发找到我,说应用的某个功能查询比以前慢了...
    99+
    2024-04-02
  • 阿里云如何采集数据库信息和数据
    在数字化转型的大潮中,企业对于数据的需求越来越大,而数据库作为数据的核心载体,其信息和数据的采集与管理就显得尤为重要。本文将详细阐述阿里云如何采集数据库信息和数据。 一、阿里云采集数据库信息和数据的基本原理阿里云采集数据库信息和数据的基本原...
    99+
    2023-12-12
    阿里 数据库 数据
  • 采集MySQL数据库运行状态数据的方法
    这篇文章主要介绍“采集MySQL数据库运行状态数据的方法”,在日常操作中,相信很多人在采集MySQL数据库运行状态数据的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”采集...
    99+
    2024-04-02
  • 采集网站特殊文件Meta信息的示例分析
    这篇文章给大家分享的是有关采集网站特殊文件Meta信息的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。采集网站特殊文件Meta信息元(Meta)信息是描述文件的属性的特殊信息,如文件的所有者、联系方式、机...
    99+
    2023-06-04
  • 【PG执行计划】Postgresql数据库执行计划统计信息简述
    --添加analyze实际执行来获得执行计划,可不加 explain analyze select * from test_table; --只...
    99+
    2024-04-02
  • Python采集图片数据的实现示例
    目录前言:发送请求保存数据保存图片总结:前言: 在网络时代,图片已经成为了我们生活中不可或缺的一部分。随着各种社交媒体的兴起,我们可以在网上看到越来越多的图片,但是如何从这些图片中获...
    99+
    2023-05-17
    Python采集图片 Python图片采集
  • 数据库中如何修改自动收集统计信息任务的执行时间
    小编给大家分享一下数据库中如何修改自动收集统计信息任务的执行时间,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧! 一般情况,oracle11G数据库自动收集统计信...
    99+
    2024-04-02
  • 使用redis数据库存储用户信息的示例
    这篇文章给大家分享的是有关使用redis数据库存储用户信息的示例的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。比较推荐的方式是使用redis数据库中的hash类型来存储。当然使用...
    99+
    2024-04-02
  • mysql通过命令行修改数据库信息
    1.语法: ALTER DATABASE 数据库名 CHARACTER SET 编码 COLLATE 校对规则2.语法解析: 数据库名:demo1 编码:编码集中之一比如utf8  &n...
    99+
    2024-04-02
  • IDEA连接Mysql数据库并执行查询操作的示例分析
    小编给大家分享一下IDEA连接Mysql数据库并执行查询操作的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! 1、先写个 Mysql 的链接设置...
    99+
    2023-06-15
  • mysql查看数据库信息的命令
    简介MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS...
    99+
    2024-04-02
  • Python实现批量采集商品数据的示例详解
    目录本次目的知识点开发环境代码本次目的 python批量采集某商品数据 知识点 requests 发送请求 re 解析网页数据 json 类型数据提取 csv 表格数据保存 开发环境...
    99+
    2024-04-02
  • 收集统计数据库信息的隐患有哪些
    这篇文章主要讲解了“收集统计数据库信息的隐患有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“收集统计数据库信息的隐患有哪些”吧!收集统计信息使得SQL产...
    99+
    2024-04-02
  • mysql创建数据库的示例
    小编给大家分享一下mysql创建数据库的示例,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!在mysql中,可以使用“CREATE DATABASE”语句来创建数据库,语法格式为“CREATE ...
    99+
    2024-04-02
  • MySQL数据库的示例分析
    这篇文章给大家分享的是有关MySQL数据库的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、数据库概要数据库(Database)是存储与管理数据的软件系统,就像一个存入...
    99+
    2024-04-02
  • 数据库中如何获取方法、查看执行顺序、统计信息
    小编给大家分享一下数据库中如何获取方法、查看执行顺序、统计信息,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! ...
    99+
    2024-04-02
  • Python使用psutil库对系统数据进行采集监控的方法
    大家好,我是辰哥~ 今天给大家介绍一个可以获取当前系统信息的库——psutil 利用psutil库可以获取系统的一些信息,如cpu,内存等使用率,从而可以查看当前系统的使用情况,实时采集这些信息可以达到实时监控系统的...
    99+
    2022-06-03
    Python psutil系统监控 Python使用psutil库
  • mysql数据库应用管理+乱码+字符集的示例分析
    这篇文章主要为大家展示了“mysql数据库应用管理+乱码+字符集的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“mysql数据库应用管理+乱码+字符集的...
    99+
    2024-04-02
  • SQL Server生成sql脚本并执行还原数据库的示例分析
    这篇文章将为大家详细讲解有关SQL Server生成sql脚本并执行还原数据库的示例分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。上次介绍过如何通过ba...
    99+
    2024-04-02
  • SQL提取数据库表名及字段名等信息代码示例
    本文向大家介绍了使用SQL语句提取数据库所有表的表名、字段名的实例代码,在SQLserver 中进行了测试,具体内容如下: --查询所有用户表所有字段的特征 SELECT D.Name as T...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作