如何从 PgSQL DB 获取时间
How to get timing from the PgSQL DB
我正在尝试使用 pg gem 获取查询的时间。我看到了文档,但没有找到任何东西。我想知道是否有类似 query.time
的东西。
我在 ~/.psqlrc
中添加了 \timing
,因此该命令默认处于活动状态。如果我在 Postgres 控制台中编写查询,时间是活动的。
这是代码:
conn = PGconn.open(:dbname => 'my_db')
query=conn.exec('SELECT * from some_table')
puts query.num_tuples -> this work
puts query.time -> undefined method
我需要测量 Postgres 本身的时间,我不能使用 Ruby 的时间 class。
尝试一下 return 时光倒流。
puts conn.exec("EXPLAIN ANALYZE SELECT * FROM some_table").values
虽然 PGconn.open(:dbname => 'my_db')
和 conn.exec
似乎有效,但它没有正确报告执行时间。我怀疑它报告了查询以外的其他内容的执行时间。可能是EXPLAIN的执行时间。
虽然问题没有指定 Rails,但我怀疑使用 PGconn
而不使用 Rails 也会有同样的问题。
PGconn.open(:dbname => 'my_db')
总是报告执行时间在 0.010 到 0.285 毫秒之间。我的查询的正确执行时间约为 15,000 毫秒。
要获得正确的执行时间,请使用:
ActiveRecord::Base.connection.execute("EXPLAIN ANALYZE ...").values.last.first
提取数值:
ActiveRecord::Base.connection.execute("EXPLAIN ANALYZE ...").values.last.first.scan( /\d+.\d+/ ).first
就OP而言,
conn = ActiveRecord::Base.connection
conn.execute('EXPLAIN ANALYZE SELECT * from some_table')
我正在尝试使用 pg gem 获取查询的时间。我看到了文档,但没有找到任何东西。我想知道是否有类似 query.time
的东西。
我在 ~/.psqlrc
中添加了 \timing
,因此该命令默认处于活动状态。如果我在 Postgres 控制台中编写查询,时间是活动的。
这是代码:
conn = PGconn.open(:dbname => 'my_db')
query=conn.exec('SELECT * from some_table')
puts query.num_tuples -> this work
puts query.time -> undefined method
我需要测量 Postgres 本身的时间,我不能使用 Ruby 的时间 class。
尝试一下 return 时光倒流。
puts conn.exec("EXPLAIN ANALYZE SELECT * FROM some_table").values
虽然 PGconn.open(:dbname => 'my_db')
和 conn.exec
似乎有效,但它没有正确报告执行时间。我怀疑它报告了查询以外的其他内容的执行时间。可能是EXPLAIN的执行时间。
虽然问题没有指定 Rails,但我怀疑使用 PGconn
而不使用 Rails 也会有同样的问题。
PGconn.open(:dbname => 'my_db')
总是报告执行时间在 0.010 到 0.285 毫秒之间。我的查询的正确执行时间约为 15,000 毫秒。
要获得正确的执行时间,请使用:
ActiveRecord::Base.connection.execute("EXPLAIN ANALYZE ...").values.last.first
提取数值:
ActiveRecord::Base.connection.execute("EXPLAIN ANALYZE ...").values.last.first.scan( /\d+.\d+/ ).first
就OP而言,
conn = ActiveRecord::Base.connection
conn.execute('EXPLAIN ANALYZE SELECT * from some_table')