mysql查看实时语句和慢sql

2023-05-16

mysql查看实时语句和慢sql

在这里插入图片描述

查看实时语句

Mysql除了手动执行的语句,还有很多在后台由其他模块执行的语句,按理来说,那些由其他模块执行的语句是不能实时查看的,因为这个资源消耗特别的大,但是当我们实在需要查看实时sql语句的时候也不是做不到,需要手动开启一个日志开关general_log

首先登陆mysql,然后执行show variables like "general_log%";,看一下反馈的结果,如下:

mysql> show variables like "general_log%";
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| general_log      | OFF   |
| general_log_file |       |
+------------------+-------+
2 rows in set (0.04 sec)

发现这个Value是off,那么就说明实时记录general_log没有开启,如果我们要开启它很简单,如下:

mysql> set global log_output = file;
mysql> set global general_log = 'ON';
mysql> set global general_log_file = '/tmp/mysql/general_log.log';

可见我们不仅打开了general_log的开关,而且设置日志输出方式为文件(如果设置log_output=table的话,则日志结果会记录到名为gengera_log的表中,这表的默认引擎都是CSV)。同时规定它的保存位置是/tmp/mysql/general_log.log

但是这个是临时方法,如果mysql重启了那么就会失效,如果想要永久有效的话,就要编辑my.cnf,添加下面两句话:

general_log = 1
general_log_file = /tmp/mysql/general_sql.log

这里要注意!开启general_log会影响性能,谨慎使用!正式系统用完要关闭!!!关闭的语句SET GLOBAL general_log = 'OFF';

查看慢sql

慢sql的意思就是那些执行很慢的sql,这些sql拖慢进程的执行效率而且有很大的优化空间。默认的来说,执行时间超过1秒就算慢sql了,在mysql里输入show variables like 'long%',就会看到如下的内容:

mysql> show variables like 'long%';
+-----------------+----------+
| Variable_name   | Value    |
+-----------------+----------+
| long_query_time | 1.000000 |
+-----------------+----------+
1 row in set (0.00 sec)

这个long_query_time是可以更改的,这里是1,那就是代表查询时间大于(不是大于等于)1秒的都是记录到日志,最大值是10。如果写的是0,那么就是输出所有的语句。

这里多说一句,使用命令set global long_query_time=4修改慢查询阈值为4秒后,需要重新连接或新开一个会话才能看到修改值。你用show variables like 'long_query_time'查看是当前会话的变量值,你也可以不用重新连接会话,而是用show global variables like 'long_query_time';

那么记录这些慢日志的地方在哪呢?使用show variables like '%slow_query_log%';看看:

mysql> show variables  like '%slow_query_log%';
+---------------------+-----------------------------------------------+
| Variable_name       | Value                                         |
+---------------------+-----------------------------------------------+
| slow_query_log      | OFF                                           |
| slow_query_log_file | /tmp/mysql/DB-Server-slow.log 				  |
+---------------------+-----------------------------------------------+
2 rows in set (0.00 sec)

这里说明慢日志的地址是/tmp/mysql/DB-Server-slow.log,但是慢日志记录的功能没有启动。如果要启动,语句是:set global slow_query_log=1;,跟上面开启实时日志general_log一样,这个方法仅仅是一个临时方法,重启了mysql就会失效,如果要长期生效,还是在my.cnf文件里添加如下两句话:

slow_query_log =1
slow_query_log_file=/tmp/mysql/DB-Server-slow.log

慢日志还有一个系统变量叫log-queries-not-using-indexes,它的意思是未使用索引的查询也被记录到慢查询日志中,哪怕他可能执行的非常快(可选项)。如果调优的话,建议开启这个选项。另外,开启了这个参数,其实使用full index scan的sql也会被记录到慢查询日志。如下:

mysql> show variables like 'log_queries_not_using_indexes';
+-------------------------------+-------+
| Variable_name                 | Value |
+-------------------------------+-------+
| log_queries_not_using_indexes | OFF   |
+-------------------------------+-------+
1 row in set (0.00 sec)

mysql> set global log_queries_not_using_indexes=1;
Query OK, 0 rows affected (0.00 sec)

如果你想自己试试慢sql是否被记录,那么可以使用select sleep(5);这样的语句,执行效果如下:

mysql> select sleep(5) ;
+----------+
| sleep(5) |
+----------+
|        0 |
+----------+
1 row in set (5.00 sec)

mysql> select * from mysql.slow_log;
+---------------------+---------------------------+------------+-----------+-----------+---------------+----+----------------+-----------+-----------+-----------------+-----------+
| start_time          | user_host                 | query_time | lock_time | rows_sent | rows_examined | db | last_insert_id | insert_id | server_id | sql_text        | thread_id |
+---------------------+---------------------------+------------+-----------+-----------+---------------+----+----------------+-----------+-----------+-----------------+-----------+
| 2018-01-30 21:45:23 | root[root] @ localhost [] | 00:00:05   | 00:00:00  |         1 |             0 |    |              0 |         0 |         1 | select sleep(5) |         2 |
+---------------------+---------------------------+------------+-----------+-----------+---------------+----+----------------+-----------+-----------+-----------------+-----------+
1 rows in set (0.00 sec)

参考资料

http://www.cnblogs.com/kerrycode/p/5593204.html
https://www.cnblogs.com/qmfsun/p/4844472.html
http://www.cnblogs.com/jasondan/p/3491258.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mysql查看实时语句和慢sql 的相关文章

  • Mysql带限制的删除语句

    我试图从表中删除行 但出现错误 DELETE FROM chat messages ORDER BY timestamp DESC LIMIT 20 50 我在 50 时收到此错误 您的 SQL 语法有错误 检查与您的 MySQL 服务器版
  • SQL Server 查询中 UNION ALL 与 OR 条件

    我必须根据表上不存在的条件选择一些行 如果我使用如下的 union all 它会在不到 1 秒的时间内执行 SELECT 1 FROM dummyTable WHERE NOT EXISTS SELECT 1 FROM TABLE t WH
  • 如何使用一个命令删除 SQL 数据库中的所有索引?

    那么 如何通过一条命令删除 SQL 数据库中的所有索引呢 我有这个命令可以获取所有 20 个左右的 drop 语句 但是如何从这个 结果集 运行所有这些 drop 语句呢 select from vw drop idnex 给我相同列表的另
  • jdbc4.MySQLSyntaxErrorException:数据库中不存在表

    我正在使用 SpringBoot 开发一个网络应用程序 这是我的application properties文件来指定访问数据库的凭据 spring datasource driverClassName com mysql jdbc Dri
  • 计算2个日期之间每个日期的记录数

    我必须创建一个查询来返回多轴图表的结果 我需要计算为 2 个日期之间的每个日期创建的 ID 数量 我试过这个 DECLARE StartDate datetime2 7 11 1 2020 EndDate datetime2 7 2 22
  • Tomcat 6找不到mysql驱动

    这里有一个类似的问题 但关于类路径 ClassNotFoundException com mysql jdbc Driver https stackoverflow com questions 1585811 classnotfoundex
  • 使用什么框架来引导我的第一个生产 scala 项目?

    我正在第一次涉足 scala 的生产应用程序 该应用程序当前打包为 war 文件 我的计划是创建 scala 编译工件的 jar 文件 并将其添加到 war 文件的 lib 文件夹中 我的增强功能是通过 Jersey 公开的 mysql 支
  • 如何对 SQL 进行多次查询

    我正在尝试创建一个表 并在 PHP 脚本的帮助下在数据库中插入一些值 虽然只插入 1 行 但效果很好 当我尝试输入更多行数时 出现错误 我需要为每个查询编写完整的插入语句 因为我正在使用在线 Excel 到 SQL 查询转换器
  • Google Cloud SQL 上的故障转移如何运作?

    我打算将 PHP 应用程序 从 Google Cloud Platform 外部的服务器 连接到 Google Cloud SQL 我想知道如何设计应用程序以正确地对其数据库进行故障转移 根据manual https cloud googl
  • 在 plpgsql 函数中使用 quote_ident()

    我是创建 plpgsql 函数的新手 我需要一些有关在函数内部执行的动态命令上使用 quote ident 甚至 quote literal 的说明 希望有人能给我一个关于它们如何在函数内部工作的具体解释 TIA 这是一个例子 EXECUT
  • 如何将所有父母的父母作为循环引用表中子对象的列?

    我有一个表格 其中有类似的列 entityID entityName parentID 我如何编写一个查询来返回实体的所有父级级别 以返回类似的内容 childentityname parentlevel1name parentlevel2
  • PostgreSQL函数中sql语言和plpgsql语言的区别

    我很新数据库开发所以我对下面的例子有一些疑问 函数 f1 语言 SQL create or replace function f1 istr varchar returns text as select hello varchar istr
  • MYSQL:如何在同一查询中联接两个表,两次引用同一个表

    我有两张桌子 我正在尝试将下面的示例两个表与表 1 引用表 2 两次结合起来 例如 如果我查看表 1 组 2 和成员 7 它应该查找表 2 中的 ID 并给出输出 Group Members Name Name 2 7 Blue Dog T
  • 如何在 SQL Server 2012 中选择除一列之外的所有列? [复制]

    这个问题在这里已经有答案了 有没有一种方法可以选择所有列 但只选择我不想选择的特定列 我的意思是有时我会遇到这样的问题 表有数百个字段 而我只需要删除一个字段 我需要重写所有列吗 有什么窍门吗 喜欢select
  • hive - 在值范围之间将一行拆分为多行

    我在下面有一张表 想按从开始列到结束列的范围拆分行 即 id 和 value 应该对开始和结束之间的每个值重复 包括两者 id value start end 1 5 1 4 2 8 5 9 所需输出 id value current
  • 基本的多对多sql选择查询

    我认为这应该很容易 但它却在逃避我 我的帐户和帐户组之间存在多对多关系 一个帐户可以位于零个或多个组中 因此我使用标准连接表 Accounts ID BankName AcctNumber Balance AccountGroups ID
  • 重用 t-sql 游标的起始位置?

    我正在开发一个在临时表上使用游标的存储过程 我已经阅读了一些关于为什么不需要游标的内容 但在这种情况下我相信我仍然需要使用游标 在我的过程中 我需要遍历表的行两次 声明游标后 已经单步执行临时表并关闭游标 重新打开时游标的位置是否仍保留在表
  • 使用函数的 SQL 查询 - 如何获取列表的最大计数

    如何查询 MAXIMUM COUNT 交易次数 我的代码如下 SELECT customer id COUNT customer id FROM rental GROUP BY customer id HAVING MAX COUNT cu
  • 查询为空 Node Js Sequelize

    我正在尝试更新 Node js 应用程序中的数据 我和邮递员测试过 我的开发步骤是 从数据库 MySQL 获取ID为10的数据进行更新 gt gt 未处理的拒绝SequelizeDatabaseError 查询为空 我认识到 我使用了错误的
  • 替换字符串中的多个字符,而不使用任何嵌套替换函数

    我的表中存储了一个方程 我一次获取一个方程 并希望将所有运算符替换为任何其他字符 输入字符串 N 100 6858 6858 N 100 0 2 N 35 运算符或模式 替换字符 输出字符串 N 100 6858 6858 N 100 0

随机推荐

  • Docker运行ubuntu22.04出现异常

    问题 我在ubuntu22 04的容器里面运行apt update的时候出现了以下报错 span class token punctuation span root 64 VM 16 9 centos docker kubuntu span
  • k8s实战系列:3-存储的花样玩法(上)

    从存储 到后面的容器运行时 网络接口 可观察性组件等就可以感受到云原生的开放性 包容性和生态的丰富性 我们再回顾下云原生景观图 https landscape cncf io Docker存储 容器服务之所以如此流行 一大优势即来自于运行容
  • k8s实战系列:3-存储的花样玩法(下)

    k8s实战系列 3 存储的花样玩法 上 中我们谈论了Docker存储 已经Kubernetes中的配置数据中的ConfigMap和Secret 接下来我们会讨论下Kubernetes中的临时存储 持久存储等 3 DownwardAPI Do
  • 基于kube-scheduler-simulator编写自己的调度程序

    基于kube scheduler simulator编写自己的调度程序 由于默认的 Kubernetes 调度程序是高度可配置的 在许多情况下 我们不必编写任何代码来定制调度行为 然而 想要了解调度程序如何工作 以及如何与其他组件交互的人
  • Goland嗖嗖的: 快捷键,自动生成代码等效率小技巧

    快捷键大全 Windows Linux版本 Mac版本 代码自动生成 1 动态模板 在 GoLand 中 xff0c 预定义的动态模板位于 Preferences Editor Live Templates xff0c 并且分组 插入动态模
  • 基于Goland和dlv远程调试Kubernetes组件

    一个正常运行的 Kubernetes 集群包含以下的各种组件 通常开发者日常编码都基于Windows Mac上的IDE xff08 VsCode Goland xff09 xff0c 编码完成后再部署到远端Linux机器运行 因此 xff0
  • centos8 mips交叉编译环境搭建(保姆级教程)

    最近一直在折腾我的光猫 路由器以及学习嵌入式开发的相关知识 xff0c 于是有了下面这篇文章 xff0c 参考了网上很多文章 xff0c 终于实现了自己的目标 xff0c 简单的记录下来 xff0c 名为 保姆级 其实是因为自己技术很菜 x
  • Docker load 大镜像(17G) 报错no space left on device

    span class token comment 导入加载镜像 xff0c test tar大小有16G左右 span span class token function docker span load span class token
  • 收集yum install安装的软件的全量依赖 rpm 包

    离线安装主要有两种方式 xff1a 源码编译 rpm包安装 源码编译耗费时间长且缺乏编译环境 xff0c 所以一般都选择使用离线 rpm 包安装 有时候离线 rpm 包有比较难于收集齐全 xff0c 但测试环境我们又可以通过 yum ins
  • 镜像搬运工具 Skopeo 使用

    镜像搬运工具 Skopeo 使用 搬砖工具 作为公司内部 PaaS toB 产品的打包发布人员 xff0c 容器镜像对我们打工人而言就像是工地上的砖头 x1f9f1 xff0c 而我的一部分工作就是将这些砖头在各个仓库之间搬来搬去 xff0
  • Habor数据迁移方式有多少,skopeo效率最好

    迁移流程 两个不同的Harbor实例迁移数据 含镜像数据和数据库数据 迁移方式 Harbor 镜像skopeoimage syncer手工机制基于策略的内容机制 xff1a 支持多种过滤器 xff08 镜像库 tag和标签 xff09 与多
  • Harbor新建仓库目标提示 the registry is unhealthy

    两个harbor需要通过镜像复制策略来同步镜像 在仓库管理添加的harbor状态是unhealthy 问题排查 两个harbor需要通过镜像复制策略来同步镜像 在仓库管理添加的harbor状态是unhealthy 本文中 目标仓库的地址是i
  • Harbor断电重启postgres报错 could not locate a valid checkpoint record

    Harborv2 2 2内置的数据库是postgres9 6 21 服务器突然断电 重启harbor后报错 信息如下 Oct span class token number 21 span span class token number 1
  • Harbor镜像层膨胀,占用存储过大

    问题现象 使用Harbor镜像复制策略后 本地镜像存储目录飙升到1T 外链图片转存失败 源站可能有防盗链机制 建议将图片保存下来直接上传 img imf8FtHs 1666958403009 AppData Roaming Typora t
  • Harbor 镜像复制 每 30 分钟发生一次超时

    报错信息 span class token number 2022 span 10 27T22 27 13Z span class token punctuation span ERROR span class token punctuat
  • 配置对 Harbor 的 HTTPS 访问

    配置对 Harbor 的 HTTPS 访问 默认情况下 xff0c Harbor 不附带证书 可以在没有安全性的情况下部署 Harbor xff0c 以便你可以通过 HTTP 连接到它 但是 xff0c 在生产环境中 xff0c 建议使用
  • 申请阿里云免费证书

    阿里云免费SSL证书申请 阿里云免费SSL证书是赛门铁克 xff08 Symantec xff09 品牌的 xff0c 免费证书只能保护一个域名 xff08 带www和不带www可以通用 xff09 阿里云个人账号和企业账号均可申请 xff
  • centos 7 / 8 texinfo安装

    在安装一些软件时会出现缺少texinfo的提示 xff0c 在centos7中texinfo非常容易安装 xff0c 只要执行 yum span class token function install span y texinfo 就可以
  • Harbor使用公网证书

    Harbor使用公网证书 申请公网证书 申请阿里云免费证书 因为Harbor使用Nginx做代理 xff0c 因此在公网证书审核通过后 xff0c 在证书下载面板 xff0c 单击Nginx服务器操作列的下载 下载解压后您将会获得以下文件
  • mysql查看实时语句和慢sql

    mysql查看实时语句和慢sql 查看实时语句 Mysql除了手动执行的语句 xff0c 还有很多在后台由其他模块执行的语句 xff0c 按理来说 xff0c 那些由其他模块执行的语句是不能实时查看的 xff0c 因为这个资源消耗特别的大