-
Notifications
You must be signed in to change notification settings - Fork 4
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(stac-db): Provide sensible defaults for pgSTAC db parameters #1
Conversation
const maxConnections = parameters?.maxConnections | ||
? Number.parseInt(parameters.maxConnections) | ||
: // https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Limits.html#RDS_Limits.MaxConnections | ||
Math.min(Math.round((memory_in_kb * 1024) / 9531392), 5000); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
5000 as a min maybe super high if it is a server that is not expecting that much concurrency. Now I know, the next thing you are going to ask is "what's reasonable" and there really isn't a clear cut answer for that, you need to know your use case.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This formula is the default from RDS docs itself: LEAST({DBInstanceClassMemory/9531392}, 5000)
, I'm just recreating it here to use for other calculations
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Also, note that 5000
is actually the max, we're taking whichever is less.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If you're curious, here are what the default maxConnections
are per instance size:
InstanceType | Memory (MB) | max_connections |
shared_buffers (KB) |
effective_cache_size (KB) |
work_mem (KB) |
maintenance_work_mem (KB) |
max_locks_per_transaction |
temp_buffers (KB) |
seq_page_cost |
random_page_cost |
---|---|---|---|---|---|---|---|---|---|---|
t2.nano, t3.nano, t3a.nano, t4g.nano | 512 | 56 | 131072 | 393216 | 2340 | 32768 | 1024 | 131072 | 1 | 1.1 |
t2.micro, t3.micro, t3a.micro, t4g.micro | 1024 | 113 | 262144 | 786432 | 2319 | 65536 | 1024 | 131072 | 1 | 1.1 |
c6g.medium, c6gd.medium, c6gn.medium, c7g.medium, t2.small, t3.small, t3a.small, t4g.small | 2048 | 225 | 524288 | 1572864 | 2330 | 131072 | 1024 | 131072 | 1 | 1.1 |
c4.large | 3840 | 422 | 983040 | 2949120 | 2329 | 245760 | 1024 | 131072 | 1 | 1.1 |
c5.large, c5a.large, c5ad.large, c5d.large, c6a.large, c6g.large, c6gd.large, c6gn.large, c6i.large, c6id.large, c7g.large, m6g.medium, m6gd.medium, t2.medium, t3.medium, t3a.medium, t4g.medium | 4096 | 451 | 1048576 | 3145728 | 2325 | 262144 | 1024 | 131072 | 1 | 1.1 |
c5n.large | 5376 | 591 | 1376256 | 4128768 | 2328 | 344064 | 1024 | 131072 | 1 | 1.1 |
is4gen.medium | 6144 | 676 | 1572864 | 4718592 | 2326 | 393216 | 1024 | 131072 | 1 | 1.1 |
c4.xlarge | 7680 | 845 | 1966080 | 5898240 | 2326 | 491520 | 1024 | 131072 | 1 | 1.1 |
c5.xlarge, c5a.xlarge, c5ad.xlarge, c5d.xlarge, c6a.xlarge, c6g.xlarge, c6gd.xlarge, c6gn.xlarge, c6i.xlarge, c6id.xlarge, c7g.xlarge, g5g.xlarge, im4gn.large, inf1.xlarge, m4.large, m5.large, m5a.large, m5ad.large, m5d.large, m5dn.large, m5n.large, m5zn.large, m6a.large, m6g.large, m6gd.large, m6i.large, m6id.large, r6g.medium, r6gd.medium, t2.large, t3.large, t3a.large, t4g.large | 8192 | 901 | 2097152 | 6291456 | 2327 | 524288 | 1024 | 131072 | 1 | 1.1 |
c5n.xlarge | 10752 | 1183 | 2752512 | 8257536 | 2326 | 688128 | 1024 | 131072 | 1 | 1.1 |
is4gen.large | 12288 | 1352 | 3145728 | 9437184 | 2326 | 786432 | 1024 | 131072 | 1 | 1.1 |
c4.2xlarge | 15360 | 1690 | 3932160 | 11796480 | 2326 | 983040 | 1024 | 131072 | 1 | 1.1 |
i3.large, r4.large | 15616 | 1718 | 3997696 | 11993088 | 2326 | 999424 | 1024 | 131072 | 1 | 1.1 |
c5.2xlarge, c5a.2xlarge, c5ad.2xlarge, c5d.2xlarge, c6a.2xlarge, c6g.2xlarge, c6gd.2xlarge, c6gn.2xlarge, c6i.2xlarge, c6id.2xlarge, c7g.2xlarge, d3en.xlarge, g4ad.xlarge, g4dn.xlarge, g5.xlarge, g5g.2xlarge, i3en.large, i4i.large, im4gn.xlarge, inf1.2xlarge, m4.xlarge, m5.xlarge, m5a.xlarge, m5ad.xlarge, m5d.xlarge, m5dn.xlarge, m5n.xlarge, m5zn.xlarge, m6a.xlarge, m6g.xlarge, m6gd.xlarge, m6i.xlarge, m6id.xlarge, mac2.metal, r5.large, r5a.large, r5ad.large, r5b.large, r5d.large, r5dn.large, r5n.large, r6a.large, r6g.large, r6gd.large, r6i.large, r6id.large, t2.xlarge, t3.xlarge, t3a.xlarge, t4g.xlarge, x2gd.medium, z1d.large | 16384 | 1802 | 4194304 | 12582912 | 2327 | 1048576 | 1024 | 131072 | 1 | 1.1 |
c5n.2xlarge | 21504 | 2366 | 5505024 | 16515072 | 2326 | 1376256 | 1024 | 131072 | 1 | 1.1 |
is4gen.xlarge, vt1.3xlarge | 24576 | 2704 | 6291456 | 18874368 | 2326 | 1572864 | 1024 | 131072 | 1 | 1.1 |
c4.4xlarge | 30720 | 3380 | 7864320 | 23592960 | 2326 | 1966080 | 1024 | 131072 | 1 | 1.1 |
d2.xlarge, g3s.xlarge, i3.xlarge, r4.xlarge | 31232 | 3436 | 7995392 | 23986176 | 2326 | 1998848 | 1024 | 131072 | 1 | 1.1 |
c5.4xlarge, c5a.4xlarge, c5ad.4xlarge, c5d.4xlarge, c6a.4xlarge, c6g.4xlarge, c6gd.4xlarge, c6gn.4xlarge, c6i.4xlarge, c6id.4xlarge, c7g.4xlarge, d3.xlarge, d3en.2xlarge, g4ad.2xlarge, g4dn.2xlarge, g5.2xlarge, g5g.4xlarge, h1.2xlarge, i3en.xlarge, i4i.xlarge, im4gn.2xlarge, m4.2xlarge, m5.2xlarge, m5a.2xlarge, m5ad.2xlarge, m5d.2xlarge, m5dn.2xlarge, m5n.2xlarge, m5zn.2xlarge, m6a.2xlarge, m6g.2xlarge, m6gd.2xlarge, m6i.2xlarge, m6id.2xlarge, mac1.metal, r5.xlarge, r5a.xlarge, r5ad.xlarge, r5b.xlarge, r5d.xlarge, r5dn.xlarge, r5n.xlarge, r6a.xlarge, r6g.xlarge, r6gd.xlarge, r6i.xlarge, r6id.xlarge, t2.2xlarge, t3.2xlarge, t3a.2xlarge, t4g.2xlarge, trn1.2xlarge, x2gd.large, z1d.xlarge | 32768 | 3605 | 8388608 | 25165824 | 2326 | 2097152 | 1024 | 131072 | 1 | 1.1 |
c5n.4xlarge | 43008 | 4731 | 11010048 | 33030144 | 2327 | 2752512 | 1024 | 131072 | 1 | 1.1 |
inf1.6xlarge, is4gen.2xlarge, m5zn.3xlarge, vt1.6xlarge | 49152 | 5000 | 12582912 | 37748736 | 2516 | 3145728 | 1024 | 131072 | 1 | 1.1 |
c4.8xlarge | 61440 | 5000 | 15728640 | 47185920 | 3145 | 3932160 | 1024 | 131072 | 1 | 1.1 |
d2.2xlarge, i3.2xlarge, p2.xlarge, p3.2xlarge, r4.2xlarge | 62464 | 5000 | 15990784 | 47972352 | 3198 | 3997696 | 1024 | 131072 | 1 | 1.1 |
c5a.8xlarge, c5ad.8xlarge, c6a.8xlarge, c6g.8xlarge, c6gd.8xlarge, c6gn.8xlarge, c6i.8xlarge, c6id.8xlarge, c7g.8xlarge, d3.2xlarge, d3en.4xlarge, g4ad.4xlarge, g4dn.4xlarge, g5.4xlarge, g5g.8xlarge, h1.4xlarge, i3en.2xlarge, i4i.2xlarge, im4gn.4xlarge, m4.4xlarge, m5.4xlarge, m5a.4xlarge, m5ad.4xlarge, m5d.4xlarge, m5dn.4xlarge, m5n.4xlarge, m6a.4xlarge, m6g.4xlarge, m6gd.4xlarge, m6i.4xlarge, m6id.4xlarge, r5.2xlarge, r5a.2xlarge, r5ad.2xlarge, r5b.2xlarge, r5d.2xlarge, r5dn.2xlarge, r5n.2xlarge, r6a.2xlarge, r6g.2xlarge, r6gd.2xlarge, r6i.2xlarge, r6id.2xlarge, x2gd.xlarge, z1d.2xlarge | 65536 | 5000 | 16777216 | 50331648 | 3355 | 4194304 | 1024 | 131072 | 1 | 1.1 |
c5.9xlarge, c5d.9xlarge | 73728 | 5000 | 18874368 | 56623104 | 3774 | 4718592 | 1024 | 131072 | 1 | 1.1 |
c5.12xlarge, c5a.12xlarge, c5ad.12xlarge, c5d.12xlarge, c5n.9xlarge, c6a.12xlarge, c6g.12xlarge, c6gd.12xlarge, c6gn.12xlarge, c6i.12xlarge, c6id.12xlarge, c7g.12xlarge, d3en.6xlarge, i3en.3xlarge, is4gen.4xlarge, m5zn.6xlarge, z1d.3xlarge | 98304 | 5000 | 25165824 | 75497472 | 5033 | 6291456 | 1024 | 131072 | 1 | 1.1 |
d2.4xlarge, f1.2xlarge, g3.4xlarge, i3.4xlarge, r4.4xlarge, x1e.xlarge | 124928 | 5000 | 31981568 | 95944704 | 6396 | 7995392 | 1024 | 131072 | 1 | 1.1 |
c5a.16xlarge, c5ad.16xlarge, c6a.16xlarge, c6g.16xlarge, c6g.metal, c6gd.16xlarge, c6gd.metal, c6gn.16xlarge, c6i.16xlarge, c6id.16xlarge, c7g.16xlarge, d3.4xlarge, d3en.8xlarge, g4ad.8xlarge, g4dn.8xlarge, g5.8xlarge, g5g.16xlarge, g5g.metal, h1.8xlarge, i4i.4xlarge, im4gn.8xlarge, m5.8xlarge, m5a.8xlarge, m5ad.8xlarge, m5d.8xlarge, m5dn.8xlarge, m5n.8xlarge, m6a.8xlarge, m6g.8xlarge, m6gd.8xlarge, m6i.8xlarge, m6id.8xlarge, r5.4xlarge, r5a.4xlarge, r5ad.4xlarge, r5b.4xlarge, r5d.4xlarge, r5dn.4xlarge, r5n.4xlarge, r6a.4xlarge, r6g.4xlarge, r6gd.4xlarge, r6i.4xlarge, r6id.4xlarge, x2gd.2xlarge, x2iedn.xlarge | 131072 | 5000 | 33554432 | 100663296 | 6710 | 8388608 | 1024 | 131072 | 1 | 1.1 |
c5.18xlarge, c5d.18xlarge | 147456 | 5000 | 37748736 | 113246208 | 7549 | 9437184 | 1024 | 131072 | 1 | 1.1 |
m4.10xlarge | 163840 | 5000 | 41943040 | 125829120 | 8388 | 10485760 | 1024 | 131072 | 1 | 1.1 |
c5.24xlarge, c5.metal, c5a.24xlarge, c5ad.24xlarge, c5d.24xlarge, c5d.metal, c5n.18xlarge, c5n.metal, c6a.24xlarge, c6i.24xlarge, c6id.24xlarge, d3en.12xlarge, g4dn.12xlarge, g5.12xlarge, i3en.6xlarge, inf1.24xlarge, is4gen.8xlarge, m5.12xlarge, m5a.12xlarge, m5ad.12xlarge, m5d.12xlarge, m5dn.12xlarge, m5n.12xlarge, m5zn.12xlarge, m5zn.metal, m6a.12xlarge, m6g.12xlarge, m6gd.12xlarge, m6i.12xlarge, m6id.12xlarge, vt1.24xlarge, z1d.6xlarge | 196608 | 5000 | 50331648 | 150994944 | 10066 | 12582912 | 1024 | 131072 | 1 | 1.1 |
d2.8xlarge, f1.4xlarge, g3.8xlarge, i3.8xlarge, p3.8xlarge, r4.8xlarge, x1e.2xlarge | 249856 | 5000 | 63963136 | 191889408 | 12792 | 15990784 | 1024 | 131072 | 1 | 1.1 |
c6a.32xlarge, c6i.32xlarge, c6i.metal, c6id.32xlarge, c6id.metal, d3.8xlarge, g4ad.16xlarge, g4dn.16xlarge, g5.16xlarge, h1.16xlarge, i4i.8xlarge, im4gn.16xlarge, m4.16xlarge, m5.16xlarge, m5a.16xlarge, m5ad.16xlarge, m5d.16xlarge, m5dn.16xlarge, m5n.16xlarge, m6a.16xlarge, m6g.16xlarge, m6g.metal, m6gd.16xlarge, m6gd.metal, m6i.16xlarge, m6id.16xlarge, r5.8xlarge, r5a.8xlarge, r5ad.8xlarge, r5b.8xlarge, r5d.8xlarge, r5dn.8xlarge, r5n.8xlarge, r6a.8xlarge, r6g.8xlarge, r6gd.8xlarge, r6i.8xlarge, r6id.8xlarge, x2gd.4xlarge, x2iedn.2xlarge, x2iezn.2xlarge | 262144 | 5000 | 67108864 | 201326592 | 13421 | 16777216 | 1024 | 131072 | 1 | 1.1 |
c6a.48xlarge, c6a.metal, g4dn.metal, g5.24xlarge, i3en.12xlarge, m5.24xlarge, m5.metal, m5a.24xlarge, m5ad.24xlarge, m5d.24xlarge, m5d.metal, m5dn.24xlarge, m5dn.metal, m5n.24xlarge, m5n.metal, m6a.24xlarge, m6i.24xlarge, m6id.24xlarge, r5.12xlarge, r5a.12xlarge, r5ad.12xlarge, r5b.12xlarge, r5d.12xlarge, r5dn.12xlarge, r5n.12xlarge, r6a.12xlarge, r6g.12xlarge, r6gd.12xlarge, r6i.12xlarge, r6id.12xlarge, z1d.12xlarge, z1d.metal | 393216 | 5000 | 100663296 | 301989888 | 20132 | 25165824 | 1024 | 131072 | 1 | 1.1 |
g3.16xlarge, i3.16xlarge, p2.8xlarge, p3.16xlarge, r4.16xlarge, x1e.4xlarge | 499712 | 5000 | 127926272 | 383778816 | 25585 | 31981568 | 1024 | 131072 | 1 | 1.1 |
i3.metal, i4i.16xlarge, m6a.32xlarge, m6i.32xlarge, m6i.metal, m6id.32xlarge, m6id.metal, r5.16xlarge, r5a.16xlarge, r5ad.16xlarge, r5b.16xlarge, r5d.16xlarge, r5dn.16xlarge, r5n.16xlarge, r6a.16xlarge, r6g.16xlarge, r6g.metal, r6gd.16xlarge, r6gd.metal, r6i.16xlarge, r6id.16xlarge, trn1.32xlarge, x2gd.8xlarge, x2iedn.4xlarge, x2iezn.4xlarge | 524288 | 5000 | 134217728 | 402653184 | 26843 | 33554432 | 1024 | 131072 | 1 | 1.1 |
p2.16xlarge | 749568 | 5000 | 191889408 | 575668224 | 38377 | 47972352 | 1024 | 131072 | 1 | 1.1 |
dl1.24xlarge, g5.48xlarge, i3en.24xlarge, i3en.metal, m6a.48xlarge, m6a.metal, p3dn.24xlarge, r5.24xlarge, r5.metal, r5a.24xlarge, r5ad.24xlarge, r5b.24xlarge, r5b.metal, r5d.24xlarge, r5d.metal, r5dn.24xlarge, r5dn.metal, r5n.24xlarge, r5n.metal, r6a.24xlarge, r6i.24xlarge, r6id.24xlarge, x2gd.12xlarge, x2iezn.6xlarge | 786432 | 5000 | 201326592 | 603979776 | 40265 | 50331648 | 1024 | 131072 | 1 | 1.1 |
f1.16xlarge, x1.16xlarge, x1e.8xlarge | 999424 | 5000 | 255852544 | 767557632 | 51170 | 63963136 | 1024 | 131072 | 1 | 1.1 |
i4i.32xlarge, i4i.metal, r6a.32xlarge, r6i.32xlarge, r6i.metal, r6id.32xlarge, r6id.metal, x2gd.16xlarge, x2gd.metal, x2idn.16xlarge, x2iedn.8xlarge, x2iezn.8xlarge | 1048576 | 5000 | 268435456 | 805306368 | 53687 | 67108864 | 1024 | 131072 | 1 | 1.1 |
p4d.24xlarge | 1179648 | 5000 | 301989888 | 905969664 | 60397 | 75497472 | 1024 | 131072 | 1 | 1.1 |
r6a.48xlarge, r6a.metal, x2idn.24xlarge, x2iezn.12xlarge, x2iezn.metal | 1572864 | 5000 | 402653184 | 1207959552 | 80530 | 100663296 | 1024 | 131072 | 1 | 1.1 |
x1.32xlarge, x1e.16xlarge | 1998848 | 5000 | 511705088 | 1535115264 | 102341 | 127926272 | 1024 | 131072 | 1 | 1.1 |
x2idn.32xlarge, x2idn.metal, x2iedn.16xlarge | 2097152 | 5000 | 536870912 | 1610612736 | 107374 | 134217728 | 1024 | 131072 | 1 | 1.1 |
u-3tb1.56xlarge, x2iedn.24xlarge | 3145728 | 5000 | 805306368 | 2415919104 | 161061 | 201326592 | 1024 | 131072 | 1 | 1.1 |
x1e.32xlarge | 3997696 | 5000 | 1023410176 | 3070230528 | 204682 | 255852544 | 1024 | 131072 | 1 | 1.1 |
x2iedn.32xlarge, x2iedn.metal | 4194304 | 5000 | 1073741824 | 3221225472 | 214748 | 268435456 | 1024 | 131072 | 1 | 1.1 |
u-6tb1.112xlarge, u-6tb1.56xlarge | 6291456 | 5000 | 1610612736 | 4831838208 | 322122 | 402653184 | 1024 | 131072 | 1 | 1.1 |
u-9tb1.112xlarge | 9437184 | 5000 | 2415919104 | 7247757312 | 483183 | 603979776 | 1024 | 131072 | 1 | 1.1 |
u-12tb1.112xlarge | 12582912 | 5000 | 3221225472 | 9663676416 | 644245 | 805306368 | 1024 | 131072 | 1 | 1.1 |
work_mem = shared_buffers / max_connections is a totally reasonable place to start. If you have a number of parallel query plans or other things that end up using multiple workers / connection, you can still run into issues when you are nearing the max_connections, but you are probably fairly safe there. I would make max_connections a required parameter. I fear that the minimum values that are used in the example you found from the RDS docs may end up being quite high. PGStac requires a lot more memory per connection than a "normal" fully indexed OLTP type query in Postgres (which is what that default is designed for). By having a max_connections count too high and following the work_mem formula above, you are going to end up with a really low value for work_mem and a number of queries may need to swap out to disk regularly. You really want your work_mem to be as high as is reasonable for the expected load and the only way to do that is by setting what type of load you want to be able to handle. |
Great, I appreciate the sanity check on that.
I am still unsure, I really want this module to provide "reasonable defaults". I worry that requiring a user to provide a value for |
# [2.2.0](v2.1.0...v2.2.0) (2022-11-03) ### Features * **stac-db:** Provide sensible defaults for pgSTAC db parameters ([#1](#1)) ([11eb89e](11eb89e))
What I am changing
We want to deploy pgSTAC databases with sensible defaults. These values should be overridable by users.
How I did it
I'm hoping that the code is self-evident. I attempted to apply the logic described in DS' DB tuning recommendations but had to take some liberties. For example, for a guideline such as:
I struggled turning this into a rule. I ended up just making the
work_mem = shared_buffers / max_connections
. I'm uncertain if that is an appropriate translation (this obviously results in ashared_buffers
value equalmax_connections * work_mem
, not less).Related Issues
closes developmentseed/asdi-pgstac#8