MCP Toolbox MySQL 活动查询监控指南:mysql-list-active-queries 工具深度解析 MCP Toolbox MySQL 活动查询监控指南mysql-list-active-queries 工具深度解析【免费下载链接】mcp-toolboxMCP Toolbox for Databases is an open source MCP server for databases.项目地址: https://gitcode.com/GitHub_Trending/ge/mcp-toolboxMCP Toolbox for Databases本仓库 mcp-toolbox为 MySQL 提供了一整套数据库运维类 MCP 工具其中mysql-list-active-queries专门用于实时获取当前数据库中的活动查询active queries及其所属事务的详细状态。本文以官方文档 mysql-list-active-queries.md 为主体结合仓库源码与预置配置完整讲解该工具的输入参数、配置方法、JSON 输出字段、底层查询原理与可验证的测试依据帮助你在慢查询排查、锁等待分析与事务监控等场景中快速上手。工具概览与典型场景mysql-list-active-queries从 MySQL 数据库检索当前正在执行的查询信息并以 JSON 数组形式返回结果按执行时间事务开始时间降序排列方便第一时间定位运行最久、最可疑的查询。它特别适用于以下场景慢查询排查配合min_duration_secs参数过滤出运行超过指定秒数的查询快速锁定拖慢业务的 SQL事务监控每个查询会附带所属事务的开始时间、持续时长、等待时长、状态、锁定的行数、修改的行数等维度便于分析长事务与锁竞争会话诊断返回连接/进程 ID、当前连接状态、发起用户含主机、默认数据库可用于关联审计与根因定位。从源码看该工具在 internal/tools/mysql/mysqllistactivequeries/mysqllistactivequeries.go 中注册资源类型常量resourceType即为mysql-list-active-queries并在init()中通过tools.Register完成全局注册属于 MySQL 工具族中标准的只读诊断工具。输入参数详解该工具只接受2 个可选参数均由源码中的parameters.NewIntParameter定义见 mysqllistactivequeries.go参数名类型必填默认值说明min_duration_secsinteger否0只显示运行时间至少达到该秒数的查询limitinteger否100最多返回的查询条数上限参数语义要点min_duration_secs 0意味着不按时长过滤返回所有满足条件的活动查询limit同时作为 SQL 中LIMIT ?的绑定参数传入直接约束返回行数若调用方传入非整数值源码会返回invalid min_duration_secs parameter; expected an integer之类的 Agent 错误见 mysqllistactivequeries.go因此参数类型必须为整数。YAML 配置示例可复制运行要启用该工具只需在配置文件如server.json引用的 tools 配置中声明一个kind: tool的条目。官方文档给出的完整示例kind: tool name: list_active_queries type: mysql-list-active-queries source: my-mysql-instance description: Lists top N (default 100) ongoing queries from processlist and innodb_trx, ordered by execution time in descending order. Returns detailed information of those queries in json format, including process id, query, transaction duration, transaction wait duration, process time, transaction state, process state, username with host, transaction rows locked, transaction rows modified, and db schema.其中source必须指向一个已声明的 MySQL 类型数据源。仓库预置配置 internal/prebuiltconfigs/tools/mysql.yaml 中给出了可直接落地的配套写法source 与 tool 使用---分隔于同一文件kind: source name: mysql-source type: mysql host: ${MYSQL_HOST:localhost} port: ${MYSQL_PORT:3306} database: ${MYSQL_DATABASE} user: ${MYSQL_USER} password: ${MYSQL_PASSWORD} queryParams: ${MYSQL_QUERY_PARAMS:} queryTimeout: 30s --- kind: tool name: list_active_queries type: mysql-list-active-queries source: mysql-source description: Lists top N (default 10) ongoing queries from processlist and innodb_trx, ordered by execution time in descending order. Returns detailed information of those queries in json format, including process id, query, transaction duration, transaction wait duration, process time, transaction state, process state, username with host, transaction rows locked, transaction rows modified, and db schema.注意上述预置配置中的description写的是默认返回 10 条描述文本差异而工具参数层面的limit默认值为 100两者以你实际配置的description为准向 LLM 准确描述行为即可。配置字段参考详见文档 Reference 表格字段类型必填说明typestringtrue必须为mysql-list-active-queriessourcestringtrue执行查询所依赖的数据源名称descriptionstringtrue传给 LLM 的工具描述应准确概括工具行为description是必填项——源码中Initialize会校验cfg.Description为空时直接返回description is required for tool %q错误见 mysqllistactivequeries.go。响应 JSON 字段逐一说明工具返回一个 JSON 数组每个元素包含以下字段字段含义按官方文档整理并与源码 SELECT 列一一对应字段类型说明proccess_idstring该查询所属 MySQL 进程/连接 ID对应information_schema.processlist.idquerystring查询文本截取前 100 字符源码使用substring(..., 1, 100)trx_startedstring所属事务开始的时间trx_duration_secondsnumber所属事务迄今为止的总耗时秒trx_wait_duration_secondsnumber所属事务迄今为止的总等待时间秒query_timenumber所属连接停留在当前状态的时长秒对应processlist.timetrx_statestring事务执行状态如RUNNING、LOCK WAIT等proces_statestring所属连接的当前状态对应processlist.stateuserstring发起该查询的用户格式为userhost主机部分取自host的冒号前段trx_rows_lockednumber所属事务大约锁定的行数trx_rows_modifiednumber所属事务大约修改的行数dbstring所属连接的默认数据库字段映射与 SQL 别名的对应关系可在 mysqllistactivequeries.go 中逐一核对例如user字段由IF(p.host IS NULL OR p.host , p.user, concat(p.user, , SUBSTRING_INDEX(p.host, :, 1)))生成query_time直接取自p.time。底层实现两条查询变体与数据来源从源码结构看该工具封装了对 MySQL 两个核心信息源的联合查询information_schema.processlist提供连接/进程维度的信息ID、查询文本、状态、耗时、用户、主机、默认库information_schema.innodb_trx提供事务维度的信息开始时间、等待开始时间、状态、锁定行数、修改行数。两表通过p.id t.trx_mysql_thread_id做LEFT OUTER JOIN并按trx_started排序后以LIMIT ?截断返回。仓库针对不同数据源维护了两套 SQL 变体见 mysqllistactivequeries.go标准 MySQL 变体listActiveQueriesStatementMySQL用于type: mysql数据源Cloud SQL for MySQL 变体listActiveQueriesStatementCloudSQLMySQL用于type: cloud-sql-mysql数据源额外过滤掉了来自localhost、127.0.0.1、::1等本机地址的连接从而屏蔽云托管平台自身的内部会话。两条 SQL 共同的过滤逻辑包括p.time ?配合min_duration_secs参数源码用同一个值绑定占位符两次排除当前连接自身p.id ! CONNECTION_ID()排除后台复制类命令Command NOT IN (Binlog Dump, Binlog Dump GTID, Connect, Connect Out, Register Slave)排除系统会话User NOT IN (system user, event_scheduler)仅保留有事务或非空闲连接(t.trx_id is NOT NULL OR command ! Sleep)。工具执行时通过source.RunSQL(ctx, statement, []any{duration, duration, limit})将参数绑定进 SQL见 mysqllistactivequeries.gomysql数据源的RunSQL实现位于 internal/sources/mysql/mysql.go它会先将结果行按列类型转换后组织成[]any的有序映射列表返回最终经 MCP 序列化为 JSON。兼容数据源与只读安全设计官方文档标注该工具兼容cloud-sql-mysqlCloud SQL for MySQL数据源。源码中通过compatibleSource接口约束了可用源见 mysqllistactivequeries.go要求数据源实现SourceType()、MySQLPool()、RunSQL()三个方法Invoke时按SourceType()分发到对应 SQL 变体遇到不支持的源类型会返回unsupported source type错误。同时该工具在初始化时使用tools.NewReadOnlyAnnotations见 mysqllistactivequeries.go声明为只读工具整个调用只执行SELECT查询不会对数据库产生写操作可安全交由 LLM 在诊断场景中调用。该工具还出现在预置工具集data与monitor中见 internal/prebuiltconfigs/tools/mysql.yaml属于推荐组合的常用诊断能力。配置解析的可验证性测试用例佐证仓库为工具配置解析提供了单元测试 mysqllistactivequeries_test.go测试用例以 YAML 声明kind: tool、type: mysql-list-active-queries、source及可选的authRequired列表调用server.UnmarshalPrimitiveConfig反序列化后与期望的mysqllistactivequeries.Config结构体做cmp.Diff比对验证了配置文件中name、description、type、source、authRequired等字段的正确解析。这说明本文给出的 YAML 配置写法均经过仓库测试验证可直接用于你的配置文件。小结mysql-list-active-queries是 MCP Toolbox 面向 MySQL 提供的高价值只读诊断工具两个可选参数min_duration_secs、limit即可灵活裁剪输出返回字段覆盖进程、查询文本、事务耗时与锁等待等完整维度底层基于processlist与innodb_trx的联合查询并针对标准 MySQL 与 Cloud SQL for MySQL 提供差异化实现。配合 mysql.yaml 预置配置与 source.md 中的数据源说明你可以在数分钟内将其接入 MCP 客户端开始对生产 MySQL 进行实时的慢查询与事务洞察。【免费下载链接】mcp-toolboxMCP Toolbox for Databases is an open source MCP server for databases.项目地址: https://gitcode.com/GitHub_Trending/ge/mcp-toolbox创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考