计算Postgres语句的数量

时间:2015-11-19 18:58:19

标签: ruby-on-rails postgresql

我正在尝试计算我的Ruby on Rails应用程序对我们的数据库执行的Postgres语句的数量。我在stackoverflow上找到了这个条目,但它计算了事务。我们有几个交易会产生大量的报表,因此无法提供良好的图片。我希望数据可以从PG本身获得 - 而不是试图解析日志。

https://dba.stackexchange.com/questions/35940/how-many-queries-per-second-is-my-postgres-executing

2 个答案:

答案 0 :(得分:1)

我认为您正在寻找ActiveSupport instrumentation。作为Rails的一部分,该框架在整个Rails应用程序中用于发布某些事件。例如,您可以订阅parent directory is world writable, FileUtils#remove_entry_secure does not work; abort: "/.socket/fcgi/passenger-native-support-d8m77l" (parent directory mode 40777) (ArgumentError) /.socket/ruby/rubies/ruby-2.2.2/lib/ruby/2.2.0/fileutils.rb:716:in `remove_entry_secure' /.socket/passenger/lib/phusion_passenger/utils/tmpio.rb:72:in `ensure in mktmpdir' /.socket/passenger/lib/phusion_passenger/utils/tmpio.rb:72:in `mktmpdir' /.socket/passenger/lib/phusion_passenger/native_support.rb:147:in `download_binary_and_load' /.socket/passenger/lib/phusion_passenger/native_support.rb:49:in `start' /.socket/passenger/lib/phusion_passenger/native_support.rb:405:in `<top (required)>' /.socket/ruby/rubies/ruby-2.2.2/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require' /.socket/ruby/rubies/ruby-2.2.2/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require' /.socket/passenger/lib/phusion_passenger.rb:237:in `require_passenger_lib' /.socket/passenger/helper-scripts/rack-preloader.rb:75:in `init_passenger' /.socket/passenger/helper-scripts/rack-preloader.rb:157:in `<module:App>' /.socket/passenger/helper-scripts/rack-preloader.rb:29:in `<module:PhusionPassenger>' /.socket/passenger/helper-scripts/rack-preloader.rb:28:in `<main>' 事件类型来计算您的查询。

sql.activerecord

你可以将它放在ActiveSupport::Notifications.subscribe "sql.activerecord" do |*args| counter++ done (在应用程序中统计)或控制器的各种config/initializers/挂钩之一(计算单个请求的语句)。

(细则:我实际上没有测试过这个片段,但是它应该如何运作AFAIK。)

答案 1 :(得分:1)

PostgreSQL提供了一些有用的功能。

主要的是pg_stat_statements,您可以安装一个扩展来收集语句统计信息。我强烈推荐这个扩展,它非常有用。它可以告诉您哪些语句最常运行,哪些语句运行时间最长等等。您可以查询它以添加给定数据库的查询数。

要获得一段时间内的比率,您应该定期编写脚本示例pg_stat_statements,创建一个表格,其中包含自上次样本以来更改的值。

pg_stat_database视图跟踪包括交易率的值。它不跟踪查询数量。

pg_stat_user_tablespg_stat_user_indexes等,它们提供表和索引的使用情况统计信息。这些跟踪由查询完成的单个索引扫描,顺序扫描等,但同样不是查询的数量。