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.pswp.cn/web/66369.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/66369.shtml
英文地址,請注明出處:http://en.pswp.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…

docker 基礎語法學習,K8s基礎語法學習,零基礎學習

下面是關于Docker和Kubernetes的基礎語法學習資料,包括一些關鍵概念和示例代碼。 Docker 基礎語法 1. 安裝 Docker 首先,你需要安裝 Docker。以下是不同操作系統上的安裝指南: Windows/Mac: 下載并安裝 Docker Desktop。 Linux: 根據你的…

【逆境中綻放:萬字回顧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…

如何在不暴露MinIO地址的情況下,用Spring Boot與KKFileView實現文件預覽

在現代Web應用中,文件預覽是一項常見且重要的功能。它允許用戶在不上傳或下載文件的情況下,直接在瀏覽器中查看文件內容。然而,直接將文件存儲服務(如MinIO)暴露給前端可能會帶來安全風險。本文將介紹如何在不暴露MinI…

簡歷_使用優化的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&…

laravel中請求失敗重試的擴展--Guzzle

背景 開發過程中,跟外部接口對接時,很常見的要考慮到失敗重新的情況,這里記錄一下我用的失敗重試的情況, 重試方法 1、使用 Laravel 的 HTTP 客戶端和異常處理 結合異常處理和重試邏輯 use Illuminate\Support\Facades\Http;…

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系統的時候,肯定會遇到一些常量選擇場景。 比如,性別:…