These patches can also be pulled from:
git://github.com/icomfort/puppet-dashboard.git performance
--
Ian Ward Comfort <icom...@stanford.edu>
Systems Team Lead, Academic Computing Services, Stanford University
app/controllers/pages_controller.rb | 1 -
.../20100811204545_add_success_to_report_index.rb | 11 +++++++++++
db/schema.rb | 4 ++--
3 files changed, 13 insertions(+), 3 deletions(-)
SELECT `nodes`.* FROM `nodes` INNER JOIN `reports`
ON reports.node_id = nodes.id WHERE (reports.success = 1)
GROUP BY nodes.id;
Adjusting the index to reports(node_id,success) allows this query to run
entirely from the index, and speeds up page loads significantly, especially
with large numbers of reports. In our environment, with 45 nodes and (a
relatively modest, recently-pruned) 49,348 reports, query times changed from:
Node Load (418.1ms)
Node Load (268.4ms)
Node Load (419.1ms)
Node Load (265.5ms)
to:
Node Load (156.9ms)
Node Load (6.3ms)
Node Load (157.7ms)
Node Load (6.3ms)
---
.../20100811204545_add_success_to_report_index.rb | 11 +++++++++++
db/schema.rb | 4 ++--
2 files changed, 13 insertions(+), 2 deletions(-)
create mode 100644 db/migrate/20100811204545_add_success_to_report_index.rb
diff --git a/db/migrate/20100811204545_add_success_to_report_index.rb b/db/migrate/20100811204545_add_success_to_report_index.rb
new file mode 100644
index 0000000..ab2618d
--- /dev/null
+++ b/db/migrate/20100811204545_add_success_to_report_index.rb
@@ -0,0 +1,11 @@
+class AddSuccessToReportIndex < ActiveRecord::Migration
+ def self.up
+ remove_index :reports, :node_id
+ add_index :reports, [:node_id, :success]
+ end
+
+ def self.down
+ remove_index :reports, [:node_id, :success]
+ add_index :reports, :node_id
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 27a9963..28fe799 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -9,7 +9,7 @@
#
# It's strongly recommended to check this file into your version control system.
-ActiveRecord::Schema.define(:version => 20100726070117) do
+ActiveRecord::Schema.define(:version => 20100811204545) do
create_table "assignments", :force => true do |t|
t.integer "node_id"
@@ -88,7 +88,7 @@ ActiveRecord::Schema.define(:version => 20100726070117) do
t.datetime "time"
end
- add_index "reports", ["node_id"], :name => "index_reports_on_node_id"
+ add_index "reports", ["node_id", "success"], :name => "index_reports_on_node_id_and_success"
add_index "reports", ["time"], :name => "index_reports_on_time"
create_table "services", :force => true do |t|
--
1.7.2.1
diff --git a/app/controllers/pages_controller.rb b/app/controllers/pages_controller.rb
index c1e79a8..6cc0276 100644
--- a/app/controllers/pages_controller.rb
+++ b/app/controllers/pages_controller.rb
@@ -1,7 +1,6 @@
class PagesController < ApplicationController
def home
@statuses = Status.by_interval(:limit => 30)
- @reports = Report.all(:limit => 20, :order => 'time ASC')
@currently_failing_nodes = Node.by_currentness_and_successfulness(true, false)
@unreported_nodes = Node.unreported
--
1.7.2.1
Rein Henrichs
http://puppetlabs.com
"We all know Linux is great...it does infinite loops in 5 seconds."
(Linus Torvalds about the superiority of Linux on the Amterdam
Linux Symposium)
Sure, done.
--
Ian Ward Comfort <icom...@stanford.edu>