Lynx TiDB 慢日志收集工具

作者: 小龙虾爱大龙虾 原文来源: https://tidb.net/blog/7247e68f

简介

lynx 工具可以定时将 TiDB 集群的慢查询收集并持久化到后端数据库中,然后通过 grafana 查询展示出来,这可以帮助我们更好的分析慢查询日志。

背景

尽管 TiDB 提供了慢查询日志和 SQL 语句分析功能,并在 Dashboard 上提供了直观的查询界面,但在实际使用中仍存在一些局限性:

  1. 早期版本 SQL 语句分析功能数据存储在内存中,当 TiDB Server 发生 Out-of-Memory (OOM) 时,数据会丢失,导致无法查询到相关数据。
  2. SQL 语句分析功能存储的 SQL 类别有限,当 SQL 语句数量较多时,旧的记录可能会驱逐,从而无法查询到想要的数据。
  3. 慢查询日志以单条语句的形式存在,当 TiDB 集群繁忙时,短时间会产生大量慢查询记录,界面返回的行数过多,不利于分析。
  4. 慢查询日志底层存储在日志文件中,跨长时间段查询慢查询日志时,不仅速度较慢,还可能导致 TiDB Server OOM。
  5. 慢查询日志界面无法自定义查询,无法满足复杂的分析需求。
  6. 慢查询日志导出的 Excel 格式混乱,无法直接发送给应用研发团队。
  7. 等等 。。。

特点

  1. 支持多 TiDB 版本,适用于 TiDB v6.0 及以上版本。
  2. 根据时间窗口采集慢查询数据,有效降低对目标 TiDB 集群的压力。
  3. 同一集群中,具有相同 SQL 指纹和计划指纹的 SQL 语句和执行计划只收集一次,节约了存储空间,同时也降低了对采集目标集群的压力。
  4. 可以灵活自定义 Grafana 面板,例如查找执行计划中包含隐式转换的 SQL 语句(计划中包含 cast 关键字)。
  5. 通过 Grafana 可以方便地将慢查询数据导出为 Excel 格式,还可以开发脚本定期自动将数据通过邮件发送给相关人员。
  6. lynx 收集的慢日志适合分析因执行计划不佳导致的查询慢的问题。然而,对于那些时快时慢的查询情况(可能是由于传入参数不同或集群运行状态变化引起的),TiDB Dashboard 的慢查询日志功能可能更为合适,因为同一执行计划 lynx 只采集一次执行计划。
  7. 与慢查询日志一样,Lynx 无法获取低于慢查询阈值的语句信息。

下载地址

https://github.com/harry1129/tidb-slowquery-lynx/releases/tag/v1.0.0

部署lynx

准备后端存储库

后端存储库用于存储收集到的慢查询日志,可以是 Mysql 数据库或 TiDB 数据库,数据库需手工创建,用户权限需要对数据库有所有权限,程序会自动创建表结构。示例:


create database test;
create user u1 dientified by "u1";
grant all privileges on test.* to u1;

准备配置文件config.toml

[global]
time_window_minutes = 60  #采集窗口,单位(分钟),建议设置 30 ~ 60,与定时任务配置同样窗口,窗口会自动#后端存储库
[database]
host = "localhost"
port = 4000
user = "root"
password = ""
db_name = "test"
max_idle_conns = 2
max_open_conns = 10
conn_max_lifetime = 600    #单位(秒)[target_dbs]
cluster1.host = "196.128.1.1"
cluster1.port = 4000
cluster1.user = "root1"
cluster1.password = ""cluster2.host = "196.128.1.2"
cluster2.port = 4000
cluster2.user = "root"
cluster2.password = ""cluster3.host = "196.128.1.4"
cluster3.port = 4000
cluster3.user = "root"
cluster3.password = ""

目标数据库的采集用户最少需要以下权限

-- 查询 information_schema.schema 时需要看到所有的数据库名
GRANT SHOW DATABASES ON . TO 'xxxx'@'%';
-- 查询 information_schema.cluster_slow_query 时需要看到所有用户的慢查询
GRANT DASHBOARD_CLIENT ON . TO 'xxxx'@'%';

添加定时执行任务

这里定时执行时间要与 time_window_minutes 一样

crontab -e
*/30 * * * * /your/path/lynx -c /your/path/config.toml -l /your/path/lynx.log

添加 grafana 面板

  1. 在 Grafana 上配置 mysql 数据源

Configuration =》 data sources =》Add data source =》Mysql

  1. 将 https://github.com/harry1129/tidb-slowquery-lynx/tree/main/grafana 中带的面板导入到 Grafana

Create =》Import

Grafana 面板展示

SQL 聚合面板展示

单条 SQL 面板展示

总结

Lynx 工具通过定时收集和持久化 TiDB 集群的慢查询日志,配合 Grafana 提供了直观的查询和展示功能,提供了更高效、更灵活的 TiDB 慢日志分析手段。解决了 TiDB 慢查询日志分析中的一些常见问题,帮助数据库管理员和开发人员更好地优化数据库性能。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Gin 源码概览 - 路由

本文基于gin 1.1 源码解读 https://github.com/gin-gonic/gin/archive/refs/tags/v1.1.zip 1. 注册路由 我们先来看一段gin代码,来看看最终得到的一颗路由树长啥样 func TestGinDocExp(t *testing.T) {engine : gin.Default()engine.GET("/api/user", f…

【逆境中绽放:万字回顾2024我在挑战中突破自我】

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​💫个人格言:“没有罗马,那就自己创造罗马~” 文章目录 一、引言二、个人成长与盘点情感与心理成长学习与技能提升其它荣誉 三、年度创作历程回顾创作内容概…

【Linux 重装】Ubuntu 启动盘 U盘无法被识别,如何处理?

背景 U盘烧录了 Ubuntu 系统作为启动盘,再次插入电脑后无法被识别 解决方案(Mac 适用) (1)查找 USB,(2)格式化(1)在 terminal 中通过 diskutil list 查看是…

中职网络建设与运维ansible服务

ansible服务 填写hosts指定主机范围和控制节点后创建一个脚本,可以利用简化脚本 1. 在linux1上安装系统自带的ansible-core,作为ansible控制节点,linux2-linux7作为ansible的受控节点 Linux1 Linux1-7 Yum install ansible-core -y Vi /etc/ansible/hosts 添加…

数据库服务体系结构

1. 数据库服务应用配置 服务进行配置有什么作用? 实现服务运行启动 实现某些功能 应用配置有三种方式? 利用编译安装进行配置 编写配置文件信息 ,.默认的配置文件: /etc/my.cnf 利用启动命令参数配置信息,mysqld_safe --skip-grant-tables --…

Langchain+FastApi+Vue前后端Ai对话(超详细)

一、引入 首先可以先看下作者的文章 FastApi相关文章:创建最简单FastApi的项目Vue相关文章:最简单的aixos二次封装Langchain相关文章:如何使用LangSmith跟踪deepseek模型 二、后端搭建 1 项目文件结构 routers:存放api接口se…

简历_使用优化的Redis自增ID策略生成分布式环境下全局唯一ID,用于用户上传数据的命名以及多种ID的生成

系列博客目录 文章目录 系列博客目录WhyRedis自增ID策略 Why 我们需要设置全局唯一ID。原因:当用户抢购时,就会生成订单并保存到tb_voucher_order这张表中,而订单表如果使用数据库自增ID就存在一些问题。 问题:id的规律性太明显、…

Jira中bug的流转流程

Jira中bug的状态 1. 处理Bug的流程2. bug状态流转详述bug的状态通常包括 1. 处理Bug的流程 2. bug状态流转详述 bug的状态通常包括 未解决 1. 测试人员创建一个bug,填写bug的详细信息,如概要、bug级别、复现步骤、现状、预期结果等 2. 定位bug&#x…

Linux的几个基本指令

文章目录 一、几个基本指令1、ls 指令注意! 2、pwd命令3、touch 指令4、mkdir 指令注意!注意! 5、cd 指令注意! 6、cp 指令 今天我们学习Linux下的几个基本指令,本篇是在Xshell环境下执行的。 一、几个基本指令 1、…

数据库基础练习1(创建表,设置外键,检查,不为空,主键等约束)安装mysql详细步骤

安装MySQL详细步骤 1. 下载 MySQL 安装程序 访问 MySQL 官方网站:MySQL Downloads。在下载页面,选择 "MySQL Community (GPL) Downloads"。在 "MySQL Community Server" 部分,根据你的操作系统(Windows&…

ThinkPHP 8的一对多关联

【图书介绍】《ThinkPHP 8高效构建Web应用》-CSDN博客 《2025新书 ThinkPHP 8高效构建Web应用 编程与应用开发丛书 夏磊 清华大学出版社教材书籍 9787302678236 ThinkPHP 8高效构建Web应用》【摘要 书评 试读】- 京东图书 使用VS Code开发ThinkPHP项目-CSDN博客 编程与应用开…

工业网口相机:如何通过调整网口参数设置,优化图像传输和网络性能,达到最大帧率

项目场景 工业相机是常用与工业视觉领域的常用专业视觉核心部件,拥有多种属性,是机器视觉系统中的核心部件,具有不可替代的重要功能。 工业相机已经被广泛应用于工业生产线在线检测、智能交通,机器视觉,科研,军事科学,航天航空等众多领域 …

java使用poi-tl自定义word模板导出

文章目录 概要整体架构流程创建word模板核心代码导出结果 概要 在软件开发领域,自定义Word模板的使用是导出格式化数据的一种常见做法。poi-tl(Apache POI Template Language)作为一款基于广受认可的Apache POI库的Word模板引擎,…

IDEA2023版中TODO的使用

介绍:TODO其实本质上还是注释,只不过加上了TODO这几个字符,可以让使用者快速找到。 注意:在类、接口等文件中,注释是使用// 即:// TODO 注释内容 在配置文件中,注释是使用# 即:# TO…

项目练习:若依管理系统字典功能-Vue前端部分

文章目录 一、情景说明二、若依Vue相关代码及配置1、utils代码2、components组件3、api接口代码4、Vuex配置5、main.js配置 三、使用方法1、html部分2、js部分 一、情景说明 我们在做web系统的时候,肯定会遇到一些常量选择场景。 比如,性别:…

LabVIEW开发X光图像的边缘检测

在医疗影像处理中,X光图像的分析对于骨折、肿瘤等病变的检测非常重要。X光图像中包含许多关键信息,然而,由于图像噪声的干扰,直接从图像中提取有用的特征(如骨折的边缘)变得非常困难。边缘检测作为图像处理…

【CC2640R2F】香瓜CC2640R2F之SPI读写W25Q80

本文最后修改时间:2022年01月08日 10:45 一、本节简介 本节以simple_peripheral工程为例,介绍如何使用SPI读写W25Q80(外部flash)。 二、实验平台 1)CC2640R2F平台 ①协议栈版本:CC2640R2 SDK v1.40.00.4…

光谱相机如何还原色彩

多光谱通道采集 光谱相机设有多个不同波段的光谱通道,可精确记录每个波长的光强信息。如 8 到 16 个甚至更多的光谱通道,每个通道负责特定波长范围的光信息记录。这使得相机能分辨出不同光谱组合产生的相同颜色感知,而传统相机的传感器通常只…

C# 获取PDF文档中的字体信息(字体名、大小、颜色、样式等

在设计和出版行业中,字体的选择和使用对最终作品的质量有着重要影响。然而,有时我们可能会遇到包含未知字体的PDF文件,这使得我们无法准确地复制或修改文档。获取PDF中的字体信息可以解决这个问题,让我们能够更好地处理这些文件。…

Shell正则表达式与文本处理三剑客(grep、sed、awk)

一、正则表达式 Shell正则表达式分为两种: 基础正则表达式:BRE(basic regular express) 扩展正则表达式:ERE(extend regular express),扩展的表达式有、?、|和() 1.1 基本正则表…