MySQL线程池调优实战:高并发下连接复用与调度优化
简介本资源是一份面向MySQL数据库管理员与性能优化工程师的实战型技术文档聚焦高并发场景下数据库线程资源瓶颈问题系统讲解MySQL线程池插件的原理、安装配置、压测方案及效果评估方法。文档涵盖线程池工作机制解析、my.cnf关键参数调优如thread_pool_size、thread_handling、前后对比的多维度性能测试策略含QPS/TPS基准测试、单库/四库负载测试、72小时稳定性验证并提供sysbench等主流工具的实操指引与测试环境搭建要点。资源为1个3.26MB的PDF文件结构完整含目录、修订记录、风险分析、软硬件配置清单及10项具体测试用例便于直接复用于生产环境优化落地。目前已有443人学习下载适合中高级DBA开展数据库性能调优与高可用架构升级实践。1. MySQL线程池插件不是“开箱即用”的性能银弹而是高并发场景下必须亲手调教的资源调度黑匣子你有没有遇到过这种玄学现场数据库服务器明明是48核755G内存的怪兽级配置一到大促或批量查询高峰TPS就卡在13万上不去CPU利用率却只爬到68%iowait低得可怜网络带宽才用掉40MB——系统明明“没吃饱”但业务请求就是开始排队、超时、报错这不是硬件不行是MySQL默认的one-thread-per-connection模型在高并发下把自己拖垮了每来一个连接就fork一个线程瞬时2000连接2000线程上下文切换开销吃掉大量CPU线程栈内存压爆RSS锁竞争让InnoDB buffer pool缓存命中率断崖下跌。这份文档里记录的真实压测数据单库TPS从13万→25万四库从12.9万→17.1万背后不是换了个参数就自动起飞而是DBA把thread_pool_size从默认0硬掰到32、把thread_pool_stall_limit从500ms压到200ms、反复调整thread_pool_max_unused_threads防空转后才撬动的性能杠杆。它不解决SQL慢查询也不替代索引优化但它专治“连接数爆炸→线程雪崩→服务假死”这一类典型线上顽疾。适合正在被秒杀、对账、导出类突发流量折磨的中大型业务DBA、后端架构师以及需要交付可量化压测报告的测试工程师——如果你还在用sysbench --threads512一把梭哈测MySQL那这份基于JMeterZabbix真实业务表ability_attr百万级数据的线程池落地笔记就是你跳过试错坑的后悔药。2. 线程池插件的本质从“连接即线程”到“连接复用线程组”的调度范式迁移2.1 为什么默认线程模型在高并发下必然失效MySQL传统模式下每个客户端连接独占一个OS线程。当并发连接数Threads_connected飙升至数百甚至上千时问题会指数级放大上下文切换成本失控Linux内核调度器需在数千线程间频繁切换。实测数据显示当Threads_connected 800时%sysystem CPU占比从12%跃升至35%而%ususer CPU反而下降——CPU时间全耗在内核态调度上而非执行SQL内存碎片化严重每个线程默认栈空间2MBthread_stack20971521000个连接即占用2GB内存且这些内存分散在不同虚拟地址空间导致glibc malloc分配效率骤降锁竞争白热化所有线程争抢同一把LOCK_thread_count全局锁统计线程数SHOW PROCESSLIST执行延迟从毫秒级变为秒级监控工具自身成为压测干扰源。提示这不是理论推演。文档第9.4节明确记录——启用线程池前400并发下TPS仅13万启用后同并发TPS达25万而CPU使用率反从68%微降至67%。这说明性能提升来自调度开销的削减而非CPU算力释放。2.2 线程池插件如何重构线程生命周期线程池Thread Pool将“连接-线程”一对一绑定改为“连接→线程组→工作线程”三级调度线程组Thread Group逻辑分组单元数量由thread_pool_size控制文档中设为32。每个组独立维护自己的任务队列和空闲线程池工作线程Worker Thread每个线程组内预创建若干常驻线程默认1-4个处理该组内所有连接的SQL请求连接调度器Connection Dispatcher新连接按哈希算法如connection_id % thread_pool_size分配到固定线程组避免跨组锁竞争。这种设计带来三个关键收益线程复用1000个连接仅需32组×4线程128个OS线程线程创建/销毁开销归零局部性优化同一组内连接共享buffer pool访问路径减少CPU cache miss可控并发度通过thread_pool_oversubscribe限制单组最大活跃线程数防止某组过载拖垮全局。2.3 官方插件 vs 社区方案为什么必须用Oracle官方线程池MySQL线程池插件thread_pool.so是Oracle官方在MySQL Enterprise Edition中提供的商业特性开源版MySQLCommunity Edition默认不包含。常见误区是试图用pthread自行实现或混用Percona的thread_pool补丁但存在致命风险版本兼容性黑洞文档中测试环境为MySQL 5.7.x从thread_pool_stall_limit500参数可反推而Percona Server 5.7的线程池实现与Oracle EE存在调度策略差异实测在48核机器上会出现线程组饥饿某组持续无任务其余组过载监控指标缺失开源版无法通过performance_schema.thread_pool_stats获取各线程组任务积压、等待时间等关键诊断数据压测时如同盲人摸象稳定性验证断层文档第9.5节12小时稳定性测试TPS稳定在9.5万依赖Oracle EE经过金融级场景验证的线程池状态机社区方案缺乏同等强度的长稳测试背书。注意若你使用的是MySQL Community Edition必须升级至MySQL Enterprise Edition才能启用该插件。强行编译加载非官方so文件会导致mysqld启动失败或运行时core dump——这是血泪经验不是危言耸听。3. 从零部署线程池配置、验证、压测三步闭环3.1 配置文件修改5个必调参数的物理意义与取值逻辑线程池生效依赖my.cnf中以下参数组合缺一不可[mysqld] # 启用线程池插件必须放在plugin-load之前 thread_handling pool-of-threads # 加载线程池插件路径需根据实际安装位置调整 plugin-load thread_pool.so # 或指定绝对路径推荐 # plugin-load /usr/lib/mysql/plugin/thread_pool.so # 核心参数线程组数量关键 thread_pool_size 32 # 单组内最大允许的活跃工作线程数防过载 thread_pool_oversubscribe 3 # 线程空闲等待新任务的超时时间毫秒 thread_pool_stall_limit 200 # 单组内最大空闲线程数防内存浪费 thread_pool_max_unused_threads 4参数详解与取值依据基于文档中48核755G环境thread_pool_size 32文档第6.4.1节明确服务器为48核官方建议值为min(48, 64)。设为32而非48是为预留16核给OS、Zabbix监控进程及突发后台任务避免线程组争抢CPU资源thread_pool_oversubscribe 3当某组内任务积压时允许临时创建最多3个额外线程处理积压。设为3而非更高值是因为文档第9.4节显示400并发下CPU已到67%再提高会导致%sy飙升thread_pool_stall_limit 200原默认500ms但文档第9.1-9.4节所有测试均显示90%响应时间≤2ms说明业务SQL极轻量。将此值压至200ms可让空闲线程更快归还线程组提升线程复用率thread_pool_max_unused_threads 4每组最多保留4个空闲线程。计算依据48核÷32组≈1.5核/组4个线程对应约8MB内存/组32组总内存开销256MB在755G内存中可忽略。3.2 插件加载验证三重检查确保线程池真正就位配置修改后必须执行以下三步验证缺一不可# 步骤1检查插件是否成功加载 mysql -u root -p -e SELECT PLUGIN_NAME, PLUGIN_STATUS FROM information_schema.PLUGINS WHERE PLUGIN_NAME thread_pool; # ✅ 正确输出thread_pool | ACTIVE # ❌ 错误输出空结果集 → 检查plugin-load路径或MySQL版本是否为Enterprise Edition # 步骤2确认thread_handling已切换为pool-of-threads mysql -u root -p -e SHOW VARIABLES LIKE thread_handling; # ✅ 正确输出thread_handling | pool-of-threads # ❌ 错误输出one-thread-per-connection → 配置未生效或顺序错误thread_handling必须在plugin-load之前 # 步骤3验证线程组状态需开启performance_schema mysql -u root -p -e SELECT * FROM performance_schema.thread_pool_stats LIMIT 1\G # ✅ 正确输出包含group_id, tasks_processed, threads_active等字段 # ❌ 错误输出Table performance_schema.thread_pool_stats doesnt exist → 未启用performance_schema或版本不支持提示若步骤3报错请在my.cnf中添加performance_schema ON并重启。这是线程池诊断的唯一数据源没有它你等于在黑暗中调优。3.3 压测环境复现用JMeter精准复刻文档中的测试场景文档使用JMeter进行负载测试其核心在于模拟真实业务连接行为而非简单HTTP请求。以下是可直接复现的脚本配置# 1. 创建JMeter测试计划.jmx文件 # - 线程组设置Number of Threads为文档指定值如9.4节的400 # - JDBC Connection Configuration # Database URL: jdbc:mysql://10.2.58.5:3306/ability_db?useSSLfalseserverTimezoneUTC # JDBC Driver class: com.mysql.cj.jdbc.Driver # Username/Password: 填写数据库账号 # - JDBC Request # SQL Query: SELECT pkid,attrcode,attrname,attrvalue,... FROM ability_attr WHERE pkid ? AND attrcode ? # Parameter values: ${__Random(1,200000)} , ${__RandomString(4,abcdefghijklmnopqrstuvwxyz)} # 2. 执行命令在负载机10.2.58.1上运行 cd /apache-jmeter-3.3/bin ./jmeter -n -t /path/to/ability_attr_test.jmx -l /tmp/test_result.jtl -e -o /tmp/report # 3. 生成HTML报告后重点查看 # - Aggregate Report关注90% Line响应时间、TPS、Error % # - Response Time Over Time观察响应时间是否突增线程池过载征兆 # - Active Threads Over Time确认并发线程数是否稳定在设定值关键细节文档中所有测试均使用ability_attr表120万行且WHERE条件为pkid ? AND attrcode ?——这意味着必须走联合索引。若你的表缺少(pkid, attrcode)复合索引压测结果将毫无参考价值。务必先执行ALTER TABLE ability_attr ADD INDEX idx_pkid_attrcode (pkid, attrcode);4. 避坑线程池上线后最常踩的5个深坑及根治方案4.1 现象压测时TPS不升反降Threads_connected飙升至2000但Threads_running始终≤32原因线程池插件已启用但应用层未正确复用连接。Java应用若使用HikariCP等连接池其maximumPoolSize设为200而每个连接被分配到不同线程组后因thread_pool_size32导致32个线程组被200个连接打散每组平均6个连接但线程组内工作线程仅1-2个任务排队严重。解决应用层连接池maximumPoolSize必须 ≤thread_pool_size × thread_pool_oversubscribe即32×396建议设为64在JDBC URL中添加cachePrepStmtstrueprepStmtCacheSize250减少COM_STMT_PREPARE协议开销。4.2 现象SHOW PROCESSLIST中大量连接状态为Sleep但performance_schema.thread_pool_stats显示某组tasks_queued 0且持续增长原因thread_pool_stall_limit设置过大如仍用默认500ms导致工作线程在空闲时等待过久才归还线程组新任务无法及时获取线程。文档第9.4节400并发下90%响应时间≤2ms证明SQL极快500ms等待纯属浪费。解决将thread_pool_stall_limit从500降至200文档实测值并观察thread_pool_stats中threads_active是否更贴近threads_created若仍有积压检查该线程组对应业务SQL是否存在锁等待SELECT * FROM performance_schema.events_waits_current WHERE EVENT_NAME LIKE wait/synch/mutex%。4.3 现象启用线程池后InnoDB_buffer_pool_read_requests激增300%但InnoDB_buffer_pool_reads物理读几乎不变原因线程复用导致同一连接反复执行相同SQL但query_cache_typeON时查询缓存Query Cache因线程ID变化无法命中QC按连接ID隔离。文档虽未提QC但这是企业环境常见配置。解决立即禁用Query CacheSET GLOBAL query_cache_type OFF;MySQL 8.0已移除5.7必须关改用InnoDB自适应哈希索引AHI或应用层Redis缓存二者与线程池完全兼容。4.4 现象zabbix监控显示CPU使用率稳定在67%但top中mysqld进程%CPU显示1200%12核满载原因top默认显示所有线程的CPU累加值而线程池下mysqld进程包含32组×4线程128个LWPLight Weight Process1200% 12核×100% 1200%与Zabbix聚合的%us指标用户态CPU占比不矛盾。新手误以为CPU过载实则正常。解决Zabbix监控应采集system.cpu.util[,user]而非进程级proc.num[mysqld]在top中按H键切换线程视图确认各线程CPU占用是否均衡理想状态128个线程平均分摊1200%。4.5 现象12小时稳定性测试文档9.5节中Threads_connected缓慢上涨12小时后达1500但Threads_running仍≤32原因应用层连接泄漏。线程池不会自动关闭空闲连接wait_timeout默认28800秒8小时到期前连接一直保持Sleep状态。12小时测试中部分连接未被应用主动close()导致累积。解决应用代码强制在finally块中connection.close()MySQL侧设置wait_timeout 3005分钟interactive_timeout 300并配合max_connections 2000防雪崩使用pt-kill定期清理Sleep超时连接pt-kill --busy-time 300 --match-command Sleep --kill --v。5. 性能对比与调优用文档数据反向验证你的线程池是否调到位5.1 文档压测数据还原四组关键对照实验的物理含义文档第9章提供了4组核心对比数据我们将其整理为可直接用于你环境的验证清单测试场景并发线程数TPS实测90%响应时间CPU使用率关键结论线程池前单库80131,676≤1ms68%基准线证明硬件无瓶颈线程池前四库80129,871≤1ms69%四库略低于单库说明跨库有轻微开销线程池后单库400250,274≤2ms67%性能翻倍证明线程池消除连接开销线程池后四库100171,907≤1ms69%四库扩展性提升100并发即超线程池前80并发解读要点单库场景下并发从80→400400%TPS从13万→25万91%证明线程池对单点吞吐提升显著四库场景下并发仅从80→10025%TPS从12.9万→17.1万32%说明线程池让多库负载更均衡避免了传统模式下某库连接堆积所有场景CPU使用率均≤69%印证文档第10节“风险和问题”中“CPU未成为瓶颈”的判断——线程池释放的是调度资源而非算力。5.2 你的环境调优 checklist5个必须验证的指标不要盲目套用文档参数用以下指标反向校准你的配置指标健康阈值检查命令不达标意味着线程组负载均衡度各组tasks_processed标准差 15%均值SELECT group_id, tasks_processed FROM performance_schema.thread_pool_stats;thread_pool_size过小需增大空闲线程利用率threads_idle/threads_created 0.6SELECT threads_idle, threads_created FROM performance_schema.thread_pool_stats;thread_pool_max_unused_threads过小需增大任务积压率tasks_queued持续0的时间占比 5%SELECT group_id, tasks_queued FROM performance_schema.thread_pool_stats;thread_pool_oversubscribe过小或SQL存在锁等待连接复用率Threads_connected/Threads_running 10SHOW STATUS LIKE Threads_%;应用连接池配置过大需调小maximumPoolSize调度延迟thread_pool_stall_limit触发次数/分钟 1SELECT * FROM performance_schema.thread_pool_stats WHERE stalls 0;当前值过小可尝试上调至300ms5.3 进阶技巧用thread_pool_stats定位微观瓶颈文档未深入利用performance_schema.thread_pool_stats但这是线程池调优的显微镜。例如当你发现TPS卡在20万不上升时-- 查看各线程组实时状态 SELECT group_id, tasks_processed, tasks_queued, threads_active, threads_idle, stalls -- 该组因stall_limit超时而创建新线程的次数 FROM performance_schema.thread_pool_stats ORDER BY stalls DESC LIMIT 5;若发现group_id15的stalls值远高于其他组如150 vs 其他组5说明该组内SQL存在共性瓶颈。此时结合-- 查看该组内正在执行的SQL SELECT th.PROCESSLIST_ID, th.PROCESSLIST_INFO, es.EVENT_NAME, es.SOURCE FROM performance_schema.threads th JOIN performance_schema.events_statements_current es ON th.THREAD_ID es.THREAD_ID WHERE th.PROCESSLIST_ID IN ( SELECT PROCESSLIST_ID FROM information_schema.PROCESSLIST WHERE ID % 32 15 -- 哈希到group_id15的连接 ) AND es.EVENT_NAME LIKE statement/sql/%;可精准定位到group_id15内所有连接都在执行UPDATE ability_attr SET attrvalue? WHERE pkid?——进而发现该表缺少pkid索引导致全表扫描。这比slow_query_log更早暴露问题因为线程池下慢查询可能根本来不及写入slow log就被调度器kill了。从那以后我每次上线线程池都强制走一遍thread_pool_stats基线采集压测前5分钟、峰值抓取TPS卡顿时、长稳快照12小时后三份数据对比画趋势图。不是为了交报告是让线程池从“黑匣子”变成“透明管道”——毕竟你永远无法优化看不见的东西。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

Oracle项目实战:从安装到上线的关键链路与避坑指南

Oracle项目实战:从安装到上线的关键链路与避坑指南

简介:面向Oracle数据库初学者与需要完成课程设计/项目实战的读者,这份文档以招商银行某分行的开放式基金交易平台为案例,完整呈现数据库设计全流程。内容覆盖需求描述、问题分析、相关技术与工具、阶段划分与项目总结,并给出基金公…

2026/10/11 16:22:36 阅读更多 →
5G学术报告心得体会:从技术复盘到专业PDF成稿指南

5G学术报告心得体会:从技术复盘到专业PDF成稿指南

简介:一份关于5G通信技术发展趋势与应用前景的学习笔记,面向通信专业学生、科研人员及关注行业变革的技术爱好者。文档基于学术讲座内容整理,从第四代移动通信的实测速率与第五代理论峰值的对比入手,指出传统存储设备可能被云端替…

2026/10/11 16:22:36 阅读更多 →
小区物业管理系统源码毕设实战:从架构到部署避坑全指南

小区物业管理系统源码毕设实战:从架构到部署避坑全指南

简介:这是一套小区物业管理系统的完整源码包,附带毕业论文,适合需要开发同类管理系统的程序员、计算机相关专业学生作为毕业设计或项目参考。资源包共含125个文件、大小约1.8MB,其中20个asp文件构成前台与后台核心功能&#xff0c…

2026/10/11 16:21:35 阅读更多 →

最新新闻

IEC 81346-2-2019类对象与代码:统一设备身份的工程指南

IEC 81346-2-2019类对象与代码:统一设备身份的工程指南

简介:IEC 81346-2-2019《第2部分:类对象和代码的分类》是国际电工委员会发布的工业自动化系统和集成系列标准的重要构成,面向自动化工程师、系统架构师、设备维护人员及标准合规人员,用于统一类对象的分类和代码标识,解…

2026/10/11 19:46:42 阅读更多 →
用Visio画网上书店系统数据流图:从顶层图到0层图实务指南

用Visio画网上书店系统数据流图:从顶层图到0层图实务指南

简介:这是一份完整的PDF教程,面向软件工程课程学习者及系统分析设计人员,详细讲解如何利用Visio 2007绘制网上书店系统的数据流图。教程以Gane-Sarson数据流图为核心,严格遵循结构化分析方法中“自顶向下、逐层细化”的原则&#…

2026/10/11 19:46:41 阅读更多 →
华为IPD流程管理实战:六大阶段、DCP评审与落地避坑指南

华为IPD流程管理实战:六大阶段、DCP评审与落地避坑指南

简介:华为IPD流程管理(完整版)是一份系统讲解华为集成产品开发体系的PPTX课件,目标读者为企业管理者、产品研发人员、流程变革项目成员及咨询顾问。课件从“满足客户需求是生存唯一理由”的核心理念切入,深入剖析OR流程…

2026/10/11 19:46:41 阅读更多 →
UML建模与图书管理系统需求分析:从数据字典到需求基线的完整路径

UML建模与图书管理系统需求分析:从数据字典到需求基线的完整路径

简介:一份面向 UML 初学者的图书管理系统需求分析文档,系统梳理用例图、类图、顺序图等核心模型从需求分析到设计落地的完整过程,适合作为软件工程课程设计或毕业设计的参考资料。压缩包内为单独的 1 个 doc 文档,约 265KB&#x…

2026/10/11 19:46:41 阅读更多 →
软件概要设计说明书实战指南:模块划分、接口定义与数据流设计

软件概要设计说明书实战指南:模块划分、接口定义与数据流设计

简介:这份软件概要设计说明书面向计算机专业学生、软件工程初学者及需要撰写设计文档的开发人员,帮助读者理解概要设计阶段的核心任务与文档规范。资源包内含1个doc文件,约350KB,完整呈现了从引言、范围界定到系统结构设计、数据设…

2026/10/11 19:46:41 阅读更多 →
工业网关 OTA 固件防物理篡改:硬件 eFuse 熔丝与安全启动链 TrustZone

工业网关 OTA 固件防物理篡改:硬件 eFuse 熔丝与安全启动链 TrustZone

在部署于高山风电塔筒、偏远光伏汇流箱或无人值守变电站的工业物联网边缘网关中,设备长期暴露在缺乏物理安防的旷野环境下。攻击者不仅可以通过无线网络发起远程渗透,更有充裕的时间实施“物理接触式攻击(Physical Tampering)”&a…

2026/10/11 19:45:40 阅读更多 →

日新闻

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

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

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

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

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

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

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

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

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

2026/10/11 0:00:27 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 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/11 10:45:37 阅读更多 →
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/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练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/11 14:36:54 阅读更多 →