IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 如何快速定位对数据库性能消耗高的慢语句 -> 正文阅读

[大数据]如何快速定位对数据库性能消耗高的慢语句

如何快速定位对数据库性能消耗高的慢语句

前言:

MySQL中提供了一个慢查询的日志记录功能,可以把查询SQL语句时间大于多少秒的语句写入慢查询日志,日常维护中可以通过慢查询日志的记录信息快速准确地判断问题所在。如果出现数据库cpu消耗高,一般都是慢语句导致,所以第一时间我们一定要拿到数据库实例主机上面的slow_query的日志文件进行定位分析。

开启慢语句配置

/etc/my.cnf 配置 slow query

#开启慢查询
slow_query_log=on   
#超过2秒的查询就视为慢查询
long_query_time=2
#记录日志
slow_query_log_file=/data/mysql/slow.log

分析方法

因为slow_query的日志文件一般比较大,记录数几十万甚至上百万,涉及sql记录至少上万,甚至更多,所以我们需要使用一些技巧进行快速定位。

日志文件涉及敏感信息,不方便贴上来,这里只列出一个例子:

# Time: 2021-11-23T17:31:11.931559+08:00
# User@Host: dbproxy_0ad87[dbproxy_0ad87] @  [***.***.***.***]  Id: 11834321
# Query_time: 24.580089  Lock_time: 0.000143 Rows_sent: 287918  Rows_examined: 863769
SET timestamp=1637659871;
select R.BULLETIN_RCV_OBJ_REL_ID AS R_BULLETIN_RCV_OBJ_REL_ID,
        R.BULLETIN_ID AS R_BULLETIN_ID,
        R.RCV_TYPE AS R_RCV_TYPE,
        R.RCV_ID AS R_RCV_ID,
        R.STATUS_CD AS R_STATUS_CD,
        R.CREATE_STAFF AS R_CREATE_STAFF,
        R.UPDATE_STAFF AS R_UPDATE_STAFF,
        R.CREATE_DATE AS R_CREATE_DATE,
        R.STATUS_DATE AS R_STATUS_DATE,
        R.UPDATE_DATE AS R_UPDATE_DATE,
        R.REMARK AS R_REMARK,
        R.IS_AUTO AS R_IS_AUTO,
        R.BULLETIN_ID AS B_BULLETIN_ID,
        B.BULLETIN_TITLE AS B_BULLETIN_TITLE,
        B.BULLETIN_CONTENT AS B_BULLETIN_CONTENT,
        B.BULLETIN_TYPE AS B_BULLETIN_TYPE,
        BT.BULLETIN_TYPE_NAME AS B_BULLETIN_TYPE_NAME,
        B.BULLETIN_LEVEL AS B_BULLETIN_LEVEL,
        B.IS_TOP AS B_IS_TOP,
        B.LAUNCH_STAFF AS B_LAUNCH_STAFF,
        B.LAUNCH_ORG AS B_LAUNCH_ORG,
        B.EFF_DATE AS B_EFF_DATE,
        B.EXP_DATE AS B_EXP_DATE,
        B.STATUS_CD AS B_STATUS_CD,
        B.CREATE_STAFF AS B_CREATE_STAFF,
        B.UPDATE_STAFF AS B_UPDATE_STAFF,
        B.UPDATE_DATE AS B_UPDATE_DATE,
        B.STATUS_DATE AS B_STATUS_DATE,
        B.CREATE_DATE AS B_CREATE_DATE,
        B.REMARK AS B_REMARK,
        S.STAFF_NAME AS B_STAFF_NAME,
        O.ORG_NAME AS B_ORG_NAME
        
        from bulletin b left join bulletin_type bt on
        bt.bulletin_type = b.bulletin_type
        left join staff s on b.LAUNCH_STAFF = s.staff_id
        left join organization o on b.LAUNCH_ORG = o.org_id
        join
        bulletin_rcv_obj_rel r on b.bulletin_id = r.bulletin_id
        WHERE 1=1
         
         
        and r.rcv_type = '1200'
         
        and r.is_auto = '1'
        and b.STATUS_CD = '1000'
        order by r.status_cd, b.eff_Date desc;

slow_query文件信息解读

#Time: 是sql执行时间
#User@Host:是sql执行所连接过来的客户端IP,telDB展示的是dbproxy的ip
#Query_time: 查询耗时 Lock_time: 锁时间 Rows_sent: 返回客户端行数 Rows_examined: 扫描行数

根据日志里面就可以发现很重要的一个指标Query_time,这个越大,消耗肯定越大。
那能否将所有语句的Query_time拎出来,并且做降序排序,找到数值大的哪些,肯定就能定位出具体sql了。
如果通过notepad++等文本编辑器打开查找慢语句效率比较低,可以通过下面这个脚本来快速找到慢语句的位置。

cat 日志文件 | grep Query_time | awk -F "Query_time: " '{print $2}' | awk -F "  Lock_time" '{print $1+0}' | sort -n

● 将slow_query文件随便上传到一个linux环境,比如上传到某个应用容器中。
● 在上传后的文件目录下执行这个命令
● 立即得到一份按照Query_time进行排序的结果

在这里插入图片描述
● 找到最大的值再查询文件中的语句即可
查询时注意,因为sort命令做了四舍五入,所以只需要拿小数点前的整数,前面拼上来进行查询
例如:Query_time: 24,注意Query_time: 后面有空格

在这里插入图片描述
上面截图的这条语句便是问题语句。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-03-03 16:21:05  更:2022-03-03 16:23:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 10:51:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码