写点什么

TiDB-Server 常用 API

  • 2023-12-29
    北京
  • 本文字数:7103 字

    阅读完需:约 23 分钟

原文来源:https://tidb.net/blog/efbdf4e5


访问 tidb-server_ip:status_port 将呈现出各种 TiDB 服务器的 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. Metrics

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


tidb-server_ip:status_port/metrics


# HELP br_raw_backup_region_seconds Backup region latency distributions.# TYPE br_raw_backup_region_seconds histogrambr_raw_backup_region_seconds_bucket{le="0.05"} 0br_raw_backup_region_seconds_bucket{le="0.1"} 0br_raw_backup_region_seconds_bucket{le="0.2"} 0br_raw_backup_region_seconds_bucket{le="0.4"} 0br_raw_backup_region_seconds_bucket{le="0.8"} 0br_raw_backup_region_seconds_bucket{le="1.6"} 0br_raw_backup_region_seconds_bucket{le="3.2"} 0br_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 * from t1;+-----------------------------------------------------------+| File_token                                                |+-----------------------------------------------------------+| replayer_xyUNbajB-Kx_rmD_Norcnw==_1702952402658503693.zip |+-----------------------------------------------------------+1 row in set (0.06 sec)
MySQL [test]> SELECT @@tidb_last_plan_replayer_token;+-----------------------------------------------------------+| @@tidb_last_plan_replayer_token |+-----------------------------------------------------------+| replayer_xyUNbajB-Kx_rmD_Norcnw==_1702952402658503693.zip |+-----------------------------------------------------------+1 row in set (0.00 sec)
复制代码


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.

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  Profile12038  allocs0  block0  cmdline249  goroutine12038  heap85  mutex0  profile12  threadcreate0  tracefull goroutine stack dumpProfile Descriptions:
allocs: A sampling of all past memory allocationsblock: Stack traces that led to blocking on synchronization primitivescmdline: The command line invocation of the current programgoroutine: Stack traces of all current goroutinesheap: A sampling of memory allocations of live objects. You can specify the gc GET parameter to run GC before taking the heap sample.mutex: Stack traces of holders of contended mutexesprofile: CPU profile. You can specify the duration in the seconds GET parameter. After you get the profile file, use the go tool pprof command to investigate the profile.threadcreate: Stack traces that led to the creation of new OS threadstrace: A trace of execution of the current program. You can specify the duration in the seconds GET parameter. After you get the trace file, use the go tool trace command to investigate the trace.
复制代码

结尾

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


作者介绍:Daniel-W, 来自神州数码钛合金战队,是一支致力于为企业提供分布式数据库 TiDB 整体解决方案的专业技术团队。团队成员拥有丰富的数据库从业背景,全部拥有 TiDB 高级资格证书,并活跃于 TiDB 开源社区,是官方认证合作伙伴。目前已为 10+ 客户提供了专业的 TiDB 交付服务,涵盖金融、证券、物流、电力、政府、零售等重点行业。


发布于: 刚刚阅读数: 2
用户头像

TiDB 社区官网:https://tidb.net/ 2021-12-15 加入

TiDB 社区干货传送门是由 TiDB 社区中布道师组委会自发组织的 TiDB 社区优质内容对外宣布的栏目,旨在加深 TiDBer 之间的交流和学习。一起构建有爱、互助、共创共建的 TiDB 社区 https://tidb.net/

评论

发布
暂无评论
TiDB-Server 常用 API_管理与运维_TiDB 社区干货传送门_InfoQ写作社区
vConsole