数据库|TiDB-Server API的高效应用指南

news2024/11/23 6:21:44

一、API介绍

1.Status

显示TiDB 连接数、版本和git_hash 信息

tidb-server_ip:status_port/status

{
"connections": 0,
"version": "5.7.25-TiDB-v6.1.1",
"git_hash": "5263a0abda61f102122735049fd0dfadc7b7f822"
}

2.Status

显示tidb所有的监控指标信息

tidb-server_ip:status_port/metrics

# HELP br_raw_backup_region_seconds Backup region latency distributions.
# TYPE br_raw_backup_region_seconds histogram
br_raw_backup_region_seconds_bucket{le="0.05"} 0
br_raw_backup_region_seconds_bucket{le="0.1"} 0
br_raw_backup_region_seconds_bucket{le="0.2"} 0
br_raw_backup_region_seconds_bucket{le="0.4"} 0
br_raw_backup_region_seconds_bucket{le="0.8"} 0
br_raw_backup_region_seconds_bucket{le="1.6"} 0
br_raw_backup_region_seconds_bucket{le="3.2"} 0
br_raw_backup_region_seconds_bucket{le="6.4"} 0

3.StatsDump

获取指定表的统计信息

直接访问会返回表不存在,原因是他的语法为/stats/dump/{db}/{table}

[schema:1146]Table '{db}.{table}'doesn't exist

e.g:tidb-server_ip:status_port/stats/dump/tpcc/item

{
"database_name": "tpcc",
"table_name": "item",
"columns": {
"i_data": {
"histogram": {
"ndv": 99072,
"buckets": [
{
"count": 390,
"lower_bound": "MDAxaHFvVW14YW9iUVAxSVRYWHlLMXc4TXJxwjA4RG1BaA==",
"upper_bound": "MEZWb0V6a2RiNmNuNFJoTmFZVkRqbHZ4b0hhUjN6WktuaFVFUkl6cHZlSUh1eGg=",
"repeats": 1,
"ndv": 0
},
......

4.StatsHistoryDump

获取指定表的历史统计信息

直接访问返回

[types:1292]Incorrect datetime value: '{snapshot}'

正确的语法为

/stats/dump/{db}/{table}/{yyyy-MM-dd HH:mm:ss}

/stats/dump/{db}/{table}/{yyyyMMddHHmmss}

e.g:tidb-server_ip:status_port/stats/dump/tpcc/item/2023-12-19 10:00:39

{
"database_name": "tpcc",
"table_name": "item",
"columns": {
"i_data": {
"histogram": {
"ndv": 99072,
"buckets": [
{
"count": 390,
"lower_bound": "MDAxaHFvVW14YW9iUVAxSVRYWHlLMXc4TXJxSjA4RG1BaA==",
"upper_bound": "MEZWb0V6a2RiNmNuNFJoTmFZVkRqbHZ4b0hhUjN6WktuaFVFUkl6cHZlSUh1eGg=",
"repeats": 1,
"ndv": 0
},
{
"count": 781,
"lower_bound": "MEZmRTV5VDdaZkNZMktTOTFCZ3FKTmhzZFdOTlZHNjhw",
"upper_bound": "MFVaTnc4UHdPOWlFMk8zbkdHZUdUbmZxcVNWVldqdFl5VE1lVmpXN2FWeG4=",
"repeats": 1,
"ndv": 0
},
......

5.PlanReplayerDump

保存和恢复集群现场信息

PLAN REPLAYER DUMP EXPLAIN [ANALYZE] sql-statement;

TiDB 根据 sql-statement 整理出以下集群现场信息:

TiDB 版本信息

TiDB 配置信息

TiDB Session 系统变量

TiDB 执行计划绑定信息(SQL Binding)

sql-statement 中所包含的表结构

sql-statement 中所包含表的统计信息

EXPLAIN [ANALYZE] sql-statement 的结果

PLAN REPLAYER 不会导出表中数据

tidb_last_plan_replayer_token 这个会话变量可以获取上一次 PLAN REPLAYER dump 执行的结果。(v6.5 以上版本有此变量)

MySQL [test]> plan replayer dump explain select * fromt1;
+-----------------------------------------------------------+
| File_token |
+-----------------------------------------------------------+
| replayer_xyUNbajB-Kx_rmD_Norcnw==_1702952402658503693.zip |
+-----------------------------------------------------------+
1row inset(0.06sec)

MySQL [test]> SELECT @@tidb_last_plan_replayer_token;
+-----------------------------------------------------------+
| @@tidb_last_plan_replayer_token |
+-----------------------------------------------------------+
| replayer_xyUNbajB-Kx_rmD_Norcnw==_1702952402658503693.zip |
+-----------------------------------------------------------+
1row inset(0.00sec)

ZIP 文件最多会在 TiDB 集群中保存一个小时,超时后 TiDB 会将其删除。

plan replayer dump explain 'tidbsqls.txt';

多条 SQL 语句可以写在文件中以 ; 进行分隔。

通过http下载文件

http://${tidb-server-ip}:${tidb-server-status-port}/plan_replayer/dump/${file_token}

将导出的文件导入的另一个集群,导入完毕后,该 TiDB 集群就载入了所需要的表结构、统计信息等其他影响构造 Plan 所需要的信息。

PLAN REPLAYER LOAD 'plan_replayer.zip';

6.Settings

tidb-server 的所有配置信息

tidb-server_ip:status_port/settings

7.BinlogRecover

恢复 Pump 后恢复 binlog 写入。

返回值:

超时,返回状态码:400,消息:timeout

如果正常返回,状态码:200

默认情况下,API 将在等待所有跳过的二进制日志事务提交后返回。如果此值大于 0,则表示需要等到它们提交完毕。

消息示例:false表示当前binlog不处于跳过状态,否则为跳过状态:表示当前处于跳过状态的事务数。

{
"Skipped": false,
"SkippedCommitterCounter": 0
}

8.Schema

获取集群所有databases的详细信息

tidb-server_ip:status_port/schema

[
{
"id": 1,
"db_name": {
"O": "test",
"L": "test"
},
"charset": "utf8mb4",
"collate": "utf8mb4_bin",
"state": 5,
"policy_ref_info": null
},
{
"id": 3,
"db_name": {
"O": "mysql",
"L": "mysql"
},
"charset": "utf8mb4",
"collate": "utf8mb4_bin",
"state": 5,
"policy_ref_info": null
},
......

tidb-server_ip:status_port/schema/{db}

查看指定database的详细信息,如该db下所有的table详细信息。

[
{
"id": 147,
"name": {
"O": "t2",
"L": "t2"
},
"charset": "utf8mb4",
"collate": "utf8mb4_bin",
"cols": [
{
"id": 1,
"name": {
"O": "id",
"L": "id"
},
"offset": 0,
"origin_default": null,
"origin_default_bit": null,
"default": null,
"default_bit": null,
"default_is_expr": false,
"generated_expr_string": "",
"generated_stored": false,
"dependences": null,
"type": {
"Tp": 3,
"Flag": 4099,
"Flen": 11,
"Decimal": 0,
"Charset": "binary",
"Collate": "binary",
"Elems": null,
"ElemsIsBinaryLit": null,
"Array": false
},
"state": 5,
"comment": "",
"hidden": false,
"change_state_info": null,
"version": 2
},
......

通过table_name 来获取table的详细信息

tidb-server_ip:status_port/schema/{db}/{table}

可以通过 tableID 获取 schema 信息(tableID 是 Table 在 TiDB 中的唯一标识符)

tidb-server_ip:status_port/schema?table_id={tableID}

{
"id": 147,
"name": {
"O": "t2",
"L": "t2"
},
"charset": "utf8mb4",
"collate": "utf8mb4_bin",
"cols": [
{
"id": 1,
"name": {
"O": "id",
"L": "id"
},

......

通过 tableID 获取db_info、table_info和tidb info schema version

tidb-server_ip:status_port/db-table/{tableID}

与上面的获取table的详细信息相比多了db_info和schema version信息。

{
"db_info": {
"id": 1,
"db_name": {
"O": "test",
"L": "test"
},
"charset": "utf8mb4",
"collate": "utf8mb4_bin",
"state": 5,
"policy_ref_info": null
},
......
......
"schema_version": 119
}

9.Schema Storage

获取集群所有table的信息

tidb-server_ip:status_port/schema_storage

[
{
"table_schema": "INFORMATION_SCHEMA",
"table_name": "CLIENT_ERRORS_SUMMARY_GLOBAL",
"table_rows": 0,
"avg_row_length": 0,
"data_length": 0,
"max_data_length": 0,
"index_length": 0,
"data_free": 0
},
......

也可以指定获取指定database或者table的信息

获取db下所有table的信息

tidb-server_ip:status_port/schema_storage/{db}

获取指定table的信息

tidb-server_ip:status_port/schema_storage/{db}/{table}

{ 
"table_schema": "test",
"table_name": "t1",
"table_rows": 4,
"avg_row_length": 8,
"data_length": 32,
"max_data_length": 0,
"index_length": 0,
"data_free": 0
}

10.DDL_History

获取所有 TiDB DDL 历史记录

tidb-server_ip:status_port/ddl/history

[
{
"id": 2,
"type": 1,
"schema_id": 1,
"table_id": 0,
"schema_name": "test",
"table_name": "",
"state": 6,
"warning": null,
"err": null,
"err_count": 0,
"row_count": 0,
"raw_args": null,
"schema_state": 5,
"snapshot_ver": 0,
"real_start_ts": 0,
"start_ts": 444336503938613250,
"dependency_id": 0,
"query": "CREATE DATABASE IF NOT EXISTS test",
"binlog": {
"SchemaVersion": 1,
"DBInfo": {
"id": 1,
"db_name": {
"O": "test",
"L": "test"
},
"charset": "utf8mb4",
"collate": "utf8mb4_bin",
"state": 5,
"policy_ref_info": null
},
"TableInfo": null,
"FinishedTS": 444336503965089800,
"MultipleTableInfos": null
},
"version": 1,
"reorg_meta": null,
"multi_schema_info": null,
"priority": 0,
"seq_num": 0,
"charset": "",
"collate": "",
"admin_operator": 0
},
......

11.DDL_Owner_Resign

辞去 ddl owner 的职务,让 tidb 开始新的 ddl owner 选举

curl -X POST http://{TiDBIP}:10080/ddl/owner/resign

注意:如果你请求的 TiDB 不是 ddl owner,则响应为This node is not a ddl owner, can't be resigned.

http://12.Info

tidb-server_ip:status_port/info

获取tidb-server的相关信息

{
"is_owner": true,
"max_procs": 4,
"gogc": 500,
"version": "5.7.25-TiDB-v7.1.0",
"git_hash": "635a4362235e8a3c0043542e62953e3c7bb2756",
"ddl_id": "39844a19-b9d7-4f39-b21a-9beb5ffec18",
"ip": "10.0.0.1",
"listening_port": 5000,
"status_port": 20080,
"lease": "45s",
"binlog_status": "On",
"start_timestamp": 1695089378,
"labels": {},
"server_id": 937142
}

13.InfoALL

tidb-server_ip:status_port/info/all

获取tidb集群所有tidb-server的信息

{
"servers_num": 1,
"owner_id": "9112417d-2609-404a-8a8b-c10b5cebfe2b",
"is_all_server_version_consistent": true,
"all_servers_info": {
"9112417d-2609-404a-8a8b-c10b5cebfe2b": {
"version": "5.7.25-TiDB-v6.5.2",
"git_hash": "29116c0256c52b224da2b34d712c1063d171c0ad",
"ddl_id": "9112417d-2609-404a-8a8b-c10b5cebfe2b",
"ip": "10.3.65.136",
"listening_port": 4900,
"status_port": 19080,
"lease": "45s",
"binlog_status": "On",
"start_timestamp": 1703554804,
"labels": {},
"server_id": 4042427
}
}
}

14.RegionsMeta

tidb-server_ip:status_port/regions/meta

获取所有region的元数据信息

[
{
"region_id": 10,
"leader": {
"id": 128,
"store_id": 2
},
"peers": [
{
"id": 11,
"store_id": 1
},
{
"id": 128,
"store_id": 2
},
{
"id": 178,
"store_id": 4
}
],
"region_epoch": {
"conf_ver": 5,
"version": 156
}
}
]

15.RegionHot

tidb-server_ip:status_port/regions/hot

获取热点region的表/索引信息

{
"read": [
{
"region_id": 180,
"region_metric": {
"flow_bytes": 38560,
"max_hot_degree": 2564,
"region_count": 0
},
"db_name": "mysql",
"table_name": "tidb_ddl_job",
"table_id": 281474976710654,
"index_name": "",
"index_id": 0
}
],
"write": []
}

16.Trace Viewer

tidb-server_ip:status_port/web/trace

以图形界面的方式显示执行sql的详细信息,参考 TRACE | PingCAP 文档中心 使用。

这个我实验无法显示出图形信息 https://asktug.com/t/topic/1014681,尝试了6.1、6.5、7.1环境都无法显示出来。

17.Debug

tidb-server_ip:status_port/debug/pprof/

tidb debug信息,例如heap、goroutine、trace等常用信息。

Types of profiles available:
Count Profile
12038allocs
0block
0cmdline
249goroutine
12038heap
85mutex
0profile
12threadcreate
0trace
full goroutine stack dump
Profile Descriptions:

allocs:A sampling of allpast memory allocations
block: Stack traces that led toblocking onsynchronization primitives
cmdline: The commandlineinvocation of the current program
goroutine: Stack traces of allcurrent goroutines
heap: A sampling of memory allocations of live objects. You can specify the gc GET parameter torun GC before taking the heap sample.
mutex: Stack traces of holders of contended mutexes
profile: CPU profile. You can specify the duration in the seconds GET parameter. After you getthe profilefile, use the gotool pprof commandtoinvestigate the profile.
threadcreate: Stack traces that led tothe creation of newOS threads
trace: A trace of execution of the current program. You can specify the duration in the seconds GET parameter. After you getthe trace file, use the gotool trace commandtoinvestigate the trace.

二、结尾

以上API在一些运维场景中仍然相当实用。通过在运维中灵活运用,可以使运维工作更加便捷,增强系统管理的灵活性。尤其是在运维开发的场景中熟练使用,有助于高效地进行开发工作。

作者:王思强| 数据库运维工程师

版权声明:本文由神州数码云基地团队整理撰写,若转载请注明出处。

公众号搜索神州数码云基地,了解更多技术干货!

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

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

相关文章

C语言:文件操作(中)

片头 嗨!小伙伴们,大家好!在上一篇中,我们学习了C语言:文件操作(上),在这一篇中,我们将继续学习文件操作,准备好了吗?Ready Go ! ! ! 文件的顺序…

宽字符的来历:从ASCII到Unicode,C语言中的宽字符处理

目录 一、ASCII编码:字符世界的开篇 二、Unicode与宽字符的诞生 宽字符类型与宽字符串 三、C语言中的宽字符处理函数 四、宽字符与多字节字符 结语 在计算机科学的发展历程中,字符编码经历了从简单到复杂、从单一语言到全球多语种支持的演变过程。…

【AGX】Ubuntu20.04 + ROS_ noetic+ 大疆Mid360激光 雷达评测

大家好,我是虎哥,最近组装机器人,使用到了大疆孵化的圳市览沃科技有限公司(简称Livox览沃科技)推出的觅道系列全新混合固态激光雷达Mid-360,顺便试试效果,也记录一下使用入门过程。 "觅道M…

323_C++_QT_使用QProcess执行cmd解压tar.gz等等其他压缩包文件到指定目录,不需要外部库,QT自带API的就行

// decompressPath : 解压到此目录 // fileName : 解压的tar.gz文件名executeCommand(decompressPath , QString::fromStdString(fileName));// 开始解压 void executeCommand

基于Springboot的医疗服务系统

基于SpringbootVue的医疗服务系统设计与实现 开发语言:Java数据库:MySQL技术:SpringbootMybatis工具:IDEA、Maven、Navicat 系统展示 用户登录 首页 公告信息 医疗地图 医疗药品 普通村民管理 乡村医生管理 公告信息管理 乡村诊…

Microsoft Access Database使用

“小规模数据用Excel,大规模数据用Access。” 当涉及到大规模数据时,使用excel非常的卡顿,使用access就不会出现这个问题。 一、常用操作 1.新建一个数据库 直接右键,新建 access数据库 2.excel内容导入到access中(成…

基于H.264的RTP打包中的组合封包以及分片封包结构图简介及抓包分析;FU-A FU-B STAP-A STAP-B简介;

H.264视频流的RTP封装类型分析: 前言: 1.RTP打包原则: RTP的包长度必须要小于MTU(最大传输单元),IP协议中MTU的最大长度为1500字节。除去IP报头(20字节)、UDP报头(8字节)、RTP头&a…

unittest_parameterized批量测试测试用例

import unittest from parameterized import parameterizeddef add(x, y):return xy"""问题:如果有三组数据需要测试?[(1,1,2), (1,2,3), (0,3,3)] """def get_data():return [(1, 2, 3), (3, 0, 3), (2, 1, 3)]# 定义测试…

002 springCloudAlibaba Sentinel流控-关联

当与A关联的资源B达到阀值后,就限流A自己 文章目录 FlowLimitController.javaSentinelServerApplication.javaServletInitializer.javaapplication.yamlpom.xmlpom.xml 启动Sentinel8080 - java -jar sentinel-dashboard-1.7.0.jar 启动微服务8401 启动8401微服务…

微信开发api、微信视频号开发

接口地址: http://api.videostui.com/finder/v2/api/login/checkLogin 接口说明 获取到登录二维码后需每间隔5s调用本接口来判断是否登录成功新设备登录平台,次日凌晨会掉线一次,重新登录时需调用获取二维码且传appId取码,登录成…

OpenLayers入门①(引入的是一个高德地图)

OpenLayers入门&#xff08;一&#xff09; - 知乎 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport&qu…

react 基于qrcode.react生成颜色不同 , 样式不同的二维码

实现效果: 1 首先在react中 , 导入下载qrcode.react npm install qrcode.react2 在react中导入使用 , 并导入ui样式 import QRcode1 from /assets/images/QRcode1.png import QRcode2 from /assets/images/QRcode2.png import QRcode3 from /assets/images/QRcode3.png impo…

【C 数据结构】图的存储结构

文章目录 【 1. 图的顺序存储结构 】1.1 基本原理1.2 顺序存储结构的 C 实现 【 2. 图的链式存储结构 】2.1 图的临接表存储结构2.1.1 临接表的 基本原理2.1.2 临接表的 链表节点2.1.3 邻接表 各结构体的C实现2.1.4 临接表 计算顶点的出度和入度邻接表计算 无向图的出度和入度邻…

JavaScript+C#云LIS系统源码JQuery+EasyUI+Bootstrap云LIS系统应用于哪些行业领域?区域云LIS系统源码

JavaScriptC&#xff03;云LIS系统源码JQueryEasyUIBootstrap云LIS系统应用于哪些行业领域&#xff1f;区域云LIS系统源码 云LIS是为区域医疗提供临床实验室信息服务的计算机应用程序&#xff0c;可协助区域内所有临床实验室相互协调并完成日常检验工作&#xff0c;对区域内的检…

应用在电位器中的磁性旋转编码器芯片

电位器是具有三个引出端、阻值可按某种变化规律调节的电阻元件。电位器通常由电阻体和可移动的电刷组成。当电刷沿电阻体移动时&#xff0c;在输出端即获得与位移量成一定关系的电阻值或电压。电位器既可作三端元件使用也可作二端元件使用。后者可视作一可变电阻器&#xff0c;…

MATLAB中功率谱密度计算pwelch函数使用详解

MATLAB中功率谱密度计算pwelch函数使用详解 目录 前言 一、pwelch函数简介 二、pwelch函数参数说明 三、pxx pwelch(x)示例 四、[pxx,f]pwelch(x,window,noverlap,nfft,fs)示例 四、[pxx,f] pwelch(x,window,noverlap,nfft,fs,freqrange,spectrumtype)示例 五、多通道功…

CI/CD:基于kubernetes的Gitlab搭建

1. 项目目标 &#xff08;1&#xff09;熟悉使用k8s环境搭建Gitlab &#xff08;2&#xff09;熟练应用Gitlab基本配置 2. 项目准备 2.1. 规划节点 主机名 主机IP 节点规划 k8s-master 10.0.1.1 kube_master k8s-node1 10.0.1.2 kube_node k8s-node2 10.0.1.3 k…

Java 源码 - DelayQueue 源码解析

文章目录 1. 整体设计1.1 类注释1.2、类图1.3 延迟队列的属性1.4 DelayQueue 的主要方法1.4.1 offer 添加元素1.4.2 take 取出元素1.4.3 poll 取出元素 1. 整体设计 DelayQueue 延迟队列底层使用的是锁的能力&#xff0c;比如说要在当前时间往后延迟 5 秒执行&#xff0c;那么…

UnityWebGL获取话筒实时数据

看了木子李大佬的数字人https://digital.lkz.fit/之后&#xff0c;我也想搞一个&#xff0c;于是开始研究起来&#xff0c;先从WebGL录音开始&#xff0c;一共试了三个插件&#xff0c;个个都有问题…… 1、UnityWebGLMicrophone 用起来没啥问题&#xff0c;但是只能录音&#…

【百度Apollo】探索自动驾驶:Apollo 新版本 Beta 全新的Dreamview+,便捷灵活更丰富

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《linux深造日志》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 引入一、Dreamview介绍二、Dreamview 新特性2.1、基于模式的多场景——流程更简洁地图视角调节&#xff1a;调试流…