Adpative Cursor Sharing引发的Oracle故障案例:从AWR到SQL Plan的排查与TaoToken辅助验证
1. 从一次生产告警说起Adpative Cursor Sharing 引发的执行计划突变业务高峰期数据库突然 hang 死这种场景对 DBA 来说并不陌生。我经历过一次典型的 Adpative Cursor Sharing自适应游标共享简称 ACS引发的故障某核心 OLTP 系统在下午两点左右响应时间从 50ms 飙升到 8s 以上应用端大量连接超时数据库整体负载接近饱和。登录数据库后第一眼看到的就是cursor: pin S wait on X等待事件占比接近 90%这个信号非常明确——游标争用严重。Adpative Cursor Sharing 是 Oracle 11g 引入的特性目的是在绑定变量窥视Bind Peeking的基础上让同一个 SQL 在不同数据分布条件下能够生成多个子游标各自选择更优的执行计划。听起来很美好但实际运维中它经常成为执行计划突变的元凶。当cursor_sharing参数被设置为 FORCE 或 SIMILAR 时数据库会自动把字面量替换成系统生成的绑定变量形如:SYS_B_X这时候 ACS 会为同一父游标生成大量子游标Version Count 急剧膨胀最终导致 Library Cache 争用、CPU 飙升、整个实例响应恶化。这篇文章适合谁如果你正在运维 Oracle 数据库遇到过执行计划突然变差、AWR 报告中 Version Count 异常偏高、或者cursor: pin S wait on X等待事件频繁出现那这篇内容就是为你准备的。我会从 AWR 报告入手一步步还原从告警到定位的完整排查路径给出可复制的查询脚本和配置步骤最后用 TaoToken 统一 Key 通道调用 API 做 SQL 文本比对与回归验证帮你在测试环境复现并确认修复效果。整个排查思路分四层第一层看 Load Profile 和等待事件快速判断问题方向第二层查 SQL Statistics 中的 Version Count锁定异常 SQL第三层检查初始化参数找到cursor_sharing的配置问题第四层用 SQL Plan Baseline 固定执行计划并通过 API 做回归验证。下面逐步展开。2. TaoToken 前置准备统一 Key 通道与 API 接入配置在进入具体的 SQL 排查之前先说明为什么这里需要 TaoToken。排查 ACS 故障时一个常见的需求是对比修复前后的 SQL 文本、执行计划差异甚至用模型辅助分析 AWR 报告中的异常指标。TaoToken 提供统一的 API Key 通道兼容 OpenAI 风格的接口调用你可以用它来调用模型做 SQL 文本比对、执行计划解读、回归验证脚本生成等工作。TaoToken 是什么简单说它是一个统一的大模型 API 接入平台你只需要一个 Key就能通过标准接口调用多种模型。对于 DBA 来说它的价值在于排查过程中需要快速分析大量 SQL 文本差异、AWR 指标解读、或者生成回归测试脚本时不用在多个平台之间切换一个 Key 搞定。适合谁适合需要把 AI 辅助能力集成到数据库运维流程中的 DBA 和 SRE。你不需要自己维护模型服务只需要拿到 Key配置好 Base URL就能在脚本或工具中调用。接入步骤很直接第一步访问 TaoToken 官网注册账号进入控制台创建 API Key。地址是https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content注册后在 Console 页面生成 Key。第二步记录两个关键信息Base URL 是https://taotoken.net/apiAPI Key 是你刚生成的那串字符。注意 Base URL 后面不加 UTM 参数保持干净。第三步如果你用的是 Claude Code 或者 Cline 这类编码工具可以在配置文件中填入 Base URL、Key 和 Model ID 三件套。比如在 Claude Code 的 settings 中配置{ apiProvider: openai-compatible, baseUrl: https://taotoken.net/api, apiKey: sk-your-taoToken-key, model: claude-sonnet-4-20250514 }如果你用的是 Codex 的auth.json配置格式类似{ base_url: https://taotoken.net/api, api_key: sk-your-taoToken-key, model: gpt-4o }对于 Cline MCP 模式在 MCP 配置文件中填入{ mcpServers: { taotoken: { command: npx, args: [-y, taotoken/mcp-server], env: { TAOTOKEN_BASE_URL: https://taotoken.net/api, TAOTOKEN_API_KEY: sk-your-taoToken-key, TAOTOKEN_MODEL: claude-sonnet-4-20250514 } } } }配置完成后你可以用一条简单的 curl 命令验证连通性curl -X POST https://taotoken.net/api/v1/chat/completions \ -H Content-Type: application/json \ -H Authorization: Bearer sk-your-taoToken-key \ -d { model: claude-sonnet-4-20250514, messages: [{role: user, content: Hello}] }如果返回正常的 JSON 响应说明通道已经打通。后续在 SQL 比对和回归验证环节我们会用这个通道来调用模型分析 SQL 文本差异和执行计划。需要提醒的是TaoToken 在这里的角色是辅助验证工具不是替代你的数据库客户端或运维平台。它的价值在于帮你快速处理文本比对、报告解读这类重复性工作让你把精力集中在数据库本身的排查上。3. 可复制配置AWR 查询脚本与 SQL Plan Baseline 固定步骤这一节给出完整的可复制脚本和配置步骤。整个排查流程围绕 AWR 报告展开核心是找到 Version Count 异常的 SQL然后通过 SQL Plan Baseline 固定执行计划。3.1 AWR 查询脚本定位 Version Count 异常 SQL首先生成 AWR 报告并查询 SQL Statistics 部分。如果你有 AWR 的文本报告直接搜索 SQL ordered by Version Count 即可。如果需要用 SQL 查询可以用以下脚本-- 查询指定时间段内 Version Count 超过阈值的 SQL SELECT sql_id, version_count, executions, elapsed_time_per_exec, sql_text FROM dba_hist_sqlstat s, dba_hist_sqltext t WHERE s.sql_id t.sql_id AND s.snap_id BETWEEN begin_snap AND end_snap AND s.version_count 20 ORDER BY s.version_count DESC;这个脚本会列出 Version Count 大于 20 的 SQL按版本数降序排列。AWR 报告中 Version Count 20 的 SQL 会被标记为潜在问题如果看到数百甚至数千的版本数基本可以确定是 ACS 导致的子游标膨胀。接下来查看这些 SQL 的绑定变量信息-- 查看 SQL 的绑定变量捕获情况 SELECT sql_id, name, position, datatype_string, value_string, last_captured FROM dba_hist_sqlbind WHERE sql_id sql_id ORDER BY position;如果看到绑定变量名形如:SYS_B_X说明这是数据库自动生成的绑定变量通常是因为cursor_sharing被设置为 FORCE 或 SIMILAR。3.2 检查初始化参数-- 检查 cursor_sharing 及相关参数 SELECT name, value, isdefault FROM v$parameter WHERE name IN (cursor_sharing, optimizer_adaptive_cursor_sharing, optimizer_extended_cursor_sharing, optimizer_extended_cursor_sharing_rel, optimizer_use_feedback);重点关注cursor_sharing的值。如果返回 FORCE 或 SIMILAR而系统本身是 OLTP 类型这就是问题根源。建议使用默认值 EXACT。3.3 捕获并固定 SQL Plan Baseline找到问题 SQL 后需要为它固定一个稳定的执行计划。步骤如下第一步从 AWR 中找到该 SQL 在性能正常时段的执行计划-- 查询历史执行计划 SELECT plan_hash_value, child_number, executions, elapsed_time, cpu_time, buffer_gets FROM dba_hist_sqlstat WHERE sql_id sql_id AND snap_id BETWEEN begin_snap AND end_snap ORDER BY snap_id, plan_hash_value;第二步加载 SQL Plan Baseline-- 使用 DBMS_SPM 加载执行计划 DECLARE l_plans_loaded PLS_INTEGER; BEGIN l_plans_loaded : DBMS_SPM.load_plans_from_cursor_cache( sql_id sql_id, plan_hash_value good_plan_hash_value, fixed YES, enabled YES ); DBMS_OUTPUT.PUT_LINE(Plans loaded: || l_plans_loaded); END; /第三步验证 Baseline 是否生效-- 查看 SQL Plan Baseline SELECT sql_handle, plan_name, enabled, accepted, fixed, origin FROM dba_sql_plan_baselines WHERE sql_text LIKE %your_table%;第四步如果确认 Baseline 生效可以进一步调整cursor_sharing参数-- 修改 cursor_sharing 为 EXACT需要重启或动态生效 ALTER SYSTEM SET cursor_sharing EXACT SCOPE BOTH;注意修改cursor_sharing参数会影响整个实例建议在业务低峰期操作并提前在测试环境验证。3.4 用 TaoToken API 做 SQL 文本比对修复前后你可能需要对比 SQL 文本差异确认绑定变量替换是否正确。可以用 TaoToken 的 API 来做这件事import requests import json def compare_sql_text(sql_before, sql_after): url https://taotoken.net/api/v1/chat/completions headers { Content-Type: application/json, Authorization: Bearer sk-your-taoToken-key } prompt f请对比以下两段 SQL 文本指出差异点并判断是否等价 修复前 {sql_before} 修复后 {sql_after} 请从绑定变量、执行计划、索引使用三个角度分析。 payload { model: claude-sonnet-4-20250514, messages: [{role: user, content: prompt}] } response requests.post(url, headersheaders, jsonpayload) return response.json()[choices][0][message][content] # 示例调用 sql_before SELECT * FROM orders WHERE status :SYS_B_1 AND created_at :SYS_B_2 sql_after SELECT * FROM orders WHERE status :status AND created_at :created_at result compare_sql_text(sql_before, sql_after) print(result)这个脚本会调用模型分析两段 SQL 的差异帮你确认修复后的 SQL 是否使用了正确的绑定变量。4. 验证请求与成功结果从 AWR 到 SQL Plan 的完整回归配置完成后需要验证修复效果。这一节给出完整的验证流程和预期结果。4.1 验证 cursor_sharing 参数生效-- 确认参数已修改 SELECT name, value, isdefault FROM v$parameter WHERE name cursor_sharing;预期结果value返回EXACTisdefault返回TRUE。4.2 验证 Version Count 下降在业务运行一段时间后重新采集 AWR 快照查询 Version Count-- 查询修复后的 Version Count SELECT sql_id, version_count, executions, elapsed_time_per_exec FROM dba_hist_sqlstat WHERE sql_id sql_id AND snap_id BETWEEN begin_snap AND end_snap ORDER BY snap_id;预期结果Version Count 从数百/数千下降到个位数通常 1-5 之间elapsed_time_per_exec明显降低。4.3 验证等待事件消失-- 查询等待事件 SELECT event, total_waits, time_waited, average_wait FROM v$system_event WHERE event LIKE %cursor%pin% ORDER BY time_waited DESC;预期结果cursor: pin S wait on X的time_waited显著下降或者该等待事件不再出现在 Top 10 中。4.4 验证 SQL Plan Baseline 生效-- 确认执行计划已固定 SELECT sql_id, plan_hash_value, child_number, executions, elapsed_time FROM v$sql WHERE sql_id sql_id ORDER BY child_number;预期结果plan_hash_value与 Baseline 中固定的值一致child_number数量减少。4.5 用 TaoToken API 做回归验证在测试环境复现修复效果后可以用 TaoToken API 生成回归测试报告import requests def generate_regression_report(awr_before, awr_after): url https://taotoken.net/api/v1/chat/completions headers { Content-Type: application/json, Authorization: Bearer sk-your-taoToken-key } prompt f请根据以下 AWR 数据生成回归验证报告 修复前 AWR 关键指标 {awr_before} 修复后 AWR 关键指标 {awr_after} 请对比 Load Profile、等待事件、SQL Statistics 三个部分 给出修复效果评估和后续建议。 payload { model: claude-sonnet-4-20250514, messages: [{role: user, content: prompt}] } response requests.post(url, headersheaders, jsonpayload) return response.json()[choices][0][message][content] # 示例调用 awr_before Load Profile: Hard Parses/s: 120, Library Hit: 78% Top Wait: cursor: pin S wait on X (89%) Version Count 20: 15 SQL awr_after Load Profile: Hard Parses/s: 15, Library Hit: 96% Top Wait: db file sequential read (45%) Version Count 20: 0 SQL report generate_regression_report(awr_before, awr_after) print(report)预期结果模型会生成一份对比报告确认修复后硬解析下降、Library Hit 提升、Version Count 异常消失。4.6 成功结果汇总修复成功后你应该看到以下变化指标修复前修复后cursor_sharingFORCEEXACTVersion Count 20 的 SQL 数量150cursor: pin S wait on X 占比89% 5%Library Hit78%96%Hard Parses/s12015业务响应时间8s50ms如果这些指标都达到预期说明修复生效。接下来需要在生产环境灰度验证观察至少一个业务周期。5. 本篇常见错排查401、local proxy failed、reading choices 等报错处理在配置和验证过程中可能会遇到一些典型报错。这一节对照真实报错给出排查方法。5.1 401 Unauthorized报错信息{ error: { message: Invalid API key, type: invalid_request_error, code: 401 } }原因API Key 错误或未正确传入。排查步骤检查Authorization头是否格式正确确保是Bearer sk-xxx格式确认 Key 没有过期或被撤销如果用的是环境变量检查变量名是否正确。5.2 local proxy failed报错信息Error: local proxy failed: connection refused原因本地代理配置问题。排查步骤检查 Base URL 是否写成了https://taotoken.net/api不要多加路径确认网络环境可以正常访问该地址如果用了本地代理工具检查代理端口是否监听。5.3 reading choices 报错报错信息{ error: { message: reading choices, type: server_error } }原因API 返回格式异常通常是请求体格式错误。排查步骤检查messages数组格式是否正确确认model参数是支持的模型 ID检查Content-Type是否为application/json。5.4 OAuth 相关报错报错信息Error: OAuth token expired原因如果用的是 OAuth 方式接入token 可能过期。排查步骤重新生成 API Key如果用的是 Claude Code 的 OAuth 流程检查settings.json中的配置是否完整确认 Base URL、Key、Model ID 三件套都正确填写。5.5 SQL Plan Baseline 未生效报错信息ORA-38104: Columns referenced in the ON Clause cannot be updated原因Baseline 加载时参数错误。排查步骤确认plan_hash_value正确检查fixed参数是否设置为YES如果 Baseline 已存在先用DBMS_SPM.DROP_SQL_PLAN_BASELINE删除再重新加载。5.6 cursor_sharing 修改后未生效报错信息ORA-02095: specified initialization parameter cannot be modified原因cursor_sharing是静态参数不能动态修改。排查步骤使用SCOPESPFILE修改然后重启实例或者在 RAC 环境中逐个节点修改。5.7 TaoToken API 调用超时报错信息requests.exceptions.Timeout: HTTPSConnectionPool原因网络超时或请求体过大。排查步骤检查网络连通性减小请求体大小比如分段发送 SQL 文本增加超时时间设置。5.8 模型返回内容截断报错信息{ choices: [{ finish_reason: length, message: {content: ...} }] }原因输出 token 达到上限。排查步骤在请求中增加max_tokens参数或者把长文本拆分成多次请求。6. 语义一致 CTA从排障到验证的完整工具链排查 ACS 故障的核心思路是先通过 AWR 和等待事件定位问题方向再查 SQL Statistics 找到 Version Count 异常的 SQL然后检查cursor_sharing参数最后用 SQL Plan Baseline 固定执行计划。整个流程中TaoToken 的角色是辅助验证——帮你快速比对 SQL 文本、生成回归报告、解读 AWR 指标。如果你正在处理类似的数据库性能问题需要快速调用模型做 SQL 比对或报告分析可以先用 API Key 接入。访问https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content获取 Key然后参考接入文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content完成配置。如果你需要长期做数据库性能优化和 Agent 辅助排查可以考虑 Coding Plan把模型调用集成到日常运维流程中。地址是https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content。如果你想先验证模型输出质量可以直接在模型对话页面测试 SQL 比对效果https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content。最后提醒一点cursor_sharing参数不要随意改成 FORCE。OLTP 系统的铁律是——该用绑定变量的地方必须用绑定变量不该用的地方不要强行用。ACS 是双刃剑用好了能提升执行计划适应性用不好就是生产事故。排查时优先看 AWR 的 Version Count 和cursor: pin S wait on X等待事件这两个信号基本能定位问题。

相关新闻

AnyPS5设备能力远程调用:串流编码架构与参数调优实战

AnyPS5设备能力远程调用:串流编码架构与参数调优实战

1. 从“AnyPS5”这个标题说起:它到底想解决什么问题第一次看到“AnyPS5”这个标题,我脑子里蹦出来的第一个念头是:这大概率又是一个围绕“把某类资源变成随处可用”做文章的项目。名字里的“Any”是关键词,它暗示的是一种跨环境、…

2026/10/15 23:39:56 阅读更多 →
HBase SingleColumnValueFilter服务端过滤原理与实战

HBase SingleColumnValueFilter服务端过滤原理与实战

1. 项目概述:为什么SingleColumnValueFilter是HBase数据过滤的“精准手术刀”在HBase的实际生产环境中,我见过太多团队把scan操作当成“全表扫描应用层过滤”的懒人方案——结果是RegionServer内存飙升、RPC超时频发、下游服务被拖垮。直到某次为某高校实…

2026/10/15 23:39:56 阅读更多 →
AI文档转PPT实操:从PDF到可编辑PPT的完整链路

AI文档转PPT实操:从PDF到可编辑PPT的完整链路

前阵子公司季度汇报要用PPT,可手头只有一份几十页的项目PDF。我一开始也走老路:一段段复制粘贴,调字号,挪文本框,三个小时过去连三分之一都没完成,而且目录、层级、图表一换版本就全乱。后来我花了大概一天…

2026/10/15 23:39:56 阅读更多 →

最新新闻

OpenPose实战避坑指南:多人姿态估计与骨骼角度计算

OpenPose实战避坑指南:多人姿态估计与骨骼角度计算

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 5:28:35 阅读更多 →
两串电池被动均衡设计:MP2642GR-Z与STM32F302R8实践

两串电池被动均衡设计:MP2642GR-Z与STM32F302R8实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 5:28:35 阅读更多 →
双串电池主动均衡系统设计:从硬件电路到固件策略

双串电池主动均衡系统设计:从硬件电路到固件策略

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 5:28:35 阅读更多 →
雨课堂选择题结构化采集与教学题库构建实践

雨课堂选择题结构化采集与教学题库构建实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 5:28:35 阅读更多 →
PLC与变频器Modbus RTU通讯实战:S7-200 SMART控制多台TECO N310

PLC与变频器Modbus RTU通讯实战:S7-200 SMART控制多台TECO N310

做设备改造这几年,PLC 和变频器之间的通讯是绕不开的活。前段时间接了一个某生产线的小改造,要求用一台西门子 S7-200 SMART 同时控制三台东元 TECO N310 变频器,远程给定频率、启停,还要把每台电机的运行频率、电流和故障状态实时…

2026/10/16 5:28:35 阅读更多 →
两节串联电池均衡方案:硬件自动均衡芯片与MCU协同实现

两节串联电池均衡方案:硬件自动均衡芯片与MCU协同实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 5:27:35 阅读更多 →

日新闻

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 0:00:05 阅读更多 →
信号与系统频域分析作业解题指南

信号与系统频域分析作业解题指南

1. 作业背景与核心要求解析信号与系统作为电子信息类专业的核心基础课,其作业设计往往直接关联课程的核心知识框架。2026年春季第六次作业的布置,通常对应着课程进展到频域分析的关键阶段。根据常规教学进度推测,本次作业可能涉及以下核心内容…

2026/10/16 0:00:05 阅读更多 →
Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

1. 从一个"四不像"的练手项目说起如果你已经看完了Django的官方教程前几章,跟着敲完了投票应用,大概会有一种"我好像会了,又好像什么都不会"的割裂感。教程里每个知识点都是拆开的——这一章讲模型,下一章讲视…

2026/10/16 0:00:05 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →