如何发现快速发现分析生产问题SQL

Performance Schema介绍
Performance Schema提供了有关MySQL服务器内部运行的操作上的底层指标。为了解释清楚Performance Schema的工作机制,先介绍两个概念。
第一个概念是程序插桩(instrument)。程序插桩在MySQL代码中插入探测代码,以获取我们想了解的信息。例如,如果想收集关于元数据锁的使用情况,需要启用wait/lock/meta-data/sql/mdl这个插桩。
第二个概念是消费者表(consumer),指的是存储关于程序插桩代码信息的表。如果我们为查询模块添加插桩,相应的消费者表将记录诸如执行总数、未使用索引的次数、花费的时间等信息。大多数人都将消费者表与Performance Schema紧密联系在一起。
在这里插入图片描述
当应用程序用户连接到MySQL并执行被测量的插桩指令时,performance_schema将每个检查的调用封装到两个宏中,然后将结果记录在相应的消费者表中。这里的要点是,启用插桩会调用额外的代码,这意味着插桩会消耗CPU资源。
插桩元件
在performance_schema中,setup_instruments表包含所有支持的插桩的列表。所有插桩的名称都由用斜杠分隔的部件组成。下面的例子展示了插桩的命名规则:
● statement/sql/select
● wait/synch/mutex/innodb/autoinc_mutex
插桩名称的最左边部分表示插桩的类型。因此,statement表示插桩类型是statement,wait表示插桩类型是wait,以此类推。
名称字段中的其余部分从左至右依次表示从通用到特定的子系统。select是sql子系统的一部分,属于statement类型。或者autoinc_mutex属于innodb,它是更通用的插桩类mutex的一部分,而mutex又是更通用的插桩类型wait的sync插桩的一部分。
大多数插桩名称是自描述型的。与示例中一样,statement/sql/select是一个SELECT查询,wait/synch/mutex/innodb/autoinc_mutex是InnoDB在自增列上设置的一个互斥体。setup_instruments表中还有一个DOCUMENTATION列,其中包含更多详细信息:

SELECT * FROM performance_schema.setup_instruments WHERE DOCUMENTATION IS NOT NULL

在这里插入图片描述
performance_schema的消费者表
在这里插入图片描述

存放事件的表名包含如下结尾:
_current 当前服务器上进行中的事件。
_history 每个线程最近完成的10个事件。
_history_long 从全局来看,每个线程最近完成的10000个事件。注:_history和
history_long表的大小是可配置的。
● events_waits
:底层服务器等待,例如获取互斥对象。
● events_statements_* SQL查询语句。
● events_stages_* 配置文件信息,例如创建临时表或发送数据。
● events_transactions_* 事务相关。
● memory_summary_by_thread_by_event_name表保存了用户连接或任何后台线程的每个MySQL线程的聚合内存使用情况。
SQL的分析过程
重点关注的插桩元件
在这里插入图片描述
原始SQL

select film_id,film.description from sakila.film inner join (select film_id from sakila.film order by title limit 50,5) as lim using(film_id)

执行结果

51	A Insightful Panorama of a Forensic Psychologist And a Mad Cow who must Build a Mad Scientist in The First Manned Space Station
52	A Thrilling Documentary of a Composer And a Monkey who must Find a Feminist in California
53	A Epic Drama of a Madman And a Cat who must Face a A Shark in An Abandoned Amusement Park
54	A Awe-Inspiring Drama of a Car And a Pastry Chef who must Chase a Crocodile in The First Manned Space Station
55	A Awe-Inspiring Story of a Feminist And a Cat who must Conquer a Dog in A Monastery

查看运行过程

select * from `performance_schema`.events_statements_history where sql_text like 'select film_id%'\G

运行结果

mysql> select * from `performance_schema`.events_statements_history where sql_text like 'select film_id%'\G
*************************** 1. row ***************************THREAD_ID: 124EVENT_ID: 43END_EVENT_ID: 44EVENT_NAME: statement/sql/selectSOURCE: init_net_server_extension.cc:95TIMER_START: 2680897723222415000TIMER_END: 2680897723733954000TIMER_WAIT: 511539000LOCK_TIME: 224000000SQL_TEXT: select film_id,film.description from sakila.film inner join (select film_id from sakila.film order by title limit 50,5) as lim using(film_id)DIGEST: f65da42ebf50607dfda40f3b31304775b671fb71122f0860f312ff1d330de99fDIGEST_TEXT: SELECT `film_id` , `film` . `description` FROM `sakila` . `film` INNER JOIN ( SELECT `film_id` FROM `sakila` . `film` ORDER BY `title` LIMIT ?, ... ) AS `lim` USING ( `film_id` )CURRENT_SCHEMA: sakilaOBJECT_TYPE: NULLOBJECT_SCHEMA: NULLOBJECT_NAME: NULLOBJECT_INSTANCE_BEGIN: NULLMYSQL_ERRNO: 0RETURNED_SQLSTATE: NULLMESSAGE_TEXT: NULLERRORS: 0WARNINGS: 0ROWS_AFFECTED: 0ROWS_SENT: 5ROWS_EXAMINED: 10
CREATED_TMP_DISK_TABLES: 0CREATED_TMP_TABLES: 1SELECT_FULL_JOIN: 0SELECT_FULL_RANGE_JOIN: 0SELECT_RANGE: 0SELECT_RANGE_CHECK: 0SELECT_SCAN: 2SORT_MERGE_PASSES: 0SORT_RANGE: 0SORT_ROWS: 0SORT_SCAN: 0NO_INDEX_USED: 1NO_GOOD_INDEX_USED: 0NESTING_EVENT_ID: NULLNESTING_EVENT_TYPE: NULLNESTING_EVENT_LEVEL: 0STATEMENT_ID: 1311

在这里插入图片描述
在这里插入图片描述
要找出哪些语句需要优化,可以选择上述列中的任何一列,并将其与0进行比较。例如,要找到所有没有使用合适索引的查询,可运行以下命令:

SELECT * 
FROM`performance_schema`.events_statements_history_long
WHERENO_INDEX_USED > 0 OR NO_GOOD_INDEX_USED > 0

要查询所有创建了临时表的查询,可运行:

SELECT * 
FROM`performance_schema`.events_statements_history_long
WHERECREATED_TMP_DISK_TABLES > 0 OR CREATED_TMP_TABLES > 0 

可以使用这些列值单独显示潜在的问题。例如,要查找所有返回错误的查询,可以使用条件WHERE errors > 0;要找到所有执行时间超过5秒的查询,可以使用条件WHERE TIMER_WAIT > 5000000000,等等。
挖掘可能存在问题的SQL

SELECT* 
FROM`performance_schema`.events_statements_history_long
WHEREROWS_EXAMINED > ROWS_SENT OR ROWS_EXAMINED > ROWS_AFFECTED OR ERRORS > 0 OR CREATED_TMP_DISK_TABLES > 0 OR CREATED_TMP_TABLES > 0 OR SELECT_FULL_JOIN > 0 OR SELECT_FULL_RANGE_JOIN > 0 OR SELECT_RANGE > 0 OR SELECT_RANGE_CHECK > 0 OR SELECT_SCAN > 0 OR SORT_MERGE_PASSES > 0 OR SORT_RANGE > 0 OR SORT_ROWS > 0 OR SORT_SCAN > 0 OR NO_INDEX_USED > 0 OR NO_GOOD_INDEX_USED > 0

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1489341.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Hadoop单机版环境搭建

一 . 案例信息 Hadoop 的安装部署的模式一共有三种: 本地模式,默认的模式,无需运行任何守护进程( daemon ),所有程序都在单个 JVM 上执行。由 于在本机模式下测试和调试 MapReduce 程序较为方便&#x…

鸿蒙开发——axios封装请求、拦截器

描述:接口用的是PHP,框架TP5 源码地址 链接:https://pan.quark.cn/s/a610610ca406 提取码:rbYX 请求登录 HttpUtil HttpApi 使用方法

PHP8.3.9安装记录,Phpmyadmin访问提示缺少mysqli

ubuntu 22.0.4 腾讯云主机 下载好依赖 sudo apt update sudo apt install -y build-essential libxml2-dev libssl-dev libcurl4-openssl-dev pkg-config libbz2-dev libreadline-dev libicu-dev libsqlite3-dev libwebp-dev 下载php8.3.9安装包 nullhttps://www.php.net/d…

基于Qt的视频剪辑

在Qt中进行视频剪辑可以通过多种方式实现,但通常需要使用一些额外的库来处理视频数据。以下是一些常见的方法和步骤: 使用FFmpeg FFmpeg是一个非常强大的多媒体框架,可以用来处理视频和音频数据。你可以使用FFmpeg的命令行工具或者其库来实现…

Github 2024-07-26 Java开源项目日报 Top10

根据Github Trendings的统计,今日(2024-07-26统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Java项目9HTML项目1TypeScript项目1非开发语言项目1JavaGuide - Java 程序员学习和面试指南 创建周期:2118 天开发语言:Java协议类型:Apache…

springboot使用Gateway做网关并且配置全局拦截器

一、为什么要用网关 统一入口: 作用:作为所有客户端请求的统一入口。说明:所有客户端请求都通过网关进行路由,网关负责将请求转发到后端的微服务 路由转发: 作用:根据请求的URL、方法等信息将请求路由到…

C#初级——枚举

枚举 枚举是一组命名整型常量。 enum 枚举名字 { 常量1, 常量2, …… 常量n }; 枚举的常量是由 , 分隔的列表。并且,在这个整型常量列表中,通常默认第一位枚举符号的值为0,此后的枚举符号的值都比前一位大1。 在将枚举赋值给 int 类型的…

java计算机毕设课设—记账管理系统(附源码和安装视频)

这是什么系统? java计算机毕设课设—记账管理系统(附源码和安装视频) 记账管理系统主要用于财务人员可以从账务中判断公司的发展方向。对个人和家庭而言,通过记账可以制定日后的 消费计划,这样才能为理财划出清晰合理…

Scrapy 爬取旅游景点相关数据(三)

这一节我们将之前爬取到的景点数据进行解析,并且保存为excel,便于后续使用,本节包含 (1) 景点数据解析 (2)数据保存到excel 1 编写爬虫 这次继续改进第二节的爬虫,新建一个爬虫文…

【Java基础】动态代理与代理模式哪些事儿

文章目录 代理静态代理动态代理基于接口的jdk动态的demo源码解析Proxy.newProxyInstancejdk 动态的生成的字节码 基于父类的cglib动态代理源码解析 代理设计模式应用场景 Spring AOP小结 代理 代理其实就是扩展目标对象的功能,比如普通人不具备超人能力&#xff0c…

青少年绘画大赛兰州站:童梦起航 致敬科学 续写降压0号之父强国梦

2024年7月21日,“鹤舞童梦致敬科学精神”青少年绘画大赛在兰州隆重启幕。 活动邀请了多位重量级嘉宾担任评委,包括中国美术家协会会员、甘肃省油画协会常务理事马爱兵,兰州交通大学天佑美术馆馆长王欣,以及国家一级美术师蔡晓斌。…

什么是护网?2024护网行动怎么参加?一文详解_护网具体是做啥的

前言 最近的全国护网可谓是正在火热的进行中,有很多网安小白以及准大一网安的同学在后台问我,到底什么是护网啊?怎么参加呢?有没有相关的学习资料呢?在下不才,连夜整理出来了这篇护网详解文章,希…

Linux笔记 --- 基础指令

1.了解命令行 快捷键打开终端:altctrlT 2.入门命令 1)cd 切换工作路径,使用时直接在后面写下当前目录下的下级目录即可跳转,也有特殊用法,在此列出 2)ls ls 列举当前目录下的内容常见用法有两种&#xff…

若依ruoyi+AI项目二次开发

//------------------------- //定义口味名称和口味列表静态数据 const dishFlavorListSelectref([ {name:"辣度",value:["不辣","微辣","中辣","重辣"]}, {name:"忌口",value:["不要葱","不要…

【PostgreSQL 16】专栏日常

本专栏从 3 个月前开始着手准备&#xff0c;利用周末及节假日的时间来整理。 ldczzDESKTOP-HVJOUVN MINGW64 ~/mypostgres (dev) $ git lg |tee * 7a7f468 - (HEAD -> dev, origin/main, origin/dev, main) 完成服务端编程的初步整理 (6 minutes ago) <Laven Liu> * …

freertos的学习cubemx版

HAL 库的freertos 1 实时 2 任务->线程 3 移植 CMSIS_V2 V1版本 NVIC配置全部是抢占优先级 第四组 抢占级别有 0-15 编码规则&#xff0c; 变量名 &#xff1a;类型前缀&#xff0c; c - char S - int16_t L - int32_t U - unsigned Uc - uint8_t Us - uint…

企业公户验证API如何使用JAVA、Python、PHP语言进行应用

在纷繁复杂的金融与商业领域&#xff0c;确保每笔交易的安全与合规是至关重要的。而企业公户验证API&#xff0c;正是这样一位默默守护的数字卫士&#xff0c;它通过智能化的手段&#xff0c;简化了企业对公账户验证流程&#xff0c;让繁琐的审核变得快捷且可靠。 什么是企业公…

圣杯依然闪耀 --基于短时RSI的均值回归策略跑出30%年化

圣杯依然闪耀 RSI 永远是我最爱的指标 – 因为潮汐和回归是这个蓝色星球的生命年轮&#xff0c;这样的轮回也存在于交易世界。而 RSI 就是刻画市场中的潮汐和回归的最好指标之一。 年初我介绍过 Connor’s RSI。这次我们将探索 Connors 提出的一个基于短时 RSI 的均值回归策略…

F1冠军版洗地机开售,云鲸能否成为“冠军”?

云鲸&#xff0c;本是一种由风云气象约束为鲸形状而成的大气生物&#xff0c;其遨游苍穹&#xff0c;不染尘埃。而当云鲸“降入尘世”&#xff0c;也代表着一种极简且洁净的品质生活方式。 作为一家专业的清洁机器人企业&#xff0c;以此为名的云鲸将科技清洁与美学设计融为一…