热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

mysql查看程序执行的sql,mysql查看当前执行的sql

本文目录一览:1、Mysql学会查看sql的执行计划

本文目录一览:


  • 1、Mysql学会查看sql的执行计划


  • 2、如何查看mysql执行过的语句


  • 3、如何记录MySQL执行过的SQL语句


  • 4、如何查看mysql中执行sql语句


  • 5、mysql中怎样显示服务器正在执行的sql任务


  • 6、如何看mysql执行的sql语句

Mysql学会查看sql的执行计划

首先在Mysql的服务中有 连接器、查询缓存(Mysql8 已经删除)、分析器、优化器、执行器等,所有跨存储引擎的功能都在这一层实现

而一条sql怎么执行是由优化器决定的, 优化器是在表里面有多个索引的时候,决定使用哪个索引;或者在一个语句有多表关联(join)的时候,决定各个表的连接顺序。

而执行计划就是优化器优化后的sql的执行的详细方案

Mysql中查看执行计划的方式有两种 : 1. 使用desc    2.使用 explain  使用它俩的效果是一样的

接下来要通过执行计划知道sql是怎么执行的

执行计划中有几个重要的字段, 分别是 

id,  table,  type,  possible_keys,  key,  key_len, Extra

id :  可以通过ID来查看在多表联查中sql是先查询哪张表的 id相同的从上往下依次执行,id不同的id大的先执行

table :   table当然就是查询的表名

type :  查询的类型   查询类型分为  ALL,  index,  range,  ref , eq_ref, const(system),  null

        ALL: 指的全盘扫描,没有走任何索引   查询结果集大于25% 优化器可能会走全盘扫描   字符串查询的时候一定要加"" 不然可能会全索引扫描(隐式转换)   统计信息 失效 或者 过旧 也可能走全盘扫描  因为优化器会参考统计信息来制定执行计划

        index: 全索引扫描  就是扫描整颗索引树

           range: 索引范围  查询索引树的一部分范围   范围索引中     =  =  like  的效率会比  or   in  的效率高, 使用like %再前面的不走索引

            ref:   辅助索引的等值查询            

                    当查询的数据量小,优化器也有可能会走索引的全盘扫描  这里我就不贴图了;

            eq_ref : 多表连接查询中,被连接的表的连接条件列是主键或者唯一键

            const(system): 主键 或者 唯一键 的等值查询

               null: 没有数据

            他们的性能是依次递增的 全盘扫描性能最差,  const性能最高

possible_keys:  查询过程中可能用到的索引

key: 真正使用到的索引

key_len:  走索引的长度

        这个是怎么计算的呢?  

                key_len 的计算方法 :

                    int 类型最长存储4个字节长度的数字  有not null  是4字节  没有的话会花1字节存储是不是null

                    tinyint 最大存储一个字节    也会花1字节来判断是不是null

                    字符串类型 : 字符集 utf8mb4  1-4字节

                    varchar超过255会预留2个字节存储长度 没超预留1个字节

                    key_len 永远是你设置的长度的最大的  

        联合索引可以通过key_len 来判断走了几个索引

        使用desc format=json select * from table 可以查看详细情况

filtered:  索引扫描过滤掉数据的占比

Extra: 额外的信息 

         Using filesort :MySQL 对数据在sql层进行了排序,而不是按照表内的索引进行排序读 取。 效率比较低

         Using temporary :使用临时表保存中间结果,也就是说 MySQL 在对查询结果排序时使用了临时表,常见于order by 或 group by。

         Using index :表示 SQL 操作中使用了覆盖索引(Covering Index),避免了访问表的数据行,效率高。

         Using index condition :表示 SQL 操作命中了索引,但不是所有的列数据都在索引树上,还需要访问实际的行记录。

         Using where :表示 SQL 操作使用了 where 过滤条件。

         Select tables optimized away :基于索引优化 MIN/MAX 操作或者 MyISAM 存储引擎优化 COUNT(*) 操作,不必等到执行阶段再进行计算,查询执行计划生成的阶段即可完成优化。

          Using join buffer (Block Nested Loop) :表示 SQL 操作使用了关联查询或者子查询,且需要进行嵌套循环计算

 

如何查看mysql执行过的语句

开启记录MySQL执行过SQL语句的方法很简单:编辑/etc/my.cnf文件,在[mysqld]节下面添加:log=/var/lib/mysql/sql_row.log行(日志的路径自己根据需要定义)。

[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

user=mysql

# Default to using old password format for compatibility with mysql 3.x

# clients (those using the mysqlclient10 compatibility package).

old_passwords=1

log=/var/lib/mysql/sql_row.log

# Disabling symbolic-links is recommended to prevent assorted security risks;

# to do so, uncomment this line:

# symbolic-links=0

[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

修改完毕后,记得重启 MySQL:

service mysql restart

# 或者

/etc/init.d/mysqld stop

/etc/init.d/mysqld start

现在你去 /var/lib/mysql/ 路径下的 sql_row.log 文件应该是能够看到 MySQL 什么时候执行了哪些程序了。

如何记录MySQL执行过的SQL语句

第一种: 查 Slow query 的 SQL 语法:

log_slow_queries = /var/log/mysql/mysql-slow.log

long_query_time = 2 (超过 2秒的 SQL 语法记录起来, 设短一点来记录除错也是一种方法 XD)

第二种: 设 MySQL Replication 用 binlog:

log_bin = /var/log/mysql/mysql-bin.log (此档要用 mysqlbinlog 解来看)

mysql 会将所有 INSERT/UPDATE/DELETE 语法记於此(但是语法可能跟你想的不同), 这是要写给 SLAVE 用的 log 档

第三种: 推荐此方法, 将 MySQL 执行的每行指令全都记录起来:

log = /tmp/mysql.log

restart mysql 後, tail -f /tmp/mysql.log 就可以看到罗!

补充: 最早前的方法是 mysqldump, 然後执行完後再 mysqldump, 再 diff, 但是在 DB 1G 後就放弃此方法了 XD

如何查看mysql中执行sql语句

如果我的理解没错的话,你的意思是正在执行的sql语句吧,

命令:

mysqlshow full processlist;

示例:

mysqlselect sleep(20);

另一个session执行:

mysqlshow full processlist;

--- 可以看到正在执行的语句 ---

| 183 | root | localhost | NULL | Query | 6 | User sleep | select sleep(20) |

mysql中怎样显示服务器正在执行的sql任务

查询Oracle正在执行的sql语句及执行该语句的用户

SELECT b.sid oracleID,       b.username 登录Oracle用户名,       b.serial#,       spid 操作系统ID,       paddr,       sql_text 正在执行的SQL,       b.machine 计算机名FROM v$process a, v$session b, v$sqlarea cWHERE a.addr = b.paddr   AND b.sql_hash_value = c.hash_value

查看正在执行sql的发起者的发放程序

SELECT OSUSER 电脑登录身份,       PROGRAM 发起请求的程序,       USERNAME 登录系统的用户名,       SCHEMANAME,       B.Cpu_Time 花费cpu的时间,       STATUS,       B.SQL_TEXT 执行的sqlFROM V$SESSION ALEFT JOIN V$SQL B ON A.SQL_ADDRESS = B.ADDRESS                   AND A.SQL_HASH_VALUE = B.HASH_VALUEORDER BY b.cpu_time DESC

查出oracle当前的被锁对象

SELECT l.session_id sid,       s.serial#,       l.locked_mode 锁模式,       l.oracle_username 登录用户,       l.os_user_name 登录机器用户名,       s.machine 机器名,       s.terminal 终端用户名,       o.object_name 被锁对象名,       s.logon_time 登录数据库时间FROM v$locked_object l, all_objects o, v$session sWHERE l.object_id = o.object_id   AND l.session_id = s.sidORDER BY sid, s.serial#;

kill掉当前的锁对象可以为

alter system kill session 'sid, s.serial#‘;

如何看mysql执行的sql语句

1先通过status命令查看Mysql运行状态

mysql status;

--------------

mysql Ver 14.14 Distrib 5.1.73, for redhat-linux-gnu (x86_64) using readline 5.1

Connection id: 113752

Current database: information_schema

Current user: push_user@localhost

SSL: Not in use

Current pager: stdout

Using outfile: ''

Using delimiter: ;

Server version: 5.1.73 Source distribution

Protocol version: 10

Connection: Localhost via UNIX socket

Server characterset: latin1

Db characterset: utf8

Client characterset: latin1

Conn. characterset: latin1

UNIX socket: /tmp/mysql.sock

Uptime: 22 days 8 hours 31 min 23 sec

Threads: 38 Questions: 1037751897 Slow queries: 2356 Opens: 79836

Flush tables: 1 Open tables: 64 Queries per second avg: 537.282

--------------

在上面显示列表的最后一条,我们来查看Slow queries这一项的值,如果多次查看的值大于0的话,说明有些查询sql命令执行时间过长。

2)这时再通过show processlist命令来查看当前正在运行的SQL,从中找出运行慢的SQL语句,找到执行慢的语句后,再用explain命令查看这些语句的执行计划。

mysql show processlist;

+--------+-----------+---------------------+--------------------+---------+-------+-------+------------------+

| Id | User | Host | db | Command | Time | State | Info |

+--------+-----------+---------------------+--------------------+---------+-------+-------+------------------+

| 50270 | ambari | DataBase-01:41512 | ambari | Sleep | 23 | | NULL |

| 50271 | ambari | DataBase-01:41511 | ambari | Sleep | 6 | | NULL |

| 50272 | ambari | DataBase-01:41514 | ambari | Sleep | 23 | | NULL |

| 62452 | oozie | DataBase-02:42987 | oozie | Sleep | 25 | | NULL |

| 63660 | ambari | DataBase-01:56052 | ambari | Sleep | 0 | | NULL |

| 110404 | push_user | localhost:33817 | quartz | Sleep | 12 | | NULL |

| 112835 | push_user | localhost:46571 | hibernate | Sleep | 1 | | NULL |

| 113163 | push_user | localhost:56585 | hibernate | Sleep | 1 | | NULL |

| 113289 | push_user | 14.118.132.20:47333 | DW | Sleep | 628 | | NULL |

| 113320 | push_user | localhost:47428 | hibernate | Sleep | 3 | | NULL |

| 113321 | push_user | localhost:47429 | hibernate | Sleep | 3 | | NULL |

| 113322 | push_user | localhost:47430 | hibernate | Sleep | 3 | | NULL |

| 113357 | push_user | localhost:52337 | hibernate | Sleep | 3 | | NULL |

| 113364 | push_user | localhost:57206 | hibernate | Sleep | 3 | | NULL |

| 113366 | push_user | localhost:34813 | hibernate | Sleep | 1 | | NULL |

| 113398 | push_user | localhost:37382 | hibernate | Sleep | 1 | | NULL |

| 113498 | push_user | localhost:47626 | quartz | Sleep | 12717 | | NULL |

| 113709 | push_user | localhost:59382 | hibernate | Sleep | 1 | | NULL |

| 113710 | push_user | localhost:33627 | hibernate | Sleep | 1 | | NULL |

| 113715 | hive | DataBase-02:54968 | hive | Sleep | 2390 | | NULL |

| 113716 | hive | DataBase-02:54969 | hive | Sleep | 2390 | | NULL |

| 113717 | hive | DataBase-02:54974 | hive | Sleep | 2336 | | NULL |

| 113718 | hive | DataBase-02:54975 | hive | Sleep | 2336 | | NULL |

| 113719 | push_user | localhost:48243 | hibernate | Sleep | 1 | | NULL |

| 113720 | push_user | localhost:48245 | hibernate | Sleep | 1 | | NULL |

| 113721 | push_user | localhost:48244 | hibernate | Sleep | 1 | | NULL |

| 113722 | push_user | localhost:48247 | hibernate | Sleep | 1 | | NULL |

| 113723 | push_user | localhost:48249 | hibernate | Sleep | 1 | | NULL |

| 113724 | push_user | localhost:48248 | hibernate | Sleep | 1 | | NULL |

| 113745 | push_user | localhost:50684 | hibernate | Sleep | 1 | | NULL |

| 113746 | push_user | localhost:50685 | hibernate | Sleep | 1 | | NULL |

| 113747 | push_user | localhost:50695 | hibernate | Sleep | 1 | | NULL |

| 113748 | push_user | localhost:50696 | hibernate | Sleep | 1 | | NULL |

| 113749 | push_user | localhost:50697 | hibernate | Sleep | 1 | | NULL |

| 113750 | push_user | localhost:50699 | hibernate | Sleep | 1 | | NULL |

| 113751 | push_user | localhost:50700 | hibernate | Sleep | 1 | | NULL |

| 113752 | push_user | localhost | information_schema | Query | 0 | NULL | show processlist |

| 113753 | push_user | 14.118.132.20:28688 | DW | Sleep | 396 | | NULL |

+--------+-----------+---------------------+--------------------+---------+-------+-------+------------------+

38 rows in set (0.00 sec)

或者通过如下命令查询:

mysql use information_schema;

mysql select * from PROCESSLIST where info is not null;

+--------+-----------+-----------+--------------------+---------+------+-----------+--------------------------------------------------+

| ID | USER | HOST | DB | COMMAND |

TIME | STATE | INFO |

+--------+-----------+-----------+--------------------+---------+------+-----------+--------------------------------------------------+

| 113752 | push_user | localhost | information_schema | Query |

0 | executing | select * from PROCESSLIST where info is not null |

+--------+-----------+-----------+--------------------+---------+------+-----------+--------------------------------------------------+

1 row in set (0.00 sec)


推荐阅读
  • 根据最新发布的《互联网人才趋势报告》,尽管大量IT从业者已转向Python开发,但随着人工智能和大数据领域的迅猛发展,仍存在巨大的人才缺口。本文将详细介绍如何使用Python编写一个简单的爬虫程序,并提供完整的代码示例。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • MySQL索引详解与优化
    本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ... [详细]
  • 探讨如何从数据库中按分组获取最大N条记录的方法,并分享新年祝福。本文提供多种解决方案,适用于不同数据库系统,如MySQL、Oracle等。 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文详细介绍了如何通过多种编程语言(如PHP、JSP)实现网站与MySQL数据库的连接,包括创建数据库、表的基本操作,以及数据的读取和写入方法。 ... [详细]
  • 利用存储过程构建年度日历表的详细指南
    本文将介绍如何使用SQL存储过程创建一个完整的年度日历表。通过实例演示,帮助读者掌握存储过程的应用技巧,并提供详细的代码解析和执行步骤。 ... [详细]
  • MySQL缓存机制深度解析
    本文详细探讨了MySQL的缓存机制,包括主从复制、读写分离以及缓存同步策略等内容。通过理解这些概念和技术,读者可以更好地优化数据库性能。 ... [详细]
  • 在当前众多持久层框架中,MyBatis(前身为iBatis)凭借其轻量级、易用性和对SQL的直接支持,成为许多开发者的首选。本文将详细探讨MyBatis的核心概念、设计理念及其优势。 ... [详细]
  • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
  • 在使用SQL Server进行动态SQL查询时,如果遇到LIKE语句无法正确返回预期结果的情况,通常是因为参数传递方式不当。本文将详细探讨这一问题,并提供解决方案及相关的技术背景。 ... [详细]
  • SQLite 动态创建多个表的需求在网络上有不少讨论,但很少有详细的解决方案。本文将介绍如何在 Qt 环境中使用 QString 类轻松实现 SQLite 表的动态创建,并提供详细的步骤和示例代码。 ... [详细]
  • 本文详细介绍了C语言中链表的两种动态创建方法——头插法和尾插法,包括具体的实现代码和运行示例。通过这些内容,读者可以更好地理解和掌握链表的基本操作。 ... [详细]
  • 解决Element UI中Select组件创建条目为空时报错的问题
    本文介绍如何在Element UI的Select组件中使用allow-create属性创建新条目,并处理创建条目为空时出现的错误。我们将详细说明filterable属性的必要性,以及default-first-option属性的作用。 ... [详细]
author-avatar
花痴-耐你们_304
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有