准备把 PostgreSQL 报表迁到 CstoneCloud,看到执行计划已经出现仅索引扫描,却仍有大量表数据访问,这时直接购买更贵的磁盘,可能把索引维护问题变成长期账单。覆盖查询所需字段,只解决了取值位置;数据库还必须确认这些行对当前事务是否可见。采购前应先保存真实查询的执行计划、更新节奏和清理记录,判断慢在读什么,再决定该买更好的存储、增加内存,还是先改变索引与维护安排。
CstoneCloud 当前官网列有香港云服务器及香港、美国、日本独立服务器等产品组,独立服务器介绍提供配置定制和先测试后开通的咨询方向。这些属于商家公开介绍,不能据此认定任何具体订单拥有独享磁盘性能、数据库托管或者固定的持续读写能力。本文未取得对应订单的磁盘型号、读写限额、续费价和退款条件,也没有进行商家机器实测。数据库采用自建部署的讨论前提,运维责任应在报价时另行确认。
推广链接来自2026年10月30日保存的渠道通网站17接口采集快照。本轮渠道通实时接口与跟踪跳转请求超时,未确认链接当前跳转结果;官网本轮能够读取,但主页宣传不能替代具体订单。不把历史链接当作实时价格或库存证明,也不把网络线路宣传当作存储性能证据。有数据库部署需求的读者,可以通过CstoneCloud服务器配置咨询入口(推广链接)核对订单,未获得书面资源边界前不宜直接年付。
PostgreSQL 的普通索引与表数据分开保存。普通索引扫描找到候选行位置后,通常还需要访问表数据。仅索引扫描允许直接从索引取得查询要求的值,但必须满足索引类型支持、查询所需列能够从索引取得等条件。B树支持这种扫描;不能把这项能力推到所有索引类型上。
即使满足取值条件,事务可见性信息仍不直接保存在普通索引条目中。数据库检查相应表页面的可见性映射:如果该页面被标记为所有行均可见,就能省掉访问表的步骤;如果没有这个标记,仍需查看表中的行。因此,计划名称出现 Index Only Scan,不等于执行期间一定没有表访问。这也是覆盖索引建好了,随机读取和响应时间却没有按预期下降的一种机制解释。

这条解释适合验证,不适合隔空下结论。高更新频率、维护尚未追上变化,都可能让更多页面无法利用全可见标记;但查询实际读取了多少表数据,仍要看该次执行。不要只截计划第一行,也不要把返回行数与访问页面数视为同一个指标。命中缓存的表访问与需要底层读取的表访问,成本也可能不同。
安排一次对照时,保留查询条件、数据规模、并发水平、缓存状态和运行时段。记录仅索引扫描节点里的 Heap Fetches,同时保存缓冲区命中、读取、实际时间与循环次数。不要把多个节点的统计直接相加当作独立页面数;官方说明缓冲区数值统计的是非去重访问,而且父节点包含子节点。采购验收可要求提供完整计划文件,而不是只展示某一个耗时截图。
普通 VACUUM 的职责包括回收旧行版本占用以便复用、更新可见性映射,以及其他日常维护。VACUUM FULL 会采用不同的重写和锁定方式,不能为了争取仅索引扫描随手在生产表上执行。普通清理本身也产生读写压力,维护窗口应与生产业务一起预算。
可操作的对照是先在测试副本记录原始计划,再在合适条件下进行普通清理,复跑同一查询,并观察下一轮正常写入后的表现。只有一次清理后变快,而正常更新恢复后又变慢,说明收益无法单靠购买套餐固定下来。此时应讨论业务写入频率、表的使用方式和维护是否追得上,而不能把刚清理完的最好结果写成持续服务能力。
举一个编辑构造的验收读数例子:同样查询的表访问次数从80000降到4000,下降95%。这个比例仅说明该指标减少,不等于总耗时降低95%,更不是 CstoneCloud 的测试成绩。耗时还包括索引查找、可见性检查、运算、其他节点、并发争用和结果传输。如果返回结果本身很大,即使减少底层表访问,端到端响应仍可能主要花在传输与客户端处理上。
执行计划收集也有成本。EXPLAIN ANALYZE 会真正执行被分析语句,修改语句的副作用也照常发生。这里建议先对只读查询和脱敏测试副本做对照;不要为了选购证明而在生产环境任意运行大扫描、清理或写入计划。由数据库负责人确定许可、时间段和退出条件,并把测试产生的存储与流量计入试用预算。
INCLUDE 可以把查询需要返回的列作为载荷放入索引,但这些列不因此变成搜索键。若唯一索引只以某个标识列作为键,额外包含的展示字段也不参与唯一性判断。若查询真正需要按另一列缩小扫描范围,仅把它放进 INCLUDE 并不能自动获得相同的定位能力,应先验证实际搜索条件和索引键设计。
包含列会复制表内的数据,占据更多索引空间。官方也提醒应谨慎纳入宽列,过大的索引元组甚至可能造成插入失败。因此不要把完整描述、长文本和大量很少读取的展示字段一起塞进索引。一个报表省下的读取,应当与所有写入持续承担的维护代价比较;采购时也要看索引增长后能否留下备份和维护余量。

容量可以先做明确的下限估算。假设有2000万行,每行额外包含64字节净载荷,仅复制的数据就是1280000000字节,约1.19GiB。这个算例不包含索引元组头、对齐、页面空闲、维护空间及其他索引,也没有使用商家套餐参数,实际索引可能更大。用真实测试库测量索引体积增量,再将峰值维护空间加入订单预算,比把1.19GiB直接当最终需求可靠。
完整成本还包括试用费、迁移副本、备份保留、持续维护和退出迁移时间。报价中若只给磁盘总容量,需再问系统盘与数据盘是否共享配额、快照是否占同一余额、能否单独扩盘、扩盘是否要求停机,以及续费是否改变价格。本文没有核实这些条款,不能代商家承诺。对于共享存储的方案,还要问持续读写限制与突发额度的恢复规则,避免短测试恰好测到暂时的高值。
历史订单查询、较少改变的归档数据和稳定展示字段,适合评估覆盖索引能否减少表访问。高频更新的状态表、持续写入的队列表、需要返回大量宽字段的报表,则应先证明额外索引收益足以抵消空间和写入负担。上述判断是工作负载分类,并不是对任何商家套餐的性能评级。若普通维护后表访问已很少,仍存在稳定的底层读取等待,才更有理由安排不同存储规格的对照。
给 CstoneCloud 的询价可明确为同一地区、同一容量口径下的两档候选资源,请商家确认CPU是否共享、磁盘持续性能是否限额、测试权限与时长、是否允许只读数据库压测,以及到期续费与退出规则。如果官网所述先测试后开通不适用于目标订单,应让销售明确说明,不把主页介绍推断为所有产品的免费试用或退款承诺。
团队内部则预先写下可接受的报表完成时间、正常写入下的尾部延迟、维护期间的可接受退化,以及备份恢复时间。两档资源应使用相同数据副本和维护状态,保留完整计划及系统读写记录。若更高配置只能改善第一次冷读取,日常报告周期却没有获益,额外月费就缺少业务依据;若正常清理持续落后并已挤占生产窗口,采购应连同维护能力调整,而不能只追逐单次查询速度。
下单前最后确认三个责任人:谁有权改变索引和维护安排,谁保存验收原始记录,谁批准不达标后的退出或迁移。把磁盘预算、数据库维护与合同退出放到同一份订单说明中,才能让“查询变快”成为可复查的交付条件。
精彩推荐
用户评论