TTokenySpace
返回 Skills 列表

数据库设计与运维(免费版)

数据库设计与运维免费版,提供基础的数据库陷阱识别与规避能力. 核心能力包括: - 基础连接管理(连接池耗尽、空闲连接清理) - 基础事务陷阱(死锁、丢失更新、显式提交) - 基础查询优化(N+1查询、外键索引、无界SELECT) - 基础数据完整性(唯一约束、时区存储、金额精度) 高级功能(Schema变更安全策...

#中文
0

安装到 Tokeny(自动)

下载 ZIP
安装"db-free"技能
技能信息:
- 名称: 数据库设计与运维(免费版)
- 标识: db-free
- 描述: 数据库设计与运维免费版,提供基础的数据库陷阱识别与规避能力. 核心能力包括: - 基础连接管理(连接池耗尽、空闲连接清理) - 基础事务陷阱(死锁、丢失更新、显式提交) - 基础查询优化(N+1查询、外键索引、无界SELECT) - 基础数据完整性(唯一约束、时区存储、金额精度) 高级功能(Schema变更安全策...
- 版本: 1.0.0
下载地址:
https://www.tokeny.space/api/skills/db-free/download
继续

复制上方内容到 Tokeny 客户端并在会话中发送即可自动安装;也可直接 下载 ZIP并拖动到技能窗口安装。

SKILL.md

数据库设计与运维(免费版)

输入格式

参数名类型必填说明
inputstring数据库设计与运维(免费版)处理的输入数据或指令
optionsobject附加配置选项,如模式选择、格式偏好等
callback_urlstring异步处理完成后的回调通知URL

概述

帮助识别和规避数据库使用中的基础陷阱,覆盖连接管理、事务、查询性能与数据完整性四大领域.

核心能力

基础连接管理

陷阱表现规避方案
连接池耗尽应用静默挂起设置最大连接数,监控连接池使用率
空闲连接占用内存大量空闲连接耗尽内存设置 idle_in_transaction_session_timeout,定期清理

升级提示:Serverless连接泄漏处理(RDS ProxyPgBouncer)、连接阻塞Schema变更的 lock_timeout 策略为付费版专享功能.

基础事务陷阱

陷阱(续)表现规避方案
死锁多事务以不同顺序锁定相同资源统一加锁顺序,使用 SELECT FOR UPDATE 预锁定
丢失更新读-改-写无锁导致并发覆盖使用 SELECT FOR UPDATE 悲观锁或乐观锁(版本号)
隐式自动提交差异不同数据库自动提交行为不一致显式使用 BEGIN/COMMIT,不依赖隐式行为

升级提示:长事务MVCC锁膨胀、只读事务阻塞 VACUUM 清理等高级事务陷阱为付费版专享功能.

基础查询优化

问题原因优化方案
N+1查询ORM懒加载关联关系预加载(eager load)或批量查询
外键缺索引JOIN和级联删除全表扫描为外键列创建索引
无界SELECTSELECT * FROM huge_table 导致OOM必须加 LIMIT,或使用游标分批读取

升级提示:大IN子句拆分优化、COUNT(*) 近似计数(pg_class.reltuples)为付费版专享功能.

基础数据完整性

陷阱后果保障方案
应用层唯一检查竞态并发下产生重复数据使用数据库唯一约束(UNIQUE
时区混乱跨时区显示错误存储 UTC,显示时转换(TIMESTAMPTZ
浮点数存金额舍入误差导致账目不平使用 DECIMAL 或整数分(INTEGER 存分)

升级提示:CHECK约束管理、外键缺失致孤儿行处理为付费版专享功能。Schema变更安全策略(带默认值加列、CREATE INDEX CONCURRENTLY、列重命名与删除顺序)、备份恢复优秀实践(PITR、备份验证)、复制陷阱预防(脑裂、故障转移)、扩展性限制规划(1亿行分片、Autovacuum监控)为付费版专享功能.

快速开始

  1. 确认运行环境满足依赖说明中的要求
  2. 在AI Agent对话中调用本技能,提供必要的输入参数
  3. 检查输出结果,根据需要进行后续处理

详细的输入输出格式请参考下方章节说明。

依赖说明

运行环境

  • Agent平台: 支持SKILL.md的任意AI Agent(Claude Code / Cursor / Codex / Gemini CLI等)
  • 操作系统: Windows / macOS / Linux

依赖项

依赖项类型是否必需获取方式
LLM APIAPI必需由Agent内置LLM提供

API Key 配置

需要配置对应API Key,详见上文环境配置章节

可用性分类

  • 分类: MD+EXEC()

API Key配置方式:

export API_KEY=${API_KEY:?请设置环境变量}

配置后需重启会话或开启新终端生效。API Key应妥善保管,避免泄露到版本控制系统.

使用流程

  1. 场景识别:判断当前属于连接、事务、查询还是完整性问题
  2. 陷阱匹配:在对应类别中查找匹配的陷阱描述与规避方案
  3. 方案选择:根据数据库类型选择具体实现命令
  4. 执行验证:按方案执行后验证结果

示例

示例1:避免丢失更新

-- 错误: 读-改-写无锁,并发下丢失更新
SELECT balance FROM accounts WHERE id = 1;  -- 读到 balance=100
UPDATE accounts SET balance = 80 WHERE id = 1;  -- 丢失了另一事务的扣减
# ...
-- 正确: 使用 SELECT FOR UPDATE 悲观锁
BEGIN;
SELECT balance FROM accounts WHERE id = 1 FOR UPDATE;  -- 加行锁
UPDATE accounts SET balance = balance - 20 WHERE id = 1;
COMMIT;

示例2:金额存储

-- 错误: 浮点数存金额(舍入误差)
CREATE TABLE bad_orders (total FLOAT);  -- 0.1+0.2 = 0.30000000000000004
# ...
-- 正确: DECIMAL 精确存储
CREATE TABLE good_orders (total DECIMAL(10,2));  -- 0.10+0.20 = 0.30

示例3:避免N+1查询

# 错误: N+1查询(100个订单 = 101次查询)
orders = Order.objects.all()
for order in orders:
    print(order.customer.name)  # 每次循环1次查询
# ...
# 正确: 预加载(2次查询)
orders = Order.objects.select_related('customer').all()
for order in orders:
    print(order.customer.name)  # 无额外查询

错误处理

错误场景原因处理方式
deadlock detected 死锁多事务以不同顺序锁定相同资源统一加锁顺序,捕获死锁异常后检查网络连接和配置后重试事务
too many connections 连接耗尽连接池配置过小设置 max_connections 上限,监控连接数
out of memory 查询OOMSELECT * 无界查询加载全表添加 LIMIT,或使用游标分批读取
duplicate key value 唯一约束冲突应用层检查与插入之间存在竞态使用数据库唯一约束(UNIQUE)替代应用层检查
integer out of range 整数溢出INT 最大值 2147483647 不足改用 BIGINT(最大 9223372036854775807)

常见问题

Q1: 为什么浮点数不能存金额?

A: IEEE 754浮点数无法精确表示十进制小数。0.1 + 0.2 在浮点数中等于 0.30000000000000004。必须使用 DECIMAL(10,2) 或整数分存储.

Q2: 如何避免N+1查询?

A: 使用ORM的预加载功能(如Django的 select_related / prefetch_related),将关联数据通过JOIN一次性查出,避免循环中逐条查询.

Q3: 连接池应该设置多大?

A: 建议从 pool_size = 10 开始,根据监控调整。Serverless环境的高级连接池方案(RDS ProxyPgBouncer)为付费版专享功能.

Q4: 如何安全地修改表结构?

A: Schema变更安全策略(带默认值加列的三步法、CREATE INDEX CONCURRENTLY、列重命名与删除顺序)为付费版专享功能。免费版建议在低峰期执行Schema变更,并做好备份.

Q5: 单表超过1亿行怎么办?

A: 扩展性限制规划(分片策略、Autovacuum监控、统计信息更新)为付费版专享功能。免费版建议先尝试按时间或哈希分区表.

已知限制

  • 免费版不包含Schema变更安全策略
  • 免费版不包含备份与恢复优秀实践
  • 免费版不包含复制陷阱预防(脑裂、故障转移重连)
  • 免费版不包含扩展性限制规划(1亿行分片、IOPS瓶颈监控)
  • 免费版不包含高级事务陷阱(MVCC锁膨胀、只读事务阻塞清理)
  • 免费版不包含大IN子句与COUNT(*)优化
  • 升级至付费版可解锁全部8大类陷阱与规避方案

输出格式

{
  "success": true,
  "data": {
    "result": "数据库设计与运维(免费版)处理结果",
    "execution_time": "0.5s",
    "metadata": {
      "version": "1.0",
      "processor": "db"
    }
  },
  "execution_log": [
    "解析输入参数",
    "执行核心处理",
    "格式化输出结果"
  ],
  "error": null
}

评论

加载中…