Skip to content

Instantly share code, notes, and snippets.

@kbarber
Last active December 24, 2015 16:29
Show Gist options
  • Select an option

  • Save kbarber/6828683 to your computer and use it in GitHub Desktop.

Select an option

Save kbarber/6828683 to your computer and use it in GitHub Desktop.

h1. Load testing fact submissions to check for changes in inserts/updates/deletes.

First of all, here is a script that will submit local facter information over and over again:

#!/usr/bin/env ruby

require 'rubygems'
require 'net/http'
require 'uri'
require 'json'
require 'facter'

uri = URI.parse("http://localhost:8080/v3/commands/")
http = Net::HTTP.new(uri.host, uri.port)

100.times do
  # Stringify to make sure RHS is a string
  facts = {}
  Facter.to_hash.each do |k,v|
    facts[k] = v.to_s
  end

  request = Net::HTTP::Post.new(uri.request_uri)
  request.set_form_data(
    {
      "payload" => {
        "command" => "replace facts",
        "version" => 1,
        "payload" => {
          "name" => "puppetdb1.vm",
          "values" => facts,
        }.to_json,
      }.to_json
    }
  )

  response = http.request(request)
  puts response.body
end

It needs the gems: facter & json so make sure they are installed.

This literally just sends facts from your local machine 100 times via commands submission.

So, install a version of PostgreSQL 9.3 somewhere, it has the best instrumentation. Make sure the setting:

track_io_timing = on

Is on ... so you get the blk_read_time and blk_write_time from pg_stat_database.

So before you run it, in postgresql lets clear our statistics:

psql (9.3.0)
Type "help" for help.

ken=# \x <- change to record view, might be easier to read
ken=# \c puppetdb
You are now connected to database "puppetdb" as user "ken".

puppetdb=# select pg_stat_reset();
-[ RECORD 1 ]-+-
pg_stat_reset | 

puppetdb=# select * from pg_stat_database where datname = 'puppetdb';
-[ RECORD 1 ]--+------------------------------
datid          | 103952
datname        | puppetdb
numbackends    | 14
xact_commit    | 0
xact_rollback  | 0
blks_read      | 0
blks_hit       | 0
tup_returned   | 0
tup_fetched    | 0
tup_inserted   | 0
tup_updated    | 0
tup_deleted    | 0
conflicts      | 0
temp_files     | 0
temp_bytes     | 0
deadlocks      | 0
blk_read_time  | 0
blk_write_time | 0
stats_reset    | 2013-10-04 17:24:39.851722+01

Now we run our test:

[ken@kb puppetdb-tools]# ./replace_facts.rb
{
  "uuid" : "1f74481b-d78e-4dce-9990-5907429fd0d3"
}
...

Then we check our stats again:

psql (9.3.0)
Type "help" for help.

ken=# \c puppetdb
You are now connected to database "puppetdb" as user "ken".
puppetdb=# \x
Expanded display is on.
puppetdb=# select * from pg_stat_database where datname = 'puppetdb';
-[ RECORD 1 ]--+------------------------------
datid          | 103952
datname        | puppetdb
numbackends    | 13
xact_commit    | 217
xact_rollback  | 0
blks_read      | 292
blks_hit       | 490979
tup_returned   | 87961
tup_fetched    | 6667
tup_inserted   | 34902
tup_updated    | 127
tup_deleted    | 34900
conflicts      | 0
temp_files     | 0
temp_bytes     | 0
deadlocks      | 0
blk_read_time  | 3.095
blk_write_time | 0
stats_reset    | 2013-10-04 17:39:36.815335+01

puppetdb=# select * from pg_stat_user_tables;
-[ RECORD 1 ]-----+------------------------------
relid             | 104114
schemaname        | public
relname           | resource_events
seq_scan          | 0
seq_tup_read      | 0
idx_scan          | 0
idx_tup_fetch     | 0
n_tup_ins         | 0
n_tup_upd         | 0
n_tup_del         | 0
n_tup_hot_upd     | 0
n_live_tup        | 0
n_dead_tup        | 0
last_vacuum       | 
last_autovacuum   | 
last_analyze      | 
last_autoanalyze  | 
vacuum_count      | 0
autovacuum_count  | 0
analyze_count     | 0
autoanalyze_count | 0
-[ RECORD 2 ]-----+------------------------------
relid             | 104030
schemaname        | public
relname           | resource_params
seq_scan          | 0
seq_tup_read      | 0
idx_scan          | 0
idx_tup_fetch     | 0
n_tup_ins         | 0
n_tup_upd         | 0
n_tup_del         | 0
n_tup_hot_upd     | 0
n_live_tup        | 0
n_dead_tup        | 0
last_vacuum       | 
last_autovacuum   | 
last_analyze      | 
last_autoanalyze  | 
vacuum_count      | 0
autovacuum_count  | 0
analyze_count     | 0
autoanalyze_count | 0
-[ RECORD 3 ]-----+------------------------------
relid             | 103953
schemaname        | public
relname           | certnames
seq_scan          | 141
seq_tup_read      | 141
idx_scan          | 159
idx_tup_fetch     | 159
n_tup_ins         | 0
n_tup_upd         | 100
n_tup_del         | 0
n_tup_hot_upd     | 100
n_live_tup        | 1
n_dead_tup        | 47
last_vacuum       | 
last_autovacuum   | 2013-10-04 17:43:07.458226+01
last_analyze      | 
last_autoanalyze  | 2013-10-04 17:43:07.485412+01
vacuum_count      | 0
autovacuum_count  | 1
analyze_count     | 0
autoanalyze_count | 1
-[ RECORD 4 ]-----+------------------------------
relid             | 104078
schemaname        | public
relname           | certname_facts_metadata
seq_scan          | 35000
seq_tup_read      | 35000
idx_scan          | 0
idx_tup_fetch     | 0
n_tup_ins         | 100
n_tup_upd         | 0
n_tup_del         | 100
n_tup_hot_upd     | 0
n_live_tup        | 1
n_dead_tup        | 47
last_vacuum       | 
last_autovacuum   | 2013-10-04 17:43:07.357719+01
last_analyze      | 
last_autoanalyze  | 2013-10-04 17:46:07.559081+01
vacuum_count      | 0
autovacuum_count  | 1
analyze_count     | 0
autoanalyze_count | 3
-[ RECORD 5 ]-----+------------------------------
relid             | 104170
schemaname        | public
relname           | latest_reports
seq_scan          | 0
seq_tup_read      | 0
idx_scan          | 0
idx_tup_fetch     | 0
n_tup_ins         | 0
n_tup_upd         | 0
n_tup_del         | 0
n_tup_hot_upd     | 0
n_live_tup        | 0
n_dead_tup        | 0
last_vacuum       | 
last_autovacuum   | 
last_analyze      | 
last_autoanalyze  | 
vacuum_count      | 0
autovacuum_count  | 0
analyze_count     | 0
autoanalyze_count | 0
-[ RECORD 6 ]-----+------------------------------
relid             | 104189
schemaname        | public
relname           | resource_params_cache
seq_scan          | 0
seq_tup_read      | 0
idx_scan          | 0
idx_tup_fetch     | 0
n_tup_ins         | 0
n_tup_upd         | 0
n_tup_del         | 0
n_tup_hot_upd     | 0
n_live_tup        | 0
n_dead_tup        | 0
last_vacuum       | 
last_autovacuum   | 
last_analyze      | 
last_autoanalyze  | 
vacuum_count      | 0
autovacuum_count  | 0
analyze_count     | 0
autoanalyze_count | 0
-[ RECORD 7 ]-----+------------------------------
relid             | 104017
schemaname        | public
relname           | catalog_resources
seq_scan          | 0
seq_tup_read      | 0
idx_scan          | 0
idx_tup_fetch     | 0
n_tup_ins         | 0
n_tup_upd         | 0
n_tup_del         | 0
n_tup_hot_upd     | 0
n_live_tup        | 0
n_dead_tup        | 0
last_vacuum       | 
last_autovacuum   | 
last_analyze      | 
last_autoanalyze  | 
vacuum_count      | 0
autovacuum_count  | 0
analyze_count     | 0
autoanalyze_count | 0
-[ RECORD 8 ]-----+------------------------------
relid             | 104051
schemaname        | public
relname           | schema_migrations
seq_scan          | 0
seq_tup_read      | 0
idx_scan          | 0
idx_tup_fetch     | 0
n_tup_ins         | 0
n_tup_upd         | 0
n_tup_del         | 0
n_tup_hot_upd     | 0
n_live_tup        | 0
n_dead_tup        | 0
last_vacuum       | 
last_autovacuum   | 
last_analyze      | 
last_autoanalyze  | 
vacuum_count      | 0
autovacuum_count  | 0
analyze_count     | 0
autoanalyze_count | 0
-[ RECORD 9 ]-----+------------------------------
relid             | 104101
schemaname        | public
relname           | reports
seq_scan          | 0
seq_tup_read      | 0
idx_scan          | 0
idx_tup_fetch     | 0
n_tup_ins         | 0
n_tup_upd         | 0
n_tup_del         | 0
n_tup_hot_upd     | 0
n_live_tup        | 0
n_dead_tup        | 0
last_vacuum       | 
last_autovacuum   | 
last_analyze      | 
last_autoanalyze  | 
vacuum_count      | 0
autovacuum_count  | 0
analyze_count     | 0
autoanalyze_count | 0
-[ RECORD 10 ]----+------------------------------
relid             | 103969
schemaname        | public
relname           | certname_catalogs
seq_scan          | 0
seq_tup_read      | 0
idx_scan          | 0
idx_tup_fetch     | 0
n_tup_ins         | 0
n_tup_upd         | 0
n_tup_del         | 0
n_tup_hot_upd     | 0
n_live_tup        | 0
n_dead_tup        | 0
last_vacuum       | 
last_autovacuum   | 
last_analyze      | 
last_autoanalyze  | 
vacuum_count      | 0
autovacuum_count  | 0
analyze_count     | 0
autoanalyze_count | 0
-[ RECORD 11 ]----+------------------------------
relid             | 104038
schemaname        | public
relname           | edges
seq_scan          | 0
seq_tup_read      | 0
idx_scan          | 0
idx_tup_fetch     | 0
n_tup_ins         | 0
n_tup_upd         | 0
n_tup_del         | 0
n_tup_hot_upd     | 0
n_live_tup        | 0
n_dead_tup        | 0
last_vacuum       | 
last_autovacuum   | 
last_analyze      | 
last_autoanalyze  | 
vacuum_count      | 0
autovacuum_count  | 0
analyze_count     | 0
autoanalyze_count | 0
-[ RECORD 12 ]----+------------------------------
relid             | 103961
schemaname        | public
relname           | catalogs
seq_scan          | 0
seq_tup_read      | 0
idx_scan          | 0
idx_tup_fetch     | 0
n_tup_ins         | 0
n_tup_upd         | 0
n_tup_del         | 0
n_tup_hot_upd     | 0
n_live_tup        | 0
n_dead_tup        | 0
last_vacuum       | 
last_autovacuum   | 
last_analyze      | 
last_autoanalyze  | 
vacuum_count      | 0
autovacuum_count  | 0
analyze_count     | 0
autoanalyze_count | 0
-[ RECORD 13 ]----+------------------------------
relid             | 104058
schemaname        | public
relname           | certname_facts
seq_scan          | 100
seq_tup_read      | 34800
idx_scan          | 0
idx_tup_fetch     | 0
n_tup_ins         | 34800
n_tup_upd         | 0
n_tup_del         | 34800
n_tup_hot_upd     | 0
n_live_tup        | 348
n_dead_tup        | 0
last_vacuum       | 
last_autovacuum   | 2013-10-04 17:46:07.802225+01
last_analyze      | 
last_autoanalyze  | 2013-10-04 17:46:07.829711+01
vacuum_count      | 0
autovacuum_count  | 7
analyze_count     | 0
autoanalyze_count | 7
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment