PostgreSQL 哈希分区性能优化:绕过目录查找的 20 倍提速

2025-08-27
PostgreSQL 哈希分区性能优化:绕过目录查找的 20 倍提速

PostgreSQL 的哈希分区在高吞吐量应用中存在目录查找开销。本文介绍了一种通过在应用层预计算分区索引,从而绕过 PostgreSQL 目录查找的优化方法。使用 Ruby gem `pg_hash_func` 或直接调用 PostgreSQL 的哈希函数,可以将查询速度提升 20 倍以上,显著降低延迟。这种方法适用于对性能要求极高的场景,在权衡简单性和性能之间提供了更多选择。

阅读更多
开发 哈希分区

AI 辅助编程:利器还是陷阱?

2025-06-17
AI 辅助编程:利器还是陷阱?

AI 编程助手越来越强大,其生成的代码简洁高效,但同时也带来“过早闭包”的风险:开发者容易被看似完美的解决方案迷惑,忽略更深层次的问题。文章以医学案例作类比,指出AI 就像经验丰富的医生,可能因经验而忽略罕见疾病。作者建议开发者应批判性地看待 AI 的建议,主动探索多种方案,避免陷入“快速修复”的陷阱,才能提升代码质量,避免技术债务积累。

阅读更多
开发

PostgreSQL CTE 与 DELETE ... RETURNING 和 LIMIT 的意外行为

2025-05-04
PostgreSQL CTE 与 DELETE ... RETURNING 和 LIMIT 的意外行为

作者在使用PostgreSQL的Common Table Expression (CTE)结合DELETE ... RETURNING和LIMIT处理队列式表中的批量项目时,发现了意外行为。预期只删除一行,但实际却删除了多行。通过EXPLAIN ANALYZE分析,发现查询计划使用了嵌套循环半连接,导致LIMIT 1被多次执行。解决方法是将CTE中的子查询直接嵌入DELETE语句的WHERE子句中,避免查询计划的优化策略导致意外行为。这提醒我们,CTE并非总是优化屏障,在关键操作中应仔细检查查询计划。

阅读更多
开发

PostgreSQL 的同步提交:性能与持久性之间的权衡

2025-03-19
PostgreSQL 的同步提交:性能与持久性之间的权衡

本文探讨了 PostgreSQL 数据库中 `synchronous_commit` 设置的性能影响。关闭该设置可显著提升事务吞吐量,减少 I/O 和 CPU 负载,但代价是引入数据丢失的风险窗口。作者通过测试,在 I/O 受限系统上实现了 30% 的 TPS 提升。文章建议根据实际需求,选择合适的 `synchronous_commit` 设置,例如针对不同会话、事务或操作进行调整,并在 Ruby on Rails 应用中提供了示例代码。作者还指出,在 Aurora PostgreSQL 上,将 `synchronous_commit` 设置为 `off` 可获得最大性能提升。

阅读更多
开发 同步提交

PostgreSQL 高并发下的诡异问题及解决方案

2025-02-09
PostgreSQL 高并发下的诡异问题及解决方案

本文总结了高增长初创公司在使用 PostgreSQL 数据库时遇到的常见问题,例如锁竞争、索引膨胀、TOAST 存储等。作者针对每个问题提出了多种解决方案,包括调整数据库参数、使用并发工具、优化数据访问模式等。文章还讨论了垂直和水平扩展、追加式表与更新密集型表、DDL 变更、版本升级以及多租户等高级主题,并提供了相应的解决方案和注意事项。 通过本文,读者可以学习到如何有效地解决 PostgreSQL 在高并发场景下的性能瓶颈,并提升数据库的可扩展性。

阅读更多
开发

数据库模拟测试:弊大于利?

2024-12-30
数据库模拟测试:弊大于利?

使用模拟数据库进行测试虽然快速便捷,但作者认为其弊大于利。文章以创建用户为例,对比了模拟数据库和真实数据库测试方法。真实数据库测试能够及早发现潜在问题,例如唯一约束冲突、默认值处理和性能瓶颈等,从而节省调试时间,降低生产环境风险。此外,随着应用发展和数据库模式变更,真实数据库测试能更好地应对新验证、数据类型修改和时间戳精度变化等问题,确保代码与实际数据库模式一致。文章建议,对于数据访问层,真实数据库测试至关重要;而对于服务层,真实数据库测试能揭示业务逻辑与数据的交互方式;控制器层则可以模拟服务调用。平衡真实数据库测试和模拟测试,才能构建更可靠的应用。

阅读更多