我正在尝试计算我的Ruby on Rails应用程序对我们的数据库执行的Postgres语句的数量。我在stackoverflow上找到了这个条目,但它计算了事务。我们有几个交易会产生大量的报表,因此无法提供良好的图片。我希望数据可以从PG本身获得 - 而不是试图解析日志。
https://dba.stackexchange.com/questions/35940/how-many-queries-per-second-is-my-postgres-executing
答案 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_tables
,pg_stat_user_indexes
等,它们提供表和索引的使用情况统计信息。这些跟踪由查询完成的单个索引扫描,顺序扫描等,但同样不是查询的数量。