aboutsummaryrefslogtreecommitdiffstats
path: root/notes
diff options
context:
space:
mode:
Diffstat (limited to 'notes')
-rw-r--r--notes/postgres_performance.txt138
1 files changed, 138 insertions, 0 deletions
diff --git a/notes/postgres_performance.txt b/notes/postgres_performance.txt
new file mode 100644
index 00000000..8f87d5c6
--- /dev/null
+++ b/notes/postgres_performance.txt
@@ -0,0 +1,138 @@
+
+## 2018-06-27 Measurements
+
+fatcat_prod=# select count(*) from release_ident; 20983019
+fatcat_prod=# select count(*) from work_ident; 20988140
+fatcat_prod=# select count(*) from file_ident; 1482335
+fatcat_prod=# select count(*) from creator_ident; 4167419
+fatcat_prod=# select count(*) from container_ident; 61793
+
+select count(*) from release_contrib; 59798133
+
+bnewbold@wbgrp-svc500$ sudo du -sh /var/lib/postgresql/
+43G
+
+running import-crossref with 20 threads, and manifest importer with one (at 33%
+complete). had already imported ~7million works+releases previously.
+
+
+ PostgreSQL 10.4 - wbgrp-svc500.us.archive.org - postgres@localhost:5432/postgre
+ Size: 41.38G - 323.40K/s | TPS: 885
+ Mem.: 50.80% - 23.86G/49.14G | IO Max: 79539/s
+ Swap: 0.80% - 408.89M/50.00G | Read : 67.04K/s - 16/s
+ Load: 6.69 7.41 7.69 | Write: 1.93M/s - 493/s
+
+
+----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
+usr sys idl wai hiq siq| read writ| recv send| in out | int csw
+ 32 6 62 0 0 0| 296k 3880k| 334k 3144B| 0 0 | 21k 65k
+ 31 6 62 0 0 0| 0 3072k| 391k 318B| 0 0 | 51k 141k
+ 31 6 63 0 0 0| 16k 1080k| 344k 1988B| 0 0 | 35k 104k
+ 29 6 65 0 0 0| 136k 2608k| 175k 332B| 0 0 |9835 15k
+ 28 5 67 0 0 0| 408k 4368k| 285k 832B| 0 0 | 14k 17k
+ 33 5 62 0 0 0| 56k 3256k| 219k 99B| 0 0 | 22k 49k
+ 31 6 63 0 0 0| 188k 5120k| 158k 318B| 0 0 | 17k 29k
+ 30 6 64 0 0 0| 200k 6984k| 239k 988B| 0 0 | 16k 24k
+ 30 6 64 0 0 0| 168k 5504k| 159k 152B| 0 0 | 14k 20k
+ 28 7 65 0 0 0| 440k 12M| 236k 420B| 0 0 | 15k 18k
+ 29 6 65 0 0 0| 428k 6968k| 352k 310B| 0 0 | 19k 31k
+ 32 6 62 0 0 0| 64k 3480k| 288k 318B| 0 0 | 18k 55k
+ 32 6 62 0 0 0| 32k 2080k| 155k 318B| 0 0 | 20k 52k
+
+
+bnewbold@wbgrp-svc500$ uptime
+ 22:00:42 up 28 days, 22:31, 6 users, load average: 7.94, 7.56, 7.72
+
+
+2018-06-27 21:57:36.102 UTC [401] LOG: checkpoints are occurring too frequently (13 seconds apart)
+2018-06-27 21:57:36.102 UTC [401] HINT: Consider increasing the configuration parameter "max_wal_size".
+
+
+ relname | too_much_seq | case | rel_size | seq_scan | idx_scan
+-----------------+--------------+----------------+-------------+----------+-----------
+ changelog | 1274670 | Missing Index? | 39411712 | 1274670 | 0
+ file_edit | 612386 | Missing Index? | 108298240 | 612386 | 0
+ creator_edit | 612386 | Missing Index? | 285540352 | 612386 | 0
+ container_edit | 612386 | Missing Index? | 4784128 | 612386 | 0
+ release_edit | 612386 | Missing Index? | 1454489600 | 612386 | 0
+ work_edit | 612386 | Missing Index? | 1454415872 | 612386 | 0
+ release_contrib | 296675 | Missing Index? | 4725645312 | 296675 | 0
+ release_ref | 296663 | Missing Index? | 8999837696 | 296663 | 0
+ file_release | -113 | OK | 13918208 | 110 | 223
+ container_rev | -979326 | OK | 16285696 | 63 | 979389
+ file_ident | -3671516 | OK | 109002752 | 362 | 3671878
+ file_rev | -3944155 | OK | 302940160 | 95 | 3944250
+ creator_rev | -8420205 | OK | 318283776 | 1226 | 8421431
+ creator_ident | -9525338 | OK | 309141504 | 52330 | 9577668
+ container_ident | -20581876 | OK | 4833280 | 272457 | 20854333
+ release_ident | -40548858 | OK | 1440948224 | 4160919 | 44709777
+ work_rev | -42534913 | OK | 1124671488 | 1161 | 42536074
+ editgroup | -48864662 | OK | 34136064 | 1 | 48864663
+ work_ident | -65008911 | OK | 1503313920 | 1239 | 65010150
+ release_rev | -185735794 | OK | 13649428480 | 128 | 185735922
+
+## Setup
+
+Add to postgres.conf:
+
+ shared_preload_libraries = 'auto_explain,pg_stat_statements'
+
+ # Increase the max size of the query strings Postgres records
+ track_activity_query_size = 2048
+
+ # Track statements generated by stored procedures as well
+ pg_stat_statements.track = all
+
+Also:
+
+ track_counts (already default)
+ autovacuum (already default?)
+ log_min_error = warning
+ log_min_duration_statement = 5000
+
+Then from shell:
+
+ create extension pg_stat_statements;
+
+Regularly want to run:
+
+ VACUUM ANALYZE
+
+## Tuning Values
+
+postgres config:
+
+ max_connections = 100 (default)
+ shared_buffers = 128MB -> 10GB (while elastic on same machine; later 16 or more)
+ effective_cache_size = 4GB -> 24GB (while elastic on same machine)
+ work_mem = 4MB -> 128MB # relatively few connections/box
+ fsync = on
+ commit_delay = ??? (and siblings)
+ random_page_cost = 1 (for SSD)
+ default_statistics_target = 100 -> 200
+ maintenance_work_mem = 64MB -> 8GB
+ synchronous_commit = off (during dev only! switch to on for production!)
+ wal_sync_method (keep default)
+ max_wal_size = 64 -> 128 (based on above HINT message)
+ # didn't mess with commit_delay/commit_siblings
+
+system:
+
+ sysctl -w vm.overcommit_memory=2
+ TODO: ulimit -n 65536
+ TODO: ulimit -p 800
+ LimitNOFILE
+ /lib/systemd/system/postgresql.service
+
+## Resources
+
+https://www.geekytidbits.com/performance-tuning-postgres/
+
+Could try pgbadger to handle auto_explain type output.
+
+https://www.postgresql.org/docs/10/static/runtime-config-wal.html
+
+IA-specific resources:
+ https://git.archive.org/ia/mint/blob/master/postgres/postgres_9_2.yml
+ https://git.archive.org/ia/mint/blob/master/postgres/put_datadir_on_ssd.sh
+ https://git.archive.org/ia/mint/blob/master/postgres/templates/postgresql.conf.j2