Cursor+MCP 3分钟接管2大国产数据库PolarDB & Oceanbase
仅需3分钟, Cursor+MCP接管2大国产数据库PolarDB & Oceanbase
MCP太火了, 它是AI应用与传统应用进行整合, 让AI应用可以通过call tools的方式操控传统应用, 让AI驱动(接管)传统应用的标准模式. 似乎所有的传统应用都在通过mcp server被动接入AI应用.
下面这篇文档测试了使用AI应用连接管理国产数据库PolarDB & OB, AI应用oterm使用ollama本地部署的大模型. 但是工具调用不太丝滑, 而且oterm就是个cli版ollama Agent, 功能非常单一, 适合了解AI Agent, LLM, MCP client, MCP server, 传统应用的整合原理. 不是生产力工具.
《两大国产数据库PolarDB & OB通过MCP与AI应用整合》
本文将试一下cursor的tools功能. (cursor作为MCP HOST, 通过mcp client连接外部MCP Server, 获取相应mcp server的tools、resource等清单, 并按需调用.)
Cursor是什么?
AI 代码编辑器
旨在让你获得超凡的生产力, Cursor 是使用 AI 编写代码的最佳方式。
下载并安装Cursor:
https://www.cursor.com/cn
可以使用github账号登陆cursor, 免费版提供了pro版本的15天试用.
打开Cursor后, 安装一些插件, 例如C/Python/Git等.
用Cursor打开PolarDB开源项目
下载PolarDB源码
cd ~
git clone --depth 1 -b POLARDB_15_STABLE https://github.com/ApsaraDB/PolarDB-for-PostgreSQL polardb_15
用cursor打开PolarDB开源项目
选中PolarDB项目
后台会为PolarDB源码建立索引等.
打开一个c文件 polar_bufmgr.c
chat栏, 让Cursor生成这个c文件的用户手册和开发者手册
下面是cursor生成的内容
我将为 polar_bufmgr.c 文件生成用户手册和开发者手册。
PolarDB 缓冲区管理器 用户手册
功能概述
PolarDB 缓冲区管理器(Buffer Manager)是数据库的核心组件之一,主要负责:
管理共享缓冲区(Shared Buffers) 处理数据页的读写 实现增量检查点(Incremental Checkpoint) 支持并行后台写入(Parallel Background Writer) 提供批量读取(Bulk Read)功能
主要特性
1. 增量检查点
通过 polar_incremental_checkpoint_enabled()控制是否启用可以显著减少检查点时的 I/O 负载 适用于 XLOG 和定时触发的检查点
2. 并行后台写入
支持动态调整后台写入进程数量 基于一致性 LSN 延迟自动调整写入策略 可通过参数控制最大并行度
3. 批量读取
通过 polar_bulk_read_buffer_extended()接口实现一次性读取多个连续数据块 可显著提升顺序扫描性能
4. 全页快照
支持生成数据页的全量快照 用于加速复制和恢复 可配置触发条件和存储限制
配置参数
主要配置参数包括:
polar_enable_shared_storage_mode- 是否启用共享存储模式polar_enable_normal_bgwriter- 是否启用普通后台写入polar_bulk_read_size- 批量读取的最大块数polar_fullpage_max_segment_size- 全页快照段大小限制
PolarDB 缓冲区管理器 开发者手册
架构设计
核心数据结构
BufferDesc - 缓冲区描述符
structBufferDesc {
BufferTag tag; // 缓冲区标识
uint32 state; // 状态标志
XLogRecPtr oldest_lsn; // 最早 LSN
int recently_modified_count; // 修改计数
CopyBufferDesc *copy_buffer; // 复制缓冲区
...
}
WritebackContext - 写回上下文 polar_flush_ctl - 刷新控制结构
主要模块
缓冲区分配与回收 刷新列表管理 检查点处理 并行写入控制 批量 I/O 处理
关键流程
1. 缓冲区读取流程
Buffer polar_bulk_read_buffer_common(){
1. 检查是否可以批量读取
2. 分配缓冲区
3. 执行批量读取
4. 验证页面完整性
5. 应用 WAL 日志(如需)
6. 设置缓冲区状态
}
2. 增量检查点流程
boolpolar_check_incremental_checkpoint(){
1. 检查是否启用增量检查点
2. 获取一致性 LSN
3. 验证时间线
4. 设置检查点标志
}
3. 并行写入控制
voidpolar_adjust_parallel_bgwriters(){
1. 计算一致性 LSN 延迟
2. 评估当前写入负载
3. 动态调整并行度
}
开发注意事项
死锁避免
仅允许升序批量读取以避免 IO_IN_PROGRESS 锁死锁
数据一致性
需要正确处理检查和页面重放 维护正确的 LSN 顺序
性能优化
合理使用批量 I/O 避免不必要的内存拷贝 优化锁竞争
错误处理
实现适当的校验和错误处理 支持页面重试机制
调试支持
提供详细的跟踪日志 支持故障注入测试
使用Cursor的MCP功能
cursor作为MCP HOST, 通过mcp client连接外部MCP Server, 获取相应mcp server的tools、resource等清单, 并按需调用.
导入mcp server到cursor, mcp server用到了dbhub、oceanbase_mcp_server、mysql_mcp_server、postgresql_mcp_server, 详细参考
《两大国产数据库PolarDB & OB通过MCP与AI完美整合》
打开Cursor settings
打开或新建 mcp.json
配置 mcp.json
cat ~/.cursor/mcp.json
{
"mcpServers": {
"oceanbase": {
"command": "python",
"args": [
"/Users/digoal/mcp-oceanbase/src/oceanbase_mcp_server/server.py"
],
"env": {
"OB_HOST": "localhost",
"OB_PORT": "2881",
"OB_USER": "digoal",
"OB_PASSWORD": "test",
"OB_DATABASE": "test"
}
},
"dbhub": {
"command": "docker",
"args": [
"run", "-i", "--rm", "bytebase/dbhub", "--transport", "stdio", "--dsn", "postgres://digoal:[email protected]:5432/postgres?sslmode=disable"
]
},
"PolarDB": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"mcp/postgres",
"postgresql://digoal:[email protected]:5432/postgres?sslmode=disable"]
},
"mysql": {
"command": "python",
"args": [
"/Users/digoal/mysql_mcp_server/src/mysql_mcp_server/server.py"
],
"env": {
"MYSQL_HOST": "localhost",
"MYSQL_PORT": "2881",
"MYSQL_USER": "digoal",
"MYSQL_PASSWORD": "test",
"MYSQL_DATABASE": "test"
}
}
}
}
试一试cursor tools , 打开cursor setting, MCP. 把需要用到的mcp server设置为enable.
在chat栏, 把Ask改成Agent, 就可以调用mcp server对应的tools了.
使用cursor比oterm专业很多, 果然是企业级产品. 在mcp调用中有详细的调用内容, 返回结果也可以查询.
能调用哪些tools取决于mcp server提供的能力, 例如dbhub和postgresql_mcp_server提供的QUERY都使用了read only事务, 防止对数据库进行破坏.
在发送llm提供的query前, 先开启只读事务即可.
postgres=# begin transaction read only ;
BEGIN
postgres=*# drop table tbl;
ERROR: cannot execute DROP TABLE in a read-only transaction
postgres=!# end;
ROLLBACK
https://mcp.so/server/postgres/modelcontextprotocol
Running read-only queries to generate reports without altering database states.
在postgresql mcp server代码中找到了证据:
https://github.com/modelcontextprotocol/servers/tree/main/src/postgres
https://github.com/modelcontextprotocol/servers/blob/main/src/postgres/index.ts
更多cursor功能有待大家一起发掘.
https://docs.cursor.com/context/model-context-protocol
https://github.com/audivir/cursor-with-ollama
Cursor 如何接入 Qwen 大模型:
https://blog.csdn.net/ls1120623840/article/details/145226560 https://developer.aliyun.com/article/1640134 https://help.aliyun.com/zh/model-studio/getting-started/models
Cursor菜鸟教程
https://www.runoob.com/cursor/cursor-tutorial.html
题外话
话说Cursor的核心功能还是开发者提升开发效能的工具, 用mcp把数据库连进来的场景可能有哪些呢?
数据库内核开发过程中的效果校验? 应用开发过程中和数据库相关部分的效果校验? RAG? 会话记忆?
Sublime 是一款非常强大的文本编辑器, 居然可以通过插件支持AI能力, 达到类似cursor的效果.
https://github.com/yaroslavyaroslav/OpenAI-sublime-text
数据库和什么AI agent能整合好?
tabular类, 数据库分析挖掘, 直面数据. 生态工具, 例如数据库管理类, 智能管理数据库开通、运行等. 个人认为生态工具要火起来应该尽快接入Agent生态, 例如将所有API的能力抽象出来, 转换MCP Server的tools. 让AI Agent能接入你, 帮你加速获得用户流量. 知识库类, 自动构建和使用RAG相关知识库 ... 你有什么想法?