gpt4 book ai didi

postgresql - Rails 查询在 pgAdmin 中速度慢但速度快

转载 作者:行者123 更新时间:2023-11-29 11:20:00 25 4
gpt4 key购买 nike

我想弄清楚为什么我的 Rails 应用程序中的一个查询执行得相当差。我正在使用 Postgres 9.3 和 rails 4.0.3 以及 jRuby 1.7.10,所以这可能是 JDBC 驱动程序的问题?

但基本上,这是一个非常简单的查询:

SELECT * FROM table;

该表包含 851 行,因此它算不上是一个庞大的数据集,所以我期待一个快速查询。当我在 pgAdmin 3 中执行这个查询时,我得到了我所期望的结果:所有行在 15 到 35 毫秒之间的任何时间返回。又好又快!

然而,从 Rails 来看,情况就不同了。在 Rails 控制台中运行查询,我能达到的最快速度是 189ms,而通常它在 200ms 标记附近。此查询通过调用 Table.all

运行

我最初的想法只是 ActiveRecord 在 851 个对象的实例化过程中增加了开销,所以这显然会减慢它的速度。为了测试这个,我跑了

ActiveRecord::Base.connection.execute("SELECT * FROM table")

有轻微的加速,但同样,几乎所有查询都在 150 毫秒 左右,与 pgAdmin 标记还有很长的路要走。作为最后一次尝试,我尝试了

ActiveRecord::Base.connection.exec_query_raw("SELECT * FROM table")

但这根本没有提高性能。

鉴于我看到 pgAdmin 和 Rails 之间的性能下降了 10 倍,我现在真的很困惑为什么这会慢得多。在 Rails 中只执行了原始 SQL,我知道不是 ActiveRecord 减慢了速度,所以我现在真的很困惑到底是什么。

有谁知道为什么这比应该的慢得多?

更新

我做了更多的挖掘,这似乎是 Rails 处理日期字段的方式。如果我手动选择表中的所有列,速度同样慢,但如果我选择除 updated_atcreated_at 之外的所有列,查询将在大约 2 -4ms 完美!

我现在唯一的问题是如何解决这个问题。有没有办法解决 Rails 的日期性能问题,或者让 Rails 不将它们解析为日期并将它们保存为字符串或类似的?

更新 2

所以在做了更多挖掘和@stonehz 指出我从这篇文章中提出的错误之后,我已经升级到 Jruby 1.7.12rails 4.1.0并注意到相当大的速度。它与 pgAdmin 的性能相差无几,但我认为如果不完全删除日期列,我不会得到更好的结果。下面是我现在得到的基准

SELECT *:                        4.080000   0.330000   4.410000 (  5.243000)
SELECT date_fields: 1.960000 0.020000 1.980000 ( 2.032000)
SELECT * - date_fields: 3.070000 0.070000 3.140000 ( 3.247000)
--------------------------------------------------------- total: 9.530000sec

user system total real
SELECT *: 3.700000 0.060000 3.760000 ( 4.663000)
SELECT date_fields: 1.790000 0.020000 1.810000 ( 2.021000)
SELECT * - date_fields: 2.330000 0.060000 2.390000 ( 3.180000)

此基准查询了 851 行。第一个测试是一个简单的 SELECT * 语句。第二次测试只选择日期字段,最后一次测试选择日期字段除外的所有字段。每个查询运行 100 次以获得最终结果。

如图所示,select * 语句现在运行 100 次仅需约 4 秒,因此每个查询仅需 40ms,这更接近于pgAdmin 时间约为 30 毫秒。好多了!

最佳答案

他们已经解决了这个问题,并围绕您发现的错误开了几张票:

https://github.com/jruby/jruby/issues/1662

https://github.com/jruby/activerecord-jdbc-adapter/issues/540

使用 Jruby 1.7.12 将提高 5 倍左右的性能(正如他们的基准所暗示的那样)

关于postgresql - Rails 查询在 pgAdmin 中速度慢但速度快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22100728/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com