8000 Index option `pagination_total: false` does not actually prevent the `count(*)` · Issue #3847 · activeadmin/activeadmin · GitHub
[go: up one dir, main page]

Skip to content

Index option pagination_total: false does not actually prevent the count(*) #3847

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
losvedir opened this issue Mar 9, 2015 · 1 comment
Closed

Comments

@losvedir
Copy link
Contributor
losvedir commented Mar 9, 2015

The documentation says:

If you have a very large database, you might want to disable SELECT COUNT(*) queries caused by the pagination info at the bottom of the page:

ActiveAdmin.register Post do
  index pagination_total: false do
    # ...
  end
end

However, while that option changes the display of the pagination, it does not actually prevent the COUNT (*) from "table" from occurring. This one line was causing us sometimes up to a second of page load time for some of our large tables.

I instrumented it to be notified when a count (*) was issued, via:

ActiveSupport::Notifications.subscribe("sql.active_record") do |_, _, _, _, details|
  if details[:sql] =~ /SELECT COUNT\(\*\) FROM "messages"/
    puts caller.join("\n")
    puts "*" * 50
  end
end

Then I loaded up our /admin/messages table, and sure enough, the count happened:

   (150.0ms)  SELECT COUNT(*) FROM "messages"
.../.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/activesupport-3.2.21/lib/active_support/notifications/fanout.rb:47:in `call'
.../.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/activesupport-3.2.21/lib/active_support/notifications/fanout.rb:47:in `publish'
.../.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/activesupport-3.2.21/lib/active_support/notifications/fanout.rb:25:in `block in publish'
.../.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/activesupport-3.2.21/lib/active_support/notifications/fanout.rb:25:in `each'
.../.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/activesupport-3.2.21/lib/active_support/notifications/fanout.rb:25:in `publish'
.../.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/activesupport-3.2.21/lib/active_support/notifications/instrumenter.rb:25:in `ensure in instrument'
.../.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/activesupport-3.2.21/lib/active_support/notifications/instrumenter.rb:25:in `instrument'
.../.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/activerecord-3.2.21/lib/active_record/connection_adapters/abstract_adapter.rb:275:in `log'
.../.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/activerecord-3.2.21/lib/active_record/connection_adapters/postgresql_adapter.rb:659:in `exec_query'
.../.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/activerecord-3.2.21/lib/active_record/connection_adapters/postgresql_adapter.rb:1262:in `select'
.../.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/activerecord-3.2.21/lib/active_record/connection_adapters/abstract/database_statements.rb:18:in `select_all'
.../.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/activerecord-3.2.21/lib/active_record/connection_adapters/abstract/query_cache.rb:61:in `block in select_all'
.../.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/activerecord-3.2.21/lib/active_record/connection_adapters/abstract/query_cache.rb:75:in `cache_sql'
.../.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/activerecord-3.2.21/lib/active_record/connection_adapters/abstract/query_cache.rb:61:in `select_all'
.../.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/activerecord-3.2.21/lib/active_record/connection_adapters/abstract/database_statements.rb:24:in `select_one'
.../.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/activerecord-3.2.21/lib/active_record/connection_adapters/abstract/database_statements.rb:30:in `select_value'
.../.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/activerecord-3.2.21/lib/active_record/relation/calculations.rb:250:in `execute_simple_calculation'
.../.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/activerecord-3.2.21/lib/active_record/relation/calculations.rb:215:in `perform_calculation'
.../.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/activerecord-3.2.21/lib/active_record/relation/calculations.rb:159:in `calculate'
.../.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/activerecord-3.2.21/lib/active_record/relation/calculations.rb:58:in `count'
.../.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/kaminari-0.16.2/lib/kaminari/models/active_record_relation_methods.rb:33:in `total_count'
.../.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/kaminari-0.16.2/lib/kaminari/models/page_scope_methods.rb:22:in `total_pages'
.../.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/kaminari-0.16.2/lib/kaminari/helpers/action_view_extension.rb:18:in `paginate'
.../.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/arbre-1.0.3/lib/arbre/element.rb:180:in `method_missing'
.../.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/bundler/gems/activeadmin-a0bf8da21b7a/lib/active_admin/views/components/paginated_collection.rb:100:in `build_pagination'
.../.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/bundler/gems/activeadmin-a0bf8da21b7a/lib/active_admin/views/components/paginated_collection.rb:68:in `block in build_pagination_with_formats'
.../.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/arbre-1.0.3/lib/arbre/element/builder_methods.rb:31:in `block in build_tag'
.../.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/arbre-1.0.3/lib/arbre/context.rb:92:in `with_current_arbre_element'
.../.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/arbre-1.0.3/lib/arbre/element/builder_methods.rb:49:in `with_current_arbre_element'
.../.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/arbre-1.0.3/lib/arbre/element/builder_methods.rb:26:in `build_tag'
.../.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/arbre-1.0.3/lib/arbre/element/builder_methods.rb:39:in `insert_tag'
.../.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/arbre-1.0.3/lib/arbre/element/builder_methods.rb:14:in `div'
.../.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/bundler/gems/activeadmin-a0bf8da21b7a/lib/active_admin/views/components/paginated_collection.rb:66:in `build_pagination_with_formats'
.../.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/bundler/gems/activeadmin-a0bf8da21b7a/lib/active_admin/views/components/paginated_collection.rb:50:in `build'
.../.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/arbre-1.0.3/lib/arbre/element/builder_methods.rb:30:in `block in build_tag'
.../.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/arbre-1.0.3/lib/arbre/context.rb:92:in `with_current_arbre_element'
.../.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/arbre-1.0.3/lib/arbre/element/builder_methods.rb:49:in `with_current_arbre_element'
.../.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/arbre-1.0.3/lib/arbre/element/builder_methods.rb:26:in `build_tag'
.../.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/arbre-1.0.3/lib/arbre/element/builder_methods.rb:39:in `insert_tag'
.../.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/arbre-1.0.3/lib/arbre/element/builder_methods.rb:14:in `paginated_collection'
.../.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/bundler/gems/activeadmin-a0bf8da21b7a/lib/active_admin/views/pages/index.rb:132:in `render_index'
.../.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/bundler/gems/activeadmin-a0bf8da21b7a/lib/active_admin/views/pages/index.rb:50:in `build_collection'
.../.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/bundler/gems/activeadmin-a0bf8da21b7a/lib/active_admin/views/pages/index.rb:28:in `block in main_content'
.../.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/arbre-1.0.3/lib/arbre/element/builder_methods.rb:31:in `block in build_tag'
.../.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/arbre-1.0.3/lib/arbre/context.rb:92:in `with_current_a
8B04
rbre_element'
... etc ...
**********************************
@timoschilling
Copy link
Member

double of #2638

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants
0