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

2024-04-30 08:20

本文主要是介绍数据库|TiDB-Server API的高效应用指南,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

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

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

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

这篇关于数据库|TiDB-Server API的高效应用指南的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/948358

相关文章

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL数据库宕机,数据页损坏问题,启动不起来,该如何排查和解决,本文将为你说明具体的排查过程。 查看MySQL error日志 查看 MySQL error日志,排查哪个表(表空间

高效+灵活,万博智云全球发布AWS无代理跨云容灾方案!

摘要 近日,万博智云推出了基于AWS的无代理跨云容灾解决方案,并与拉丁美洲,中东,亚洲的合作伙伴面向全球开展了联合发布。这一方案以AWS应用环境为基础,将HyperBDR平台的高效、灵活和成本效益优势与无代理功能相结合,为全球企业带来实现了更便捷、经济的数据保护。 一、全球联合发布 9月2日,万博智云CEO Michael Wong在线上平台发布AWS无代理跨云容灾解决方案的阐述视频,介绍了

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

hdu1394(线段树点更新的应用)

题意:求一个序列经过一定的操作得到的序列的最小逆序数 这题会用到逆序数的一个性质,在0到n-1这些数字组成的乱序排列,将第一个数字A移到最后一位,得到的逆序数为res-a+(n-a-1) 知道上面的知识点后,可以用暴力来解 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#in

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

zoj3820(树的直径的应用)

题意:在一颗树上找两个点,使得所有点到选择与其更近的一个点的距离的最大值最小。 思路:如果是选择一个点的话,那么点就是直径的中点。现在考虑两个点的情况,先求树的直径,再把直径最中间的边去掉,再求剩下的两个子树中直径的中点。 代码如下: #include <stdio.h>#include <string.h>#include <algorithm>#include <map>#

高效录音转文字:2024年四大工具精选!

在快节奏的工作生活中,能够快速将录音转换成文字是一项非常实用的能力。特别是在需要记录会议纪要、讲座内容或者是采访素材的时候,一款优秀的在线录音转文字工具能派上大用场。以下推荐几个好用的录音转文字工具! 365在线转文字 直达链接:https://www.pdf365.cn/ 365在线转文字是一款提供在线录音转文字服务的工具,它以其高效、便捷的特点受到用户的青睐。用户无需下载安装任何软件,只