
MCP Toolbox 的 mysql-list-table-stats 工具MySQL 表级性能统计与瓶颈分析实战指南【免费下载链接】mcp-toolboxMCP Toolbox for Databases is an open source MCP server for databases.项目地址: https://gitcode.com/GitHub_Trending/ge/mcp-toolbox导读本文聚焦 MCP Toolbox for Databases 项目中的mysql-list-table-stats工具讲解如何通过一条 MCP 工具调用获取 MySQL 实例、指定数据库或单张表的表级资源消耗统计表大小、预估行数、CRUD 活动与 IO 延迟并结合仓库源码剖析其底层查询实现、参数解析逻辑与性能元数据来源。读完本文你将掌握该工具的配置方法、参数语义、输出字段含义及其底层数据原理能够将其直接接入 LLM 驱动的数据库诊断与容量规划工作流。About这个工具解决什么问题mysql-list-table-stats是 MCP Toolbox 为 MySQL 提供的表级性能与资源消耗统计工具。它以单张表为单位汇总表的行数、表大小、CRUD 读写活动量以及 IO 延迟等指标用于辅助数据库管理员和 AI Agent 完成瓶颈定位bottleneck identification与负载分析workload analysis。调用该工具后返回的是按总延迟total latency降序排列的 Top 10 MySQL 表的 JSON 数组。每个元素包含预估行数estimated row counts、表大小table size、完整的 CRUD 活动分解fetch/insert/update/delete 的行数以及 IO 统计总延迟、读延迟、写延迟与杂项延迟。典型的应用场景包括定位最热表Finding hottest tables根据sort_by参数按总延迟、读或写活动量排序找出负载最高的表定位读密集型表Finding tables with most reads按rows_fetched排序找出读取次数最多的表为索引优化或缓存策略提供依据监控数据增长Monitoring growth持续跟踪row_count与size_MB随时间的变化估算表的增长趋势为容量规划提供数据。Compatible Sources可对接的数据源mysql-list-table-stats可与以下两类数据源配合使用MySQL 数据源标准 MySQL 实例详见 MySQL Source 文档Cloud SQL for MySQL 数据源Google Cloud 托管的 MySQL 实例详见 Cloud SQL for MySQL 预置配置文档。从源码结构看该工具通过compatibleSource接口与数据源解耦见 mysqllisttablestats.go接口要求数据源实现MySQLPool()、RunSQL()与MySQLDatabase()三个方法MySQL 数据源的对应实现位于 mysql.go。这意味着任何满足该接口的 MySQL 类数据源都能直接使用此工具。Requirements前置条件使用该工具的核心前提是performance_schema必须开启ON否则工具无法获取到表级延迟与 IO 统计。原因在于工具的底层查询依赖 MySQL 的sys模式视图sys.x$schema_table_statistics而该视图的数据正是从performance_schema采集的。数据源层面也内置了相应的探测能力MySQL Source 的PerformanceSchemaEnabled方法通过SHOW VARIABLES LIKE performance_schema检查该参数是否为ON见 mysql.go。此外执行该工具所需的 MySQL 账号需要具备对information_schema.tables与sys.x$schema_table_statistics的读取权限数据库级权限如SELECT。若你的数据库部署在 Cloud SQL for MySQL 上还需额外授予Cloud SQL Clientroles/cloudsql.client角色用于连接实例。参数详解4 个可选入参该工具接受 4 个可选输入参数全部带默认值均可省略参数类型默认值说明table_schemastring空当前数据库执行表统计检查的数据库名未指定时检查当前用户可见的所有表table_namestring空全部表要检查的表名未指定时检查当前用户可见的所有表sort_bystringtotal_latency_secs排序字段合法值为row_count、rows_fetched、rows_inserted、rows_updated、rows_deleted、total_latency_secslimitint10最多返回的行数这些参数在源码中通过parameters包注册为工具清单manifest参数并设置了默认值table_schema、table_name、sort_by默认为空字符串limit默认为 10见 mysqllisttablestats.go。值得注意的一个实现细节是连接 Schema 校验工具内部还会读取一个connected_schema参数由数据源注入当前连接数据库当显式指定了table_schema时会校验其与连接数据库是否一致不一致会返回 connected schema does not match queried schema 错误见 mysqllisttablestats.go。这保证了统计查询不会跨库越权执行。配置示例如何在配置文件中声明该工具独立工具声明在 MCP Toolbox 的配置文件中yaml 格式按如下方式声明mysql-list-table-stats工具kind: tool name: list_table_stats type: mysql-list-table-stats source: my-mysql-instance description: Display table statistics including table size, total latency, rows read, rows written, read and write latency for entire instance, a specified database, or a specified table. Specifying a database name or table name filters the output to that specific db or table. Results are limited to 10 by default.其中source指向已声明的 MySQL 数据源实例如my-mysql-instancedescription会作为工具说明传递给 LLM用于让模型在合适场景下自动调用该工具——因此描述应尽量写清功能、过滤语义与默认限制。通过预置配置prebuilt启用MCP Toolbox 自带的 MySQL 预置配置已经内置了list_table_stats工具见 mysql.yaml并已纳入monitor工具集kind: tool name: list_table_stats type: mysql-list-table-stats source: mysql-source description: Display table statistics including table size, total latency, rows read, rows written, read and write latency for entire instance, a specified database, or a specified table. Specifying a database name or table name filters the output to that specific db or table. Results are limited to 10 by default.预置配置的 MySQL 工具集划分如下见 mysql.yamldata工具集execute_sql、list_tables、get_query_plan、list_active_queriesmonitor工具集get_query_plan、list_active_queries、list_all_locks、list_table_fragmentation、list_table_stats、list_tables_missing_unique_indexes、show_query_stats。list_table_stats是监控类工具集中的一员适合与show_query_stats查询执行统计、list_table_fragmentation表碎片等工具组合成完整的 MySQL 性能巡检方案。预置配置对应的环境变量与权限要求可参考 MySQL 预置配置文档。关联数据源配置工具本身不包含连接信息连接由source指向的数据源配置提供。一个典型的 MySQL 数据源配置如下完整字段见 MySQL Source 文档kind: source name: my-mysql-instance type: mysql host: 127.0.0.1 port: 3306 database: my_db user: ${USER_NAME} password: ${PASSWORD} queryTimeout: 30s # 可选查询超时时间注意使用${ENV_NAME}环境变量占位语法注入敏感信息避免在配置文件中硬编码凭据。Cloud SQL for MySQL 场景下可通过--prebuilt cloud-sql-mysql一键启用环境变量命名规则为CLOUD_SQL_MYSQL_*见 cloud-sql-for-mysql.md。输出格式JSON 字段全解析工具返回一个 JSON 数组每个元素对应一张表字段说明如下[ { table_schema: The schema/database this table belongs to, table_name: Name of this table, size_MB: Size of the table data in MB, row_count: Number of rows in the table, total_latency_secs: total latency in secs, rows_fetched: total number of rows fetched, rows_inserted: total number of rows inserted, rows_updated: total number of rows updated, rows_deleted: total number of rows deleted, io_reads: total number of io read requests, io_read_latency: io read latency in seconds, io_write_latency: io write latency in seconds, io_misc_latency: io misc latency in seconds } ]补充说明各字段的语义与来源table_schema/table_name表所属的数据库schema与表名构成表的唯一标识size_MB表数据大小MB实际由底层查询计算(data_length index_length) / 1024 / 1024并保留两位小数得到row_count表预估行数来自information_schema.tables.TABLE_ROWSInnoDB 下为采样估算值非精确值total_latency_secs该表累计总延迟秒由sys.x$schema_table_statistics.total_latency从皮秒换算为秒并保留两位小数rows_fetched/rows_inserted/rows_updated/rows_deleted分别对应表的读取fetch、插入、更新、删除行数即 CRUD 活动量分解io_reads累计 IO 读请求次数对应io_read_requestsio_read_latency/io_write_latency/io_misc_latencyIO 读、写与杂项延迟秒同样由皮秒值换算而来。工具默认按total_latency_secs降序返回 Top 10帮助快速锁定延迟贡献最大的表。此外底层查询还会额外产出io_writes、io_misc_requests等原始 IO 请求计数字段用于更完整的 IO 画像分析。底层原理从源码看统计数据从哪来核心 SQL 实现mysql-list-table-stats的核心是一条多表 JOIN 的统计查询定义于 mysqllisttablestats.goSELECT t.table_schema AS table_schema, t.table_name AS table_name, ROUND((t.data_length t.index_length) / 1024 / 1024, 2) AS size_MB, t.TABLE_ROWS AS row_count, ROUND(ts.total_latency / 1000000000000, 2) AS total_latency_secs, ts.rows_fetched AS rows_fetched, ts.rows_inserted AS rows_inserted, ts.rows_updated AS rows_updated, ts.rows_deleted AS rows_deleted, ts.io_read_requests AS io_reads, ROUND(ts.io_read_latency / 1000000000000, 2) AS io_read_latency, ts.io_write_requests AS io_writes, ROUND(ts.io_write_latency / 1000000000000, 2) AS io_write_latency, ts.io_misc_requests AS io_misc_requests, ROUND(ts.io_misc_latency / 1000000000000, 2) AS io_misc_latency FROM information_schema.tables AS t INNER JOIN sys.x$schema_table_statistics AS ts ON (t.table_schema ts.table_schema AND t.table_name ts.table_name) WHERE t.table_schema NOT IN (sys, information_schema, mysql, performance_schema) AND (t.table_schema COALESCE(NULLIF(?, ), NULLIF(DATABASE(), )) OR COALESCE(NULLIF(?, ), NULLIF(DATABASE(), )) IS NULL) AND (COALESCE(?, ) OR t.table_name ?) ORDER BY CASE ? WHEN row_count THEN row_count WHEN rows_fetched THEN rows_fetched WHEN rows_inserted THEN rows_inserted WHEN rows_updated THEN rows_updated WHEN rows_deleted THEN rows_deleted ELSE ts.total_latency END DESC LIMIT ?;这条查询揭示了几个关键设计数据源双表合一表大小与行数来自information_schema.tables由 MySQL 维护的表元数据而延迟与 IO 统计来自sys.x$schema_table_statistics由performance_schema汇总的每表统计视图二者通过(table_schema, table_name)做 INNER JOIN系统库自动排除sys、information_schema、mysql、performance_schema四个系统 schema 被显式排除保证统计聚焦于用户业务表动态过滤table_schema为空时回退到DATABASE()当前连接数据库table_name为空时不过滤表名动态排序sort_by通过CASE表达式映射到具体排序列非法值或空值回退到ts.total_latency随后统一按DESC排序延迟换算sys.x$schema_table_statistics中的延迟字段单位是皮秒10⁻¹² 秒查询统一除以1000000000000并ROUND到两位小数得到秒为单位的数值。参数绑定与调用链工具在Invoke中完成参数提取、类型断言与绑定将table_schema、table_name、sort_by校验为字符串、limit校验为整数后按[]any{table_schema, table_schema, table_name, table_name, sort_by, limit}的顺序绑定到上述 SQL 的 6 个占位符上然后调用数据源的RunSQL执行见 mysqllisttablestats.go。RunSQL位于 mysql.go会按需为语句前置 SQL Commenter 注解便于链路追踪并基于database/sql的ColumnTypes对返回值做类型转换后返回有序行集合。只读安全设计从源码可以看出该工具的注解annotations使用tools.NewReadOnlyAnnotations即被标记为只读工具见 mysqllisttablestats.go只允许执行统计查询而不具备任何写能力适合安全地暴露给 LLM Agent 使用。配置解析的测试验证仓库中配套的单元测试TestParseFromYamlMySQLListTableStats验证了 YAML 配置解析逻辑name、type: mysql-list-table-stats、source、description以及可选的authRequired字段均能被正确解析为工具配置见 mysqllisttablestats_test.go。Reference配置字段速查表fieldtyperequireddescriptiontypestringtrue必须为 mysql-list-table-stats。sourcestringtrue执行统计查询的数据源名称。descriptionstringtrue传递给 LLM 的工具描述。其中type字段在源码中以const resourceType string mysql-list-table-stats声明并注册到全局工具注册表见 mysqllisttablestats.go配置解析时类型不匹配会直接报错。小结接入 LLM 数据库诊断工作流的完整路径mysql-list-table-stats是 MCP Toolbox MySQL 监控工具集中最核心的表级性能洞察入口它把原本需要手工编写多表 JOIN 的统计查询封装为一次 MCP 工具调用使 LLM Agent 能够直接回答哪张表延迟最高哪张表读压力最大哪些表增长最快等问题。接入路径可总结为三步① 开启performance_schema并准备具备SELECT权限的账号 → ② 在配置中声明mysql数据源并添加type: mysql-list-table-stats的工具条目或直接使用--prebuilt mysql/--prebuilt cloud-sql-mysql预置配置→ ③ 通过table_schema、table_name、sort_by、limit四个可选参数控制统计范围与排序即可获得表级延迟、CRUD 活动量与 IO 统计的 JSON 结果。若要进一步深入可结合仓库源码 mysqllisttablestats.go 与其配套测试理解其实现细节。【免费下载链接】mcp-toolboxMCP Toolbox for Databases is an open source MCP server for databases.项目地址: https://gitcode.com/GitHub_Trending/ge/mcp-toolbox创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考