使 Postgres 查询速度提高 1,000 倍

Mattermost 在大型部署中使用 Elasticsearch 来减少数据库在运行搜索查询时承受的压力,同时返回更好的、经过微调的结果。为了实现这一点,Elasticsearch 需要索引我们要搜索的所有数据,以便在请求时可以快速检索数据。一旦数据被索引,一切都会按预期运行,我们的用户会很高兴,我们的开发人员也会很高兴,生活会很美好。 但是,我最近测试了很久没尝试过的事情:从头开始索引一个相当大的数据库(包含 1 亿条帖子)。当数据库已经建立索引后,后续对新帖子和文件的索引速度会非常快,因此 Elasticsearch 的正常使用是没有问题的,但从头开始索引速度很慢: 这张截图是我们的作业系统,它告诉我们 Elasticsearch 索引作业已经运行了大约 18 个小时,但还未完成一半的任务 🙁 并且进度不是线性的,越往后进度越慢!这里显然出了问题。 让我们先来调查一下这里到底是什么地方速度慢,因为有很多活动部件:可能是数据库、Mattermost 服务器、Elasticsearch 服务器、网络或资源不足的机器。 看看我们的 Mattermost 性能监控 Grafana 仪表板 当索引作业正在运行时,问题一目了然: 上图按持续时间显示了前 10 个数据库调用,这些调用可归结为(稍微简化)以下 Prometheus 查询: topk(10, sum(increase(mattermost_db_store_time_sum[5m])) by (method) / sum(increase(mattermost_db_store_time_count[5m])) by (method) ) 我们测量每个数据库方法完成所需的时间,取过去 5 分钟的平均值,并按秒绘制图表,仅显示前 10 种方法。 从图表上看,有一个明显的异常值: PostStore.GetPostsBatchForIndexing随着索引作业的进行,它花费的时间越来越多,最终达到 30 秒,然后超时。 查看代码,我们看到了导致所有这些问题的确切查询: SELECT Posts.*, Channels.TeamId FROM Posts […]

事务性无服务器计算:PostgreSQL Creator 宣布推出 DBOS 云

DBOS 的创建者最近 推出DBOS云,一个为 TypeScript 开发人员量身定制的事务性无服务器应用程序平台。 由于所有状态信息都存储在高度可用的 DBMS 中,这个新平台可确保事务性无服务器计算,提供可靠的执行以及所谓的“时间旅行”功能。 被誉为“世界上第一个云原生操作系统”和“Kubernetes的数据库替代品”, 数据库操作系统 (面向数据库的操作系统)以 SQL 实现操作系统服务,在高性能分布式、事务性、分区容错数据库之上运行。 迈克尔·斯通布雷克计算机科学家、图灵奖获得者写道: DBOS(面向数据库的操作系统)的想法源于 3 年前,当时我意识到操作系统必须维护的状态(文件、进程、线程、消息等)自我开始以来已增加了大约 6 个数量级1973 年在 PDP-11/40 上使用 Unix。因此,存储操作系统状态是一个数据库问题。 此外,Linux 目前还是遗留代码,很难取得进展。 例如,Linux 没有多节点版本,需要人们运行 Kubernetes 等编排器。 据作者介绍,DBOS Cloud 会自动记录应用程序执行的每个步骤以及在数据库中所做的每个更改。 DBOS Cloud 的两个显着特征是可靠执行和时间旅行:如果 DBOS 程序上运行的代码发生中断,它会自动从中断点恢复,而无需重新执行任何先前完成的工作。 斯通布雷克补充道: 自己提供这样的保证需要数月的工作,但在 DBOS 中,它们内置于每个程序中 (…) 您可以逐步执行过去的执行以重现罕见的错误,甚至根据历史状态运行新代码。 此外,“时间旅行调试器”使开发人员能够在笔记本电脑上本地重放任何 DBOS Cloud 跟踪、观察过去的应用程序状态并测试代码更改。 未来,该团队计划发布用于灾难恢复的时间旅行功能,使开发人员能够将应用程序及其数据回滚到之前的任何状态。 Jeremy Daly,Ampt 首席执行官兼创始人, 评论: 让这个超级有趣的是,该项目是由 Mike Stonebraker […]