Benjamin Renard commited on 2015-11-20 10:29:34
Showing 2 changed files, with 86 additions and 0 deletions.
... | ... |
@@ -0,0 +1,81 @@ |
1 |
+#!/usr/bin/python |
|
2 |
+ |
|
3 |
+import subprocess |
|
4 |
+ |
|
5 |
+p = subprocess.Popen(['getconf','PAGE_SIZE'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) |
|
6 |
+out, err = p.communicate() |
|
7 |
+ |
|
8 |
+page_size=int(out.strip()) |
|
9 |
+ |
|
10 |
+p = subprocess.Popen(['getconf','_PHYS_PAGES'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) |
|
11 |
+out, err = p.communicate() |
|
12 |
+ |
|
13 |
+phys_pages=int(out.strip()) |
|
14 |
+ |
|
15 |
+all_mem=phys_pages*page_size |
|
16 |
+ |
|
17 |
+def pretty_size(size): |
|
18 |
+ size=float(size) |
|
19 |
+ for x in ['B', 'KB', 'MB']: |
|
20 |
+ if size < 1024.0: |
|
21 |
+ return "%i%s" % (size, x) |
|
22 |
+ size /= 1024.0 |
|
23 |
+ return "%i%s" % (size*1024, x) |
|
24 |
+ |
|
25 |
+print "Total server memory : %s (Pages : %s / Page size : %sB" % (pretty_size(all_mem),phys_pages,page_size) |
|
26 |
+ |
|
27 |
+pg_ratio=None |
|
28 |
+while pg_ratio is None: |
|
29 |
+ pg_ratio=int(raw_input("How many for PG (0-95) ? ")) |
|
30 |
+ if pg_ratio<1 or pg_ratio>95: |
|
31 |
+ print "Invalid value" |
|
32 |
+ pg_ratio=None |
|
33 |
+ |
|
34 |
+print "Memory allocated to PG : %s" % pretty_size(all_mem*pg_ratio/100) |
|
35 |
+ |
|
36 |
+pg_max_con=None |
|
37 |
+while pg_max_con is None: |
|
38 |
+ pg_max_con=int(raw_input("How many simultaneous connections to PG ? ")) |
|
39 |
+ if pg_max_con<=0: |
|
40 |
+ print "Invalid value" |
|
41 |
+ pg_max_con=None |
|
42 |
+ |
|
43 |
+shmall=int((phys_pages*pg_ratio/100)*1.2) |
|
44 |
+if shmall>all_mem: |
|
45 |
+ shmall=all_mem |
|
46 |
+shmmax=int(shmall*page_size) |
|
47 |
+ |
|
48 |
+print "\nTo put in /etc/sysctl.d/30-postgresql-shm.conf :\n" |
|
49 |
+print "\tkernel.shmall = %s" % shmall |
|
50 |
+print "\tkernel.shmmax = %s" % shmmax |
|
51 |
+print "\nAnd restart procps service to apply (on Debian) :\n\n\tservice procps restart" |
|
52 |
+ |
|
53 |
+pg_mem=int(all_mem*pg_ratio/100) |
|
54 |
+shared_buffers=int(pg_mem/4) |
|
55 |
+work_mem=int(pg_mem / (pg_max_con + (pg_max_con * 0.1))) |
|
56 |
+effective_cache_size=pg_mem |
|
57 |
+ |
|
58 |
+maintenance_work_mem=0.9*pg_mem |
|
59 |
+ |
|
60 |
+print "\nTo put in postgresql.conf :\n" |
|
61 |
+print "\t# Memory related parameters" |
|
62 |
+print "\t# PG allocated memory : %s" % pretty_size(pg_mem) |
|
63 |
+print "\tmax_connections = %s" % pg_max_con |
|
64 |
+print "\t# shared_buffers = 25% of PG allocated memory" |
|
65 |
+print "\tshared_buffers = %s" % pretty_size(shared_buffers) |
|
66 |
+print "\t# Memory used for sorting result for each connection" |
|
67 |
+print "\t# work_mem = PG allocated memory / (max_connexions + 10%)" |
|
68 |
+print "\twork_mem = %s" % pretty_size(work_mem) |
|
69 |
+print "\t# Memory used for vacuum, create index, ..." |
|
70 |
+print "\t# maintenance_work_mem = 90% of PG allocated memory" |
|
71 |
+print "\tmaintenance_work_mem = %s " % pretty_size(maintenance_work_mem) |
|
72 |
+print "\t# Available memory for PG (use for internal calculation)" |
|
73 |
+print "\teffective_cache_size = %s" % pretty_size(effective_cache_size) |
|
74 |
+print "\n\t# Checkpoints management" |
|
75 |
+print "\tcheckpoint_segments = 8" |
|
76 |
+print "\tcheckpoint_timeout = 5min" |
|
77 |
+print "\tcheckpoint_completion_target = 0.7" |
|
78 |
+print "\n\t# Log all request > 1sec" |
|
79 |
+print "\tlog_min_duration_statement = 1000" |
|
80 |
+ |
|
81 |
+print "\nAnd restart PG service to apply :\n\n\tservice postgresql restart" |
|
0 | 82 |