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
Facter.flush
# 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. This setting can be made in the postgresql.conf file. In a psql window, you can check it's current value with:
show track_io_timing;
If you need to change it's value, you can see where the postgresql config file is located with:
show config_file;
Editing that file and restarting postgres should enable it.
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