diff --git a/.github/workflows/docker-image-testing.yml b/.github/workflows/docker-image-testing.yml
index e91027a..9c24ab2 100644
--- a/.github/workflows/docker-image-testing.yml
+++ b/.github/workflows/docker-image-testing.yml
@@ -11,92 +11,127 @@ jobs:
strategy:
matrix:
include:
- - postgres_version: 15
- tags: esgn/pgtuned-testing:15, esgn/pgtuned-testing:latest
- - postgres_version: 15
- postgis_version: 3
- tags: esgn/pgtuned-testing:15-3, esgn/pgtuned-testing:postgis-latest
- - postgres_version: 14
- tags: esgn/pgtuned-testing:14
- - postgres_version: 14
- postgis_version: 3
- tags: esgn/pgtuned-testing:14-3
- - postgres_version: 13
- tags: esgn/pgtuned-testing:13
- - postgres_version: 13
- postgis_version: 3
- tags: esgn/pgtuned-testing:13-3
- - postgres_version: 12
- tags: esgn/pgtuned-testing:12
- - postgres_version: 12
- postgis_version: 3
- tags: esgn/pgtuned-testing:12-3
- - postgres_version: 11-bullseye
- tags: esgn/pgtuned-testing:11
- - postgres_version: 11-bullseye
- postgis_version: 3
- tags: esgn/pgtuned-testing:11-3
- - postgres_version: 11
- postgis_version: 2.5
- tags: esgn/pgtuned-testing:11-2.5
- - postgres_version: 10-bullseye
- tags: esgn/pgtuned-testing:10
- - postgres_version: 10-bullseye
- postgis_version: 3
- tags: esgn/pgtuned-testing:10-3
- - postgres_version: 10
- postgis_version: 2.5
- tags: esgn/pgtuned-testing:10-2.5
- - postgres_version: 10
- postgis_version: 2.4
- tags: esgn/pgtuned-testing:10-2.4
- - postgres_version: 9.6-bullseye
- tags: esgn/pgtuned-testing:9.6
- - postgres_version: 9.6-bullseye
- postgis_version: 3
- tags: esgn/pgtuned-testing:9.6-3
- - postgres_version: 9.6
- postgis_version: 2.5
- tags: esgn/pgtuned-testing:9.6-2.5
- - postgres_version: 9.6
- postgis_version: 2.4
- tags: esgn/pgtuned-testing:9.6-2.4
- - postgres_version: 9.6
- postgis_version: 2.3
- tags: esgn/pgtuned-testing:9.6-2.3
- - postgres_version: 9.5
- tags: esgn/pgtuned-testing:9.5
- - postgres_version: 9.5
- postgis_version: 3
- tags: esgn/pgtuned-testing:9.5-3
- - postgres_version: 9.5
- postgis_version: 2.5
- tags: esgn/pgtuned-testing:9.5-2.5
- - postgres_version: 9.5
- postgis_version: 2.4
- tags: esgn/pgtuned-testing:9.5-24
- - postgres_version: 9.5
- postgis_version: 2.3
- tags: esgn/pgtuned-testing:9.5-2.3
+ # PostgreSQL 17
+ - postgres_version: 17
+ tags: esgn/pgtuned-testing:17, esgn/pgtuned-testing:latest
+ - postgres_version: 17
+ postgis_version: 3
+ tags: esgn/pgtuned-testing:17-3, esgn/pgtuned-testing:postgis-latest
+ # PostgreSQL 16
+ - postgres_version: 16
+ tags: esgn/pgtuned-testing:16
+ - postgres_version: 16
+ postgis_version: 3
+ tags: esgn/pgtuned-testing:16-3
+ # PostgreSQL 15
+ - postgres_version: 15
+ tags: esgn/pgtuned-testing:15
+ - postgres_version: 15
+ postgis_version: 3
+ tags: esgn/pgtuned-testing:15-3
+ # PostgreSQL 14
+ - postgres_version: 14
+ tags: esgn/pgtuned-testing:14
+ - postgres_version: 14
+ postgis_version: 3
+ tags: esgn/pgtuned-testing:14-3
+ # PostgreSQL 13
+ - postgres_version: 13
+ tags: esgn/pgtuned-testing:13
+ - postgres_version: 13
+ postgis_version: 3
+ tags: esgn/pgtuned-testing:13-3
+ # PostgreSQL 12
+ - postgres_version: 12
+ tags: esgn/pgtuned-testing:12
+ - postgres_version: 12
+ postgis_version: 3
+ tags: esgn/pgtuned-testing:12-3
+ # PostgreSQL 11
+ - postgres_version: 11-bullseye
+ tags: esgn/pgtuned-testing:11-bullseye
+ - postgres_version: 11-bullseye
+ postgis_version: 3
+ tags: esgn/pgtuned-testing:11-bullseye-3
+ - postgres_version: 11
+ tags: esgn/pgtuned-testing:11
+ - postgres_version: 11
+ postgis_version: 3
+ tags: esgn/pgtuned-testing:11-3
+ - postgres_version: 11
+ postgis_version: 2.5
+ tags: esgn/pgtuned-testing:11-2.5
+ # PostgreSQL 10
+ - postgres_version: 10-bullseye
+ tags: esgn/pgtuned-testing:10-bullseye
+ - postgres_version: 10-bullseye
+ postgis_version: 3
+ tags: esgn/pgtuned-testing:10-bullseye-3
+ - postgres_version: 10
+ tags: esgn/pgtuned-testing:10
+ - postgres_version: 10
+ postgis_version: 3
+ tags: esgn/pgtuned-testing:10-3
+ - postgres_version: 10
+ postgis_version: 2.5
+ tags: esgn/pgtuned-testing:10-2.5
+ - postgres_version: 10
+ postgis_version: 2.4
+ tags: esgn/pgtuned-testing:10-2.4
+ # PostgreSQL 9.6
+ - postgres_version: 9.6-bullseye
+ tags: esgn/pgtuned-testing:9.6-bullseye
+ - postgres_version: 9.6-bullseye
+ postgis_version: 3
+ tags: esgn/pgtuned-testing:9.6-bullseye-3
+ - postgres_version: 9.6
+ tags: esgn/pgtuned-testing:9.6
+ - postgres_version: 9.6
+ postgis_version: 3
+ tags: esgn/pgtuned-testing:9.6-3
+ - postgres_version: 9.6
+ postgis_version: 2.5
+ tags: esgn/pgtuned-testing:9.6-2.5
+ - postgres_version: 9.6
+ postgis_version: 2.4
+ tags: esgn/pgtuned-testing:9.6-2.4
+ - postgres_version: 9.6
+ postgis_version: 2.3
+ tags: esgn/pgtuned-testing:9.6-2.3
+ # PostgreSQL 9.5
+ - postgres_version: 9.5
+ tags: esgn/pgtuned-testing:9.5
+ - postgres_version: 9.5
+ postgis_version: 3
+ tags: esgn/pgtuned-testing:9.5-3
+ - postgres_version: 9.5
+ postgis_version: 2.5
+ tags: esgn/pgtuned-testing:9.5-2.5
+ - postgres_version: 9.5
+ postgis_version: 2.4
+ tags: esgn/pgtuned-testing:9.5-2.4
+ - postgres_version: 9.5
+ postgis_version: 2.3
+ tags: esgn/pgtuned-testing:9.5-2.3
runs-on: ubuntu-latest
steps:
- - name: Check out the repo
- uses: actions/checkout@v2
+ - name: Check out the repo
+ uses: actions/checkout@v2
- - name: Log in to Docker Hub
- uses: docker/login-action@v1.12.0
- with:
- username: ${{ secrets.DOCKERHUB_USERNAME }}
- password: ${{ secrets.DOCKERHUB_TOKEN }}
+ - name: Log in to Docker Hub
+ uses: docker/login-action@v1.12.0
+ with:
+ username: ${{ secrets.DOCKERHUB_USERNAME }}
+ password: ${{ secrets.DOCKERHUB_TOKEN }}
- - name: Build docker image
- uses: docker/build-push-action@v2.9.0
- with:
- context: .
- push: true
- build-args: |
- POSTGRES_VERSION=${{ matrix.postgres_version }}
- POSTGIS_VERSION=${{ matrix.postgis_version }}
- tags: ${{ matrix.tags }}
+ - name: Build docker image
+ uses: docker/build-push-action@v2.9.0
+ with:
+ context: .
+ push: true
+ build-args: |
+ POSTGRES_VERSION=${{ matrix.postgres_version }}
+ POSTGIS_VERSION=${{ matrix.postgis_version }}
+ tags: ${{ matrix.tags }}
diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml
index 388a698..642233c 100644
--- a/.github/workflows/docker-image.yml
+++ b/.github/workflows/docker-image.yml
@@ -11,92 +11,127 @@ jobs:
strategy:
matrix:
include:
- - postgres_version: 15
- tags: esgn/pgtuned:15, esgn/pgtuned:latest
- - postgres_version: 15
- postgis_version: 3
- tags: esgn/pgtuned:15-3, esgn/pgtuned:postgis-latest
- - postgres_version: 14
- tags: esgn/pgtuned:14
- - postgres_version: 14
- postgis_version: 3
- tags: esgn/pgtuned:14-3
- - postgres_version: 13
- tags: esgn/pgtuned:13
- - postgres_version: 13
- postgis_version: 3
- tags: esgn/pgtuned:13-3
- - postgres_version: 12
- tags: esgn/pgtuned:12
- - postgres_version: 12
- postgis_version: 3
- tags: esgn/pgtuned:12-3
- - postgres_version: 11-bullseye
- tags: esgn/pgtuned:11
- - postgres_version: 11-bullseye
- postgis_version: 3
- tags: esgn/pgtuned:11-3
- - postgres_version: 11
- postgis_version: 2.5
- tags: esgn/pgtuned:11-2.5
- - postgres_version: 10-bullseye
- tags: esgn/pgtuned:10
- - postgres_version: 10-bullseye
- postgis_version: 3
- tags: esgn/pgtuned:10-3
- - postgres_version: 10
- postgis_version: 2.5
- tags: esgn/pgtuned:10-2.5
- - postgres_version: 10
- postgis_version: 2.4
- tags: esgn/pgtuned:10-2.4
- - postgres_version: 9.6-bullseye
- tags: esgn/pgtuned:9.6
- - postgres_version: 9.6-bullseye
- postgis_version: 3
- tags: esgn/pgtuned:9.6-3
- - postgres_version: 9.6
- postgis_version: 2.5
- tags: esgn/pgtuned:9.6-2.5
- - postgres_version: 9.6
- postgis_version: 2.4
- tags: esgn/pgtuned:9.6-2.4
- - postgres_version: 9.6
- postgis_version: 2.3
- tags: esgn/pgtuned:9.6-2.3
- - postgres_version: 9.5
- tags: esgn/pgtuned:9.5
- - postgres_version: 9.5
- postgis_version: 3
- tags: esgn/pgtuned:9.5-3
- - postgres_version: 9.5
- postgis_version: 2.5
- tags: esgn/pgtuned:9.5-2.5
- - postgres_version: 9.5
- postgis_version: 2.4
- tags: esgn/pgtuned:9.5-24
- - postgres_version: 9.5
- postgis_version: 2.3
- tags: esgn/pgtuned:9.5-2.3
+ # PostgreSQL 17
+ - postgres_version: 17
+ tags: esgn/pgtuned:17, esgn/pgtuned:latest
+ - postgres_version: 16
+ postgis_version: 3
+ tags: esgn/pgtuned:17-3, esgn/pgtuned:postgis-latest
+ # PostgreSQL 16
+ - postgres_version: 16
+ tags: esgn/pgtuned:16
+ - postgres_version: 16
+ postgis_version: 3
+ tags: esgn/pgtuned:16-3
+ # PostgreSQL 15
+ - postgres_version: 15
+ tags: esgn/pgtuned:15
+ - postgres_version: 15
+ postgis_version: 3
+ tags: esgn/pgtuned:15-3
+ # PostgreSQL 14
+ - postgres_version: 14
+ tags: esgn/pgtuned:14
+ - postgres_version: 14
+ postgis_version: 3
+ tags: esgn/pgtuned:14-3
+ # PostgreSQL 13
+ - postgres_version: 13
+ tags: esgn/pgtuned:13
+ - postgres_version: 13
+ postgis_version: 3
+ tags: esgn/pgtuned:13-3
+ # PostgreSQL 12
+ - postgres_version: 12
+ tags: esgn/pgtuned:12
+ - postgres_version: 12
+ postgis_version: 3
+ tags: esgn/pgtuned:12-3
+ # PostgreSQL 11
+ - postgres_version: 11-bullseye
+ tags: esgn/pgtuned:11-bullseye
+ - postgres_version: 11-bullseye
+ postgis_version: 3
+ tags: esgn/pgtuned:11-bullseye-3
+ - postgres_version: 11
+ tags: esgn/pgtuned:11
+ - postgres_version: 11
+ postgis_version: 3
+ tags: esgn/pgtuned:11-3
+ - postgres_version: 11
+ postgis_version: 2.5
+ tags: esgn/pgtuned:11-2.5
+ # PostgreSQL 10
+ - postgres_version: 10-bullseye
+ tags: esgn/pgtuned:10-bullseye
+ - postgres_version: 10-bullseye
+ postgis_version: 3
+ tags: esgn/pgtuned:10-bullseye-3
+ - postgres_version: 10
+ tags: esgn/pgtuned:10
+ - postgres_version: 10
+ postgis_version: 3
+ tags: esgn/pgtuned:10-3
+ - postgres_version: 10
+ postgis_version: 2.5
+ tags: esgn/pgtuned:10-2.5
+ - postgres_version: 10
+ postgis_version: 2.4
+ tags: esgn/pgtuned:10-2.4
+ # PostgreSQL 9.6
+ - postgres_version: 9.6-bullseye
+ tags: esgn/pgtuned:9.6-bullseye
+ - postgres_version: 9.6-bullseye
+ postgis_version: 3
+ tags: esgn/pgtuned:9.6-bullseye-3
+ - postgres_version: 9.6
+ tags: esgn/pgtuned:9.6
+ - postgres_version: 9.6
+ postgis_version: 3
+ tags: esgn/pgtuned:9.6-3
+ - postgres_version: 9.6
+ postgis_version: 2.5
+ tags: esgn/pgtuned:9.6-2.5
+ - postgres_version: 9.6
+ postgis_version: 2.4
+ tags: esgn/pgtuned:9.6-2.4
+ - postgres_version: 9.6
+ postgis_version: 2.3
+ tags: esgn/pgtuned:9.6-2.3
+ # PostgreSQL 9.5
+ - postgres_version: 9.5
+ tags: esgn/pgtuned:9.5
+ - postgres_version: 9.5
+ postgis_version: 3
+ tags: esgn/pgtuned:9.5-3
+ - postgres_version: 9.5
+ postgis_version: 2.5
+ tags: esgn/pgtuned:9.5-2.5
+ - postgres_version: 9.5
+ postgis_version: 2.4
+ tags: esgn/pgtuned:9.5-2.4
+ - postgres_version: 9.5
+ postgis_version: 2.3
+ tags: esgn/pgtuned:9.5-2.3
runs-on: ubuntu-latest
steps:
- - name: Check out the repo
- uses: actions/checkout@v2
+ - name: Check out the repo
+ uses: actions/checkout@v2
- - name: Log in to Docker Hub
- uses: docker/login-action@v1.12.0
- with:
- username: ${{ secrets.DOCKERHUB_USERNAME }}
- password: ${{ secrets.DOCKERHUB_TOKEN }}
+ - name: Log in to Docker Hub
+ uses: docker/login-action@v1.12.0
+ with:
+ username: ${{ secrets.DOCKERHUB_USERNAME }}
+ password: ${{ secrets.DOCKERHUB_TOKEN }}
- - name: Build docker image
- uses: docker/build-push-action@v2.9.0
- with:
- context: .
- push: true
- build-args: |
- POSTGRES_VERSION=${{ matrix.postgres_version }}
- POSTGIS_VERSION=${{ matrix.postgis_version }}
- tags: ${{ matrix.tags }}
+ - name: Build docker image
+ uses: docker/build-push-action@v2.9.0
+ with:
+ context: .
+ push: true
+ build-args: |
+ POSTGRES_VERSION=${{ matrix.postgres_version }}
+ POSTGIS_VERSION=${{ matrix.postgis_version }}
+ tags: ${{ matrix.tags }}
diff --git a/.gitignore b/.gitignore
index 2211df6..31caacb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,3 @@
*.txt
+!test/expected_results/*.txt
+delete_this/
\ No newline at end of file
diff --git a/Dockerfile b/Dockerfile
index 2801ac2..fc289de 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,4 +1,4 @@
-ARG POSTGRES_VERSION=15
+ARG POSTGRES_VERSION=17
FROM postgres:${POSTGRES_VERSION}
diff --git a/README.md b/README.md
index 104e214..53884e2 100644
--- a/README.md
+++ b/README.md
@@ -4,21 +4,23 @@ PGTuned is a first attempt at building Docker PostgreSQL/PostGIS images which in
This project includes a bash script equivalent of [PGTune](https://github.com/le0pard/pgtune).
-## `pgtune.sh`
+## PGTune bash port
+
+### `pgtune.sh`
This `pgtune.sh` script is a bash port of [PGTune](https://github.com/le0pard/pgtune) with additions for system resources detection.
All arguments have been rendered optional. The script will either use default value or try and automatically determine the parameter value.
```
-Usage: pgtune.sh [-h] [-v PG_VERSION] [-t DB_TYPE] [-m TOTAL_MEM] [-u CPU_COUNT] [-c MAX_CONN] [-s STGE_TYPE]
+Usage: ${0##*/} [-h] [-v PG_VERSION] [-t DB_TYPE] [-m TOTAL_MEM] [-u CPU_COUNT] [-c MAX_CONN] [-s STGE_TYPE]
This script is a bash port of PGTune (https://pgtune.leopard.in.ua).
It produces a postgresql.conf file based on supplied parameters.
-h display this help and exit
-v PG_VERSION (optional) PostgreSQL version
- accepted values: 9.5, 9.6, 10, 11, 12, 13, 14, 15
- default value: 15
+ accepted values: 9.5, 9.6, 10, 11, 12, 13, 14, 15, 16, 17
+ default value: 17
-t DB_TYPE (optional) For what type of application is PostgreSQL used
accepted values: web, oltp, dw, desktop, mixed
default value: web
@@ -31,17 +33,17 @@ It produces a postgresql.conf file based on supplied parameters.
default value: this script will try to determine the CPUs count and exit in case of failure
-c MAX_CONN (optional) Maximum number of PostgreSQL client connections
accepted values: integer between 20 and 9999
- default value: preset corresponding to db_type
+ default value: preset corresponding to DB_TYPE
-s STGE_TYPE (optional) Type of data storage device used with PostgreSQL
accepted values: hdd, ssd, san
- default value: this script will try to determine the storage type (san not supported) and use hdd
- value in case of failure.
+ default value: this script will try to determine the storage type (san not supported)
+ and use hdd value in case of failure.
```
-## `test.sh`
+### `test_pgtune.sh`
+
+The `test_pgtune.sh` script available in `test/scripts` compares a selected number of `pgtune.sh` results with pre-generated `postgresql.conf` available in `test/expected_results`.
-The `test.sh` compares a selected number of `pgtune.sh` results with pre-generated `postgresql.conf` available in `test_files/`.
-
## Building and running PGTuned Docker image
@@ -52,13 +54,13 @@ When running the PGTuned image as a container, the `pgtuned.sh` script replaces
### Building PGTuned image
The build stage of the PGTuned image accepts **two optional build arguments** :
-* `POSTGRES_VERSION` corresponds to any tag available in the [official PostgreSQL Docker image](https://hub.docker.com/_/postgres) save the `alpine` tags (examples : 14, 13.6, 11.15-stretch, ...). If omitted the `15` tag will be used.
+* `POSTGRES_VERSION` corresponds to any tag available in the [official PostgreSQL Docker image](https://hub.docker.com/_/postgres) save the `alpine` tags (examples : 14, 13.6, 11.15-stretch, ...). If omitted the `17` tag will be used.
* `POSTGIS_VERSION` corresponds to the version of [PostGIS](https://postgis.net/) that will be installed. The selected version of PostGIS must be available in the packages of the chosen PostgreSQL image. If omitted PostGIS will not be installed.
Below are command line examples to build different version of the PGTuned image :
-* Build the `pgtuned` image using `postgres:15` image **without PostGIS** :
+* Build the `pgtuned` image using `postgres:17` image **without PostGIS** :
```
docker build --no-cache . -t pgtuned
@@ -82,25 +84,35 @@ docker build --no-cache --build-arg POSTGRES_VERSION=11 --build-arg POSTGIS_VERS
check_compatibility.sh
+Examining postgres:17
+######################
+Available PostGIS versions : 3
+Running on Debian GNU/Linux 12 (bookworm)
+
+Examining postgres:16
+######################
+Available PostGIS versions : 3
+Running on Debian GNU/Linux 12 (bookworm)
+
Examining postgres:15
######################
Available PostGIS versions : 3
-Running on Debian GNU/Linux 11 (bullseye)
+Running on Debian GNU/Linux 12 (bookworm)
Examining postgres:14
######################
Available PostGIS versions : 3
-Running on Debian GNU/Linux 11 (bullseye)
+Running on Debian GNU/Linux 12 (bookworm)
Examining postgres:13
######################
Available PostGIS versions : 3
-Running on Debian GNU/Linux 11 (bullseye)
+Running on Debian GNU/Linux 12 (bookworm)
Examining postgres:12
######################
Available PostGIS versions : 3
-Running on Debian GNU/Linux 11 (bullseye)
+Running on Debian GNU/Linux 12 (bookworm)
Examining postgres:11
######################
diff --git a/apt_archive_patch.sh b/apt_archive_patch.sh
index 1722042..5985e9c 100644
--- a/apt_archive_patch.sh
+++ b/apt_archive_patch.sh
@@ -1,17 +1,20 @@
#!/usr/bin/env bash
# This script updates the pgdg.list source file present in Debian stretch images
-# in order to use apt-archive.postgres.org. This is necessary to apt update as stretch
+# in order to use apt-archive.postgres.org. This is necessary to apt update as stretch
# has been cycled out and to get access to older versions of PostGIS
-codename=$(source /etc/os-release && echo -n $VERSION_CODENAME)
+codename=$(source /etc/os-release && echo -n "$VERSION_CODENAME")
if [ "$codename" = "stretch" ]
then
- cd /etc/apt/sources.list.d/
+ sed -i 's/deb\.debian\.org/archive\.debian\.org/' /etc/apt/sources.list
+ sed -i 's/security\.debian\.org/archive\.debian\.org/' /etc/apt/sources.list
+ sed -i '/stretch-updates/d' /etc/apt/sources.list
+ cd /etc/apt/sources.list.d/ || exit
mv pgdg.list pgdg.list.backup
apt-get -qq update
- apt-get install apt-transport-https -y
+ apt-get -qq install apt-transport-https -y
sed -i "s/http\:\/\/apt\.postgres/https\:\/\/apt-archive\.postgres/" pgdg.list.backup
mv pgdg.list.backup pgdg.list
fi
diff --git a/pgtune.sh b/pgtune.sh
index 2186b0d..0dd7710 100644
--- a/pgtune.sh
+++ b/pgtune.sh
@@ -1,10 +1,23 @@
#!/usr/bin/env bash
+#######################################
+# Constants definition
+#######################################
KB=1024
MB=1048576
GB=1073741824
+TB=1099511627776
+TOTAL_MEM=0
+CPU_NUM=0
+STORAGE_TYPE=""
+CONN_NUM=0
+DB_TYPE=""
+DB_VERSION=0
-show_help() {
+#######################################
+# Display help message
+#######################################
+function show_help() {
cat << EOF
Usage: ${0##*/} [-h] [-v PG_VERSION] [-t DB_TYPE] [-m TOTAL_MEM] [-u CPU_COUNT] [-c MAX_CONN] [-s STGE_TYPE]
@@ -13,8 +26,8 @@ It produces a postgresql.conf file based on supplied parameters.
-h display this help and exit
-v PG_VERSION (optional) PostgreSQL version
- accepted values: 9.5, 9.6, 10, 11, 12, 13, 14, 15
- default value: 15
+ accepted values: 9.5, 9.6, 10, 11, 12, 13, 14, 15, 16, 17
+ default value: 17
-t DB_TYPE (optional) For what type of application is PostgreSQL used
accepted values: web, oltp, dw, desktop, mixed
default value: web
@@ -27,51 +40,94 @@ It produces a postgresql.conf file based on supplied parameters.
default value: this script will try to determine the CPUs count and exit in case of failure
-c MAX_CONN (optional) Maximum number of PostgreSQL client connections
accepted values: integer between 20 and 9999
- default value: preset corresponding to db_type
+ default value: preset corresponding to DB_TYPE
-s STGE_TYPE (optional) Type of data storage device used with PostgreSQL
accepted values: hdd, ssd, san
- default value: this script will try to determine the storage type (san not supported) and use hdd
- value in case of failure.
+ default value: this script will try to determine the storage type (san not supported)
+ and use hdd value in case of failure.
EOF
}
-_warn() {
- echo >&2 "[pgtune.sh] $*"
+#######################################
+# Utility function to print a warning.
+# Arguments:
+# Message to print as warning
+#######################################
+function _warn() {
+ echo "[pgtune.sh] warning: $*" >&2
}
-_input_error() {
- echo >&2 "[pgtune.sh] input error: $*"
+#######################################
+# Utility function to print an error
+# related to an input value
+# Arguments:
+# Message to print as input error
+#######################################
+function _input_error() {
+ echo "[pgtune.sh] input error: $*" >&2
exit 1
}
-_error() {
- echo >&2 "[pgtune.sh] error: $*"
+###########################################
+# Utility function to print error messages.
+# Arguments:
+# Message to print as error
+###########################################
+function _error() {
+ echo "[pgtune.sh] error: $*" >&2
exit 2
}
-get_total_ram () {
- local total_ram=$(cat /proc/meminfo | grep -i 'memtotal' | grep -o '[[:digit:]]*')
- if [[ -z $total_ram ]] || [[ "$total_ram" -eq "0" ]]
- then
- _error "cannot detect total memory size, terminating script. Please supply -m TOTAL_MEM."
+################################################
+# Get total RAM amount in kB from /proc/meminfo.
+# Arguments:
+# None
+# Outputs:
+# Total RAM in kB
+################################################
+function get_total_ram () {
+ local -i total_ram
+ total_ram=$(< /proc/meminfo grep -i 'memtotal' | grep -o '[[:digit:]]*')
+ if [[ -z $total_ram ]] || [[ "$total_ram" -eq "0" ]]; then
+ _error "Cannot detect total memory size, terminating script. Please supply -m TOTAL_MEM."
fi
- echo $total_ram
+ echo "$total_ram"
}
-get_cpu_count () {
- local cpu_count=$(nproc --all)
- if [[ -z $cpu_count ]] || [[ "$cpu_count" -eq "0" ]]
- then
- _error "cannot detect cpu count, terminating script. Please supply -u CPU_COUNT."
+##########################################
+# Get CPU cores count using nproc command.
+# Arguments:
+# None
+# Outputs:
+# Number of CPU cores
+##########################################
+function get_cpu_count () {
+ local -i cpu_count
+ cpu_count=$(nproc --all)
+ if [[ -z $cpu_count ]] || [[ "$cpu_count" -eq "0" ]]; then
+ _error "Cannot detect CPU count, terminating script. Please supply -u CPU_COUNT."
fi
- echo $cpu_count
+ echo "$cpu_count"
}
-get_disk_type () {
+####################################################
+# Try and guess the disk type using findmnt command
+# and information available in /sys/block.
+# Could greatly be improved.
+# Globals:
+# PGDATA: used
+# Arguments:
+# None
+# Outputs:
+# Type of disks : 'ssd' or 'hdd'
+####################################################
+function get_disk_type () {
# PGDATA should always be defined in base postgres image
# findmnt should also be installed by default
- local disk_name=$(basename $(findmnt -v -n -o SOURCE --target $PGDATA 2>/dev/null) 2>/dev/null)
- local disk_type_clue=$(cat /sys/block/$disk_name/queue/rotational 2>/dev/null)
+ local disk_name
+ local disk_type_clue
+ disk_name="$(basename "$(findmnt -v -n -o SOURCE --target "$PGDATA" 2>/dev/null)" 2>/dev/null)"
+ disk_type_clue="$(cat /sys/block/"$disk_name"/queue/rotational 2>/dev/null)"
case "$disk_type_clue" in
"0")
disk_type="ssd"
@@ -80,23 +136,32 @@ get_disk_type () {
disk_type="hdd"
;;
*)
- _warn "cannot detect disk type, hdd type will be used. Supply -s STGE_TYPE if necessary."
+ _warn "Cannot detect disk type. 'hdd' type will be used as STGE_TYPE argument was not supplied."
disk_type="hdd"
;;
esac
echo $disk_type
}
-set_db_default_values() {
- case "$db_version" in
+###############################################
+# Set default config values depending
+# on PostgreSQL version number.
+# Globals:
+# DB_VERSION: used
+# max_worker_processes: modified
+# max_parallel_workers_per_gather: modified
+# max_parallel_workers: modified
+###############################################
+function set_db_default_values() {
+ case "$DB_VERSION" in
"9.5")
- max_worker_processes=8
+ #max_worker_processes=8
;;
"9.6")
- max_worker_processes=8
+ #max_worker_processes=8
max_parallel_workers_per_gather=0
;;
- "10" | "11" | "12" | "13" | "14" | "15")
+ "10" | "11" | "12" | "13" | "14" | "15" | "16" | "17")
max_worker_processes=8
max_parallel_workers_per_gather=2
max_parallel_workers=8
@@ -107,84 +172,115 @@ set_db_default_values() {
esac
}
-set_shared_buffers() {
- case "$db_type" in
+###################################
+# Set shared_buffers config value.
+# Globals:
+# DB_TYPE: used
+# TOTAL_MEM: used
+# shared_buffers: modified
+###################################
+function set_shared_buffers() {
+ case "$DB_TYPE" in
"web")
- shared_buffers=$(( $total_mem/4 ))
+ shared_buffers=$(( TOTAL_MEM/4 ))
;;
"oltp")
- shared_buffers=$(( $total_mem/4 ))
+ shared_buffers=$(( TOTAL_MEM/4 ))
;;
"dw")
- shared_buffers=$(( $total_mem/4 ))
+ shared_buffers=$(( TOTAL_MEM/4 ))
;;
"desktop")
- shared_buffers=$(( $total_mem/16 ))
+ shared_buffers=$(( TOTAL_MEM/16 ))
;;
"mixed")
- shared_buffers=$(( $total_mem/4 ))
+ shared_buffers=$(( TOTAL_MEM/4 ))
;;
*)
- _error "unknown db_type, cannot calculate shared_buffers"
+ _error "unknown DB_TYPE, cannot calculate shared_buffers"
;;
esac
+ # Ignoring windows specific case here
}
-set_effective_cache_size() {
- case "$db_type" in
+#############################################
+# Set set_effective_cache_size config value.
+# Globals:
+# DB_TYPE: used
+# TOTAL_MEM: used
+# effective_cache_size: modified
+#############################################
+function set_effective_cache_size() {
+ case "$DB_TYPE" in
"web")
- effective_cache_size=$(( $total_mem*3/4 ))
+ effective_cache_size=$(( TOTAL_MEM*3/4 ))
;;
"oltp")
- effective_cache_size=$(( $total_mem*3/4 ))
+ effective_cache_size=$(( TOTAL_MEM*3/4 ))
;;
"dw")
- effective_cache_size=$(( $total_mem*3/4 ))
+ effective_cache_size=$(( TOTAL_MEM*3/4 ))
;;
"desktop")
- effective_cache_size=$(( $total_mem/4 ))
+ effective_cache_size=$(( TOTAL_MEM/4 ))
;;
"mixed")
- effective_cache_size=$(( $total_mem*3/4 ))
+ effective_cache_size=$(( TOTAL_MEM*3/4 ))
;;
*)
- _error "unknown db_type, cannot calculate effective_cache_size"
+ _error "unknown DB_TYPE, cannot calculate effective_cache_size"
;;
esac
}
-set_maintenance_work_mem() {
- case "$db_type" in
+#############################################
+# Set set_maintenance_work_mem config value.
+# Globals:
+# DB_TYPE: used
+# TOTAL_MEM: used
+# effective_cache_size: modified
+#############################################
+function set_maintenance_work_mem() {
+ local mem_limit=$(( 2 * GB / KB ))
+ case "$DB_TYPE" in
"web")
- maintenance_work_mem=$(( $total_mem/16 ))
+ maintenance_work_mem=$(( TOTAL_MEM/16 ))
;;
"oltp")
- maintenance_work_mem=$(( $total_mem/16 ))
+ maintenance_work_mem=$(( TOTAL_MEM/16 ))
;;
"dw")
- maintenance_work_mem=$(( $total_mem/8 ))
+ maintenance_work_mem=$(( TOTAL_MEM/8 ))
;;
"desktop")
- maintenance_work_mem=$(( $total_mem/16 ))
+ maintenance_work_mem=$(( TOTAL_MEM/16 ))
;;
"mixed")
- maintenance_work_mem=$(( $total_mem/16 ))
+ maintenance_work_mem=$(( TOTAL_MEM/16 ))
;;
*)
- _error "unknown db_type, cannot calculate maintenance_work_mem"
+ _error "unknown DB_TYPE, cannot calculate maintenance_work_mem"
;;
esac
- local mem_limit=$(( 2 * $GB / $KB ))
- if [ "$maintenance_work_mem" -gt "$mem_limit" ]
- then
+ if [ "$maintenance_work_mem" -ge "$mem_limit" ]; then
maintenance_work_mem=$mem_limit
+ # Ignoring windows specific case here
fi
}
-set_checkpoint_segments() {
- if [ ${db_version%.*} -le 9 ] && [ ${db_version//./} -lt 95 ]
- then
- case "$db_type" in
+#######################################
+# Set checkpoint_segments, min_wal_size
+# and max_wal_size config values.
+# Globals:
+# DB_VERSION: used
+# DB_TYPE: used
+# checkpoint_segments: modified
+# min_wal_size: modified
+# max_wal_size: modified
+#######################################
+function set_checkpoint_segments() {
+ if [ "${DB_VERSION%.*}" -le 9 ] && [ "${DB_VERSION//./}" -lt 95 ]; then
+ case "$DB_TYPE" in
"web")
checkpoint_segments=32
;;
@@ -201,69 +297,83 @@ set_checkpoint_segments() {
checkpoint_segments=32
;;
*)
- _error "unknown db_type, cannot calculate checkpoint_segments"
+ _error "unknown DB_TYPE, cannot calculate checkpoint_segments"
;;
esac
else
- case "$db_type" in
+ case "$DB_TYPE" in
"web")
- min_wal_size=$(( 1024 * $MB / $KB ))
- max_wal_size=$(( 4096 * $MB / $KB ))
+ min_wal_size=$(( 1024 * MB / KB ))
+ max_wal_size=$(( 4096 * MB / KB ))
;;
"oltp")
- min_wal_size=$(( 2048 * $MB / $KB ))
- max_wal_size=$(( 8192 * $MB / $KB ))
+ min_wal_size=$(( 2048 * MB / KB ))
+ max_wal_size=$(( 8192 * MB / KB ))
;;
"dw")
- min_wal_size=$(( 4096 * $MB / $KB ))
- max_wal_size=$(( 16384 * $MB / $KB ))
+ min_wal_size=$(( 4096 * MB / KB ))
+ max_wal_size=$(( 16384 * MB / KB ))
;;
"desktop")
- min_wal_size=$(( 100 * $MB / $KB ))
- max_wal_size=$(( 2048 * $MB / $KB ))
+ min_wal_size=$(( 100 * MB / KB ))
+ max_wal_size=$(( 2048 * MB / KB ))
;;
"mixed")
- min_wal_size=$(( 1024 * $MB / $KB ))
- max_wal_size=$(( 4096 * $MB / $KB ))
+ min_wal_size=$(( 1024 * MB / KB ))
+ max_wal_size=$(( 4096 * MB / KB ))
;;
*)
- _error "unknown db_type, cannot calculate min_wal_size"
+ _error "unknown DB_TYPE, cannot calculate min_wal_size"
;;
esac
fi
}
-set_checkpoint_completion_target() {
+####################################################
+# Set set_checkpoint_completion_target config value.
+# Globals:
+# checkpoint_completion_target: modified
+####################################################
+function set_checkpoint_completion_target() {
# based on https://github.com/postgres/postgres/commit/bbcc4eb2
checkpoint_completion_target=0.9
}
-set_wal_buffers() {
+#######################################
+# Set set_wal_buffers config value.
+# Globals:
+# shared_buffers: used
+# wal_buffers: modified
+#######################################
+function set_wal_buffers() {
# Follow auto-tuning guideline for wal_buffers added in 9.1, where it's
- # set to 3% of shared_buffers up to a maximum of 16MB.
- wal_buffers=$(( 3 * $shared_buffers / 100 ))
- local max_wal_buffers=$(( 16 * $MB / $KB ))
- if [ "$wal_buffers" -gt "$max_wal_buffers" ]
- then
+ # set to 3% of shared_buffers up to a maximum of 16MB.
+ wal_buffers=$(( 3 * shared_buffers / 100 ))
+ local max_wal_buffers=$(( 16 * MB / KB ))
+ if [ "$wal_buffers" -gt "$max_wal_buffers" ];then
wal_buffers=$max_wal_buffers
fi
# It's nice if wal_buffers is an even 16MB if it's near that number. Since
# that is a common case on Windows, where shared_buffers is clipped to 512MB,
# round upwards in that situation
local near_max_wal_buffers=$(( 14 * MB / KB ))
- if [ "$wal_buffers" -gt "$near_max_wal_buffers" ] && [ "$wal_buffers" -lt "$max_wal_buffers" ]
- then
+ if [ "$wal_buffers" -gt "$near_max_wal_buffers" ] && [ "$wal_buffers" -lt "$max_wal_buffers" ]; then
wal_buffers=$max_wal_buffers
fi
# if less, than 32 kb, than set it to minimum
- if [ "$wal_buffers" -lt 32 ]
- then
+ if [ "$wal_buffers" -lt 32 ]; then
wal_buffers=32
fi
}
-set_default_statistics_target() {
- case "$db_type" in
+#################################################
+# Set set_default_statistics_target config value.
+# Globals:
+# DB_TYPE: used
+# default_statistics_target: modified
+#################################################
+function set_default_statistics_target() {
+ case "$DB_TYPE" in
"web")
default_statistics_target=100
;;
@@ -280,13 +390,19 @@ set_default_statistics_target() {
default_statistics_target=100
;;
*)
- _error "unknown db_type, cannot calculate default_statistics_target"
+ _error "unknown DB_TYPE, cannot calculate default_statistics_target"
;;
esac
}
-set_random_page_cost() {
- case "$storage_type" in
+########################################
+# Set set_random_page_cost config value.
+# Globals:
+# STORAGE_TYPE: used
+# random_page_cost: modified
+########################################
+function set_random_page_cost() {
+ case "$STORAGE_TYPE" in
"ssd")
random_page_cost=1.1
;;
@@ -297,13 +413,19 @@ set_random_page_cost() {
random_page_cost=1.1
;;
*)
- _error "unknown storage_type, cannot calculate random_page_cost"
+ _error "unknown STORAGE_TYPE, cannot calculate random_page_cost"
;;
esac
}
-set_effective_io_concurrency() {
- case "$storage_type" in
+############################################
+# Set effective_io_concurrency config value.
+# Globals:
+# STORAGE_TYPE: used
+# effective_io_concurrency: modified
+############################################
+function set_effective_io_concurrency() {
+ case "$STORAGE_TYPE" in
"ssd")
effective_io_concurrency=200
;;
@@ -314,56 +436,94 @@ set_effective_io_concurrency() {
effective_io_concurrency=300
;;
*)
- _error "unknown storage_type, cannot calculate effective_io_concurrency"
+ _error "unknown STORAGE_TYPE, cannot calculate effective_io_concurrency"
;;
esac
}
-set_parallel_settings() {
+#############################################################
+# Set max_worker_processes, max_parallel_workers_per_gather,
+# workers_per_gather, maintenance_workers
+# and max_parallel_maintenance_workers config values.
+# These values are stored in a parallel_settings array.
+# Globals:
+# CPU_NUM: used
+# DB_VERSION: used
+# DB_TYPE: used
+# max_worker_processes: modified
+# max_parallel_workers_per_gather: modified
+# workers_per_gather: modified
+# maintenance_workers: modified
+# max_parallel_maintenance_workers: modified
+# parallel_settings: modified
+#############################################################
+function set_parallel_settings() {
declare -Ag parallel_settings
- if [ "$cpu_num" -lt 2 ] || ( [ ${db_version%.*} -le 9 ] && [ ${db_version//./} -lt 95 ] )
- then
+ declare -ag orders
+ if [ "$CPU_NUM" -lt 2 ] || { [ "${DB_VERSION%.*}" -le 9 ] && [ "${DB_VERSION//./}" -lt 95 ]; }; then
return 0
fi
- parallel_settings[max_worker_processes]="$cpu_num"
- if [ "${db_version//./}" -ge "96" ] || [ ${db_version%.*} -ge 10 ]
- then
- workers_per_gather=$(( $cpu_num / 2 ))
- if [ $workers_per_gather -gt 4 ] && [[ "$db_type" != "dw" ]]
- then
+ if [ "${DB_VERSION%.*}" -ge 10 ] && [ "$CPU_NUM" -lt 4 ]; then
+ return 0
+ fi
+ parallel_settings["max_worker_processes"]="$CPU_NUM"
+ orders+=( "max_worker_processes" )
+ if [ "${DB_VERSION//./}" -ge "96" ] || [ "${DB_VERSION%.*}" -ge 10 ]; then
+ workers_per_gather=$(( CPU_NUM / 2 ))
+ if [ $workers_per_gather -gt 4 ] && [[ "$DB_TYPE" != "dw" ]]; then
workers_per_gather=4
fi
- parallel_settings[max_parallel_workers_per_gather]="$workers_per_gather"
+ parallel_settings["max_parallel_workers_per_gather"]="$workers_per_gather"
+ orders+=( "max_parallel_workers_per_gather" )
fi
- if [ ${db_version%.*} -ge 10 ]
- then
- parallel_settings[max_parallel_workers]="$cpu_num"
+ if [ "${DB_VERSION%.*}" -ge 10 ]; then
+ parallel_settings["max_parallel_workers"]="$CPU_NUM"
+ orders+=( "max_parallel_workers" )
fi
- if [ ${db_version%.*} -ge 11 ]
- then
- maintenance_workers=$(( $cpu_num / 2 ))
- if [ $maintenance_workers -gt 4 ]
- then
+ if [ "${DB_VERSION%.*}" -ge 11 ]; then
+ maintenance_workers=$(( CPU_NUM / 2 ))
+ if [ $maintenance_workers -gt 4 ]; then
maintenance_workers=4
fi
- parallel_settings[max_parallel_maintenance_workers]="$maintenance_workers"
+ parallel_settings["max_parallel_maintenance_workers"]="$maintenance_workers"
+ orders+=( "max_parallel_maintenance_workers" )
fi
}
-set_work_mem() {
- parallel_for_work_mem=1
- if [ "${#parallel_settings[@]}" -gt "0" ]
- then
- if [[ ${parallel_settings[max_parallel_workers_per_gather]} ]]
- then
- parallel_for_work_mem=${parallel_settings[max_parallel_workers_per_gather]}
+###########################################
+# Set work_mem config value.
+# Globals:
+# DB_TYPE: used
+# parallel_settings: used
+# max_parallel_workers_per_gather: used
+# TOTAL_MEM: used
+# shared_buffers: used
+# CONN_NUM: used
+# work_mem: modified
+###########################################
+function set_work_mem() {
+ local -i parallel_for_work_mem=1
+ if [ "${#parallel_settings[@]}" -gt "0" ]; then
+ if [[ ${parallel_settings["max_worker_processes"]} ]]; then
+ parallel_for_work_mem=${parallel_settings["max_worker_processes"]}
fi
- elif [ ! -z ${max_parallel_workers_per_gather+x} ]
- then
- parallel_for_work_mem=$max_parallel_workers_per_gather
+ elif [ -n "${max_worker_processes+x}" ]; then
+ parallel_for_work_mem=$max_worker_processes
fi
- work_mem_value=$(( ($total_mem - $shared_buffers) / ($conn_nb * 3) / $parallel_for_work_mem ))
- case "$db_type" in
+ work_mem_value=$(( (TOTAL_MEM - shared_buffers) / (( CONN_NUM + parallel_for_work_mem ) * 3) ))
+ # Older calculation for 9.5 and 9.6
+ if [ "${DB_VERSION%.*}" -le 9 ] && [ "${DB_VERSION//./}" -le 96 ]; then
+ parallel_for_work_mem=1
+ if [ "${#parallel_settings[@]}" -gt "0" ]; then
+ if [[ ${parallel_settings["max_parallel_workers_per_gather"]} ]]; then
+ parallel_for_work_mem=${parallel_settings["max_parallel_workers_per_gather"]}
+ fi
+ elif [ -n "${max_parallel_workers_per_gather+x}" ]; then
+ parallel_for_work_mem=$max_parallel_workers_per_gather
+ fi
+ work_mem_value=$(( (TOTAL_MEM - shared_buffers) / (CONN_NUM * 3) / parallel_for_work_mem ))
+ fi
+ case "$DB_TYPE" in
"web")
work_mem=$work_mem_value
;;
@@ -371,206 +531,251 @@ set_work_mem() {
work_mem=$work_mem_value
;;
"dw")
- work_mem=$(( $work_mem_value/2 ))
+ work_mem=$(( work_mem_value/2 ))
;;
"desktop")
- work_mem=$(( $work_mem_value/6 ))
+ work_mem=$(( work_mem_value/6 ))
;;
"mixed")
- work_mem=$(( $work_mem_value/2 ))
+ work_mem=$(( work_mem_value/2 ))
;;
*)
- _error "unknown db_type, cannot calculate work_mem"
+ _error "unknown DB_TYPE, cannot calculate work_mem"
;;
esac
- if [ $work_mem -lt 64 ]
- then
+ if [ $work_mem -lt 64 ]; then
work_mem=64
fi
}
-format_value() {
+#######################################
+# Set huge pages
+# Globals:
+# disk_type: used
+# huge_pages: modified
+#######################################
+function set_huge_pages() {
+ if [[ "$TOTAL_MEM" -ge "$(( 32 * MB ))" ]]; then
+ huge_pages="try"
+ else
+ huge_pages="off"
+ fi
+}
+
+#############################################
+# Format config option value
+# Arguments:
+# Config value to be formatted
+# Number of spaces between value and unit
+# Outputs:
+# Formated value
+#############################################
+function format_value() {
+ # Set space value to 0 if the argument is missing
with_space=${2:-0}
- if [[ $with_space -eq "1" ]]
- then
+ if [[ $with_space -eq "1" ]]; then
space=" "
else
space=""
fi
- if [ $(( $1 % $MB )) -eq 0 ]
- then
- formatted_value=$(( $1 / $MB ))$space"GB"
- echo $formatted_value
- elif [ $(( $1 % $KB )) -eq 0 ]
- then
- formatted_value=$(( $1 / $KB ))$space"MB"
- echo $formatted_value
+ if [ $(( $1 % MB )) -eq 0 ]; then
+ formatted_value=$(( $1 / MB ))$space"GB"
+ echo "$formatted_value"
+ elif [ $(( $1 % KB )) -eq 0 ]; then
+ formatted_value=$(( $1 / KB ))$space"MB"
+ echo "$formatted_value"
else
formatted_value=$1$space"kB"
- echo $formatted_value
+ echo "$formatted_value"
fi
}
-total_mem=$(get_total_ram) || exit $?
-cpu_num=$(get_cpu_count) || exit $?
-storage_type=$(get_disk_type)
-conn_nb=0
-db_type="web"
-db_version=15
-
-while getopts "hv:t:m:u:c:s:" opt; do
- case $opt in
- h)
- show_help
- exit 0
- ;;
- v)
- v=$OPTARG
- if [ $v != "9.5" ] && \
- [ $v != "9.6" ] && \
- [ $v != "10" ] && \
- [ $v != "11" ] && \
- [ $v != "12" ] && \
- [ $v != "13" ] && \
- [ $v != "14" ] && \
- [ $v != "15" ]
- then
- _input_error "$v is not a valid PostgreSQL version number"
- fi
- db_version=$v
- ;;
- t)
- t=$OPTARG
- if [ $t != "web" ] && \
- [ $t != "oltp" ] && \
- [ $t != "dw" ] && \
- [ $t != "desktop" ] && \
- [ $t != "mixed" ]
- then
- _input_error "$t is not a valid database type identifier"
- fi
- db_type="$t"
- ;;
- m)
- m=$OPTARG
- if [[ $m == *"MB"* ]]
- then
- ram=${m%"MB"}
- if [ "$ram" -lt "512" ] || [ "$ram" -gt "9999" ]
- then
- _input_error "total memory in MB must be greater than or equal to 512MB and less than or equal to 9999MB"
+#######################################
+# Main method
+#######################################
+function main() {
+
+ while getopts "hv:t:m:u:c:s:" opt; do
+ case $opt in
+ h)
+ show_help
+ exit 0
+ ;;
+ v)
+ v=$OPTARG
+ if [ "$v" != "9.5" ] && \
+ [ "$v" != "9.6" ] && \
+ [ "$v" != "10" ] && \
+ [ "$v" != "11" ] && \
+ [ "$v" != "12" ] && \
+ [ "$v" != "13" ] && \
+ [ "$v" != "14" ] && \
+ [ "$v" != "15" ] && \
+ [ "$v" != "16" ] && \
+ [ "$v" != "17" ]; then
+ _input_error "$v is not a valid PostgreSQL version number"
fi
- ram=$(( $ram*$KB ))
- elif [[ $m == *"GB"* ]]
- then
- ram=${m%"GB"}
- if [ "$ram" -lt "1" ] || [ "$ram" -gt "9999" ]
- then
- _input_error "total memory in GB must be greater than or equal to 1GB and less than or equal to 9999GB"
+ DB_VERSION=$v
+ ;;
+ t)
+ t=$OPTARG
+ if [ "$t" != "web" ] && \
+ [ "$t" != "oltp" ] && \
+ [ "$t" != "dw" ] && \
+ [ "$t" != "desktop" ] && \
+ [ "$t" != "mixed" ]; then
+ _input_error "$t is not a valid database type identifier"
fi
- ram=$(( $ram*$MB ))
- else
- _input_error "$m does not contain a valid unit identifier (use MB or GB)"
- fi
- total_mem="$ram"
- ;;
- u)
- u=$OPTARG
- if [ "$u" -lt "1" ] || [ "$u" -gt "9999" ]
- then
- _input_error "CPU count must be greater than or equal to 1 and less than or equal to 9999"
- fi
- cpu_num=$u
- ;;
- c)
- c=$OPTARG
- if [ "$c" -lt "20" ] || [ "$c" -gt "9999" ]
- then
- _input_error "connections number be greater than or equal to 1 and less than or equal to 9999"
- fi
- conn_nb=$c
- ;;
- s)
- s=$OPTARG
- if [ $s != "hdd" ] && \
- [ $s != "ssd" ] && \
- [ $s != "san" ]
- then
- _input_error "$s is not a valid storage type identifier"
- fi
- storage_type="$s"
- ;;
- *)
- show_help >&2
- exit 2
- ;;
- esac
-done
-
-if [ $conn_nb -eq "0" ]
-then
- case $db_type in
- "web")
- conn_nb=200
- ;;
- "oltp")
- conn_nb=300
- ;;
- "dw")
- conn_nb=40
- ;;
- "desktop")
- conn_nb=20
- ;;
- "mixed")
- conn_nb=100
- ;;
- *)
- conn_nb=20
- ;;
- esac
-fi
-
-set_db_default_values || exit $?
-set_shared_buffers || exit $?
-set_effective_cache_size || exit $?
-set_maintenance_work_mem || exit $?
-set_checkpoint_segments || exit $?
-set_checkpoint_completion_target
-set_wal_buffers
-set_default_statistics_target || exit $?
-set_random_page_cost || exit $?
-set_effective_io_concurrency || exit $?
-set_parallel_settings
-set_work_mem || exit $?
-
-echo "# DB Version: "$db_version
-echo "# OS Type: linux"
-echo "# DB Type: "$db_type
-echo "# Total Memory (RAM): "$(format_value $total_mem 1)
-echo "# CPUs num: "$cpu_num
-echo "# Connections num: "$conn_nb
-echo "# Data Storage: "$storage_type
-echo
-echo "max_connections = "$conn_nb
-echo "shared_buffers = "$(format_value $shared_buffers)
-echo "effective_cache_size = "$(format_value $effective_cache_size)
-echo "maintenance_work_mem = "$(format_value $maintenance_work_mem)
-echo "checkpoint_completion_target = "$checkpoint_completion_target
-echo "wal_buffers = "$(format_value $wal_buffers)
-echo "default_statistics_target = "$default_statistics_target
-echo "random_page_cost = "$random_page_cost
-echo "effective_io_concurrency = "$effective_io_concurrency
-echo "work_mem = "$(format_value $work_mem)
-echo "min_wal_size = "$(format_value $min_wal_size)
-echo "max_wal_size = "$(format_value $max_wal_size)
-for key in "${!parallel_settings[@]}"
-do
- echo $key" = "${parallel_settings[$key]}
-done
-if [ ! -z ${checkpoint_segments+x}]
-then
- echo "checkpoint_segments = "$checkpoint_segments
-fi
-
-unset set_parallel_settings
+ DB_TYPE="$t"
+ ;;
+ m)
+ m=$OPTARG
+ if [[ $m == *"MB"* ]]; then
+ ram=${m%"MB"}
+ if [ "$ram" -lt "512" ] || [ "$ram" -gt "9999" ]; then
+ _input_error "total memory in MB must be greater than or equal to 512MB and less than or equal to 9999MB"
+ fi
+ ram=$(( ram*KB ))
+ elif [[ $m == *"GB"* ]]; then
+ ram=${m%"GB"}
+ if [ "$ram" -lt "1" ] || [ "$ram" -gt "9999" ]; then
+ _input_error "total memory in GB must be greater than or equal to 1GB and less than or equal to 9999GB"
+ fi
+ ram=$(( ram*MB ))
+ else
+ _input_error "$m does not contain a valid unit identifier (use MB or GB)"
+ fi
+ TOTAL_MEM="$ram"
+ ;;
+ u)
+ u=$OPTARG
+ if [ "$u" -lt "1" ] || [ "$u" -gt "9999" ]; then
+ _input_error "CPU count must be greater than or equal to 1 and less than or equal to 9999"
+ fi
+ CPU_NUM=$u
+ ;;
+ c)
+ c=$OPTARG
+ if [ "$c" -lt "20" ] || [ "$c" -gt "9999" ]; then
+ _input_error "connections number must be greater than or equal to 1 and less than or equal to 9999"
+ fi
+ CONN_NUM=$c
+ ;;
+ s)
+ s=$OPTARG
+ if [ "$s" != "hdd" ] && \
+ [ "$s" != "ssd" ] && \
+ [ "$s" != "san" ]; then
+ _input_error "$s is not a valid storage type identifier"
+ fi
+ STORAGE_TYPE="$s"
+ ;;
+ *)
+ show_help >&2
+ exit 2
+ ;;
+ esac
+ done
+
+ # Set default values if not set
+
+ if [ "${DB_VERSION//./}" -eq "0" ]; then
+ DB_VERSION=17
+ fi
+
+ if [ "$TOTAL_MEM" -eq "0" ]; then
+ TOTAL_MEM=$(get_total_ram) || exit $?
+ fi
+
+ if [ "$CPU_NUM" -eq "0" ]; then
+ CPU_NUM=$(get_cpu_count) || exit $?
+ fi
+
+ if [ -z "$DB_TYPE" ]; then
+ DB_TYPE="web"
+ fi
+
+ # get_disk_type returns hdd as default value if disk detection failed
+ if [ -z "$STORAGE_TYPE" ]; then
+ STORAGE_TYPE=$(get_disk_type)
+ fi
+
+ if [ "$CONN_NUM" -eq "0" ]; then
+ case $DB_TYPE in
+ "web")
+ CONN_NUM=200
+ ;;
+ "oltp")
+ CONN_NUM=300
+ ;;
+ "dw")
+ CONN_NUM=40
+ ;;
+ "desktop")
+ CONN_NUM=20
+ ;;
+ "mixed")
+ CONN_NUM=100
+ ;;
+ *)
+ CONN_NUM=20 # should never happen
+ _error "unknown DB_TYPE, cannot calculate connections number"
+ ;;
+ esac
+ fi
+
+ readonly DB_VERSION
+ readonly TOTAL_MEM
+ readonly CPU_NUM
+ readonly DB_TYPE
+ readonly STORAGE_TYPE
+ readonly DB_VERSION
+ readonly CONN_NUM
+
+ set_db_default_values || exit $?
+ set_shared_buffers || exit $?
+ set_effective_cache_size || exit $?
+ set_maintenance_work_mem || exit $?
+ set_checkpoint_segments || exit $?
+ set_checkpoint_completion_target
+ set_wal_buffers
+ set_default_statistics_target || exit $?
+ set_random_page_cost || exit $?
+ set_effective_io_concurrency || exit $?
+ set_parallel_settings
+ set_work_mem || exit $?
+ set_huge_pages
+
+ echo "# DB Version: $DB_VERSION"
+ echo "# OS Type: linux"
+ echo "# DB Type: $DB_TYPE"
+ echo "# Total Memory (RAM): $(format_value "$TOTAL_MEM" 1)"
+ echo "# CPUs num: $CPU_NUM"
+ echo "# Connections num: $CONN_NUM"
+ echo "# Data Storage: $STORAGE_TYPE"
+ echo
+ echo "max_connections = $CONN_NUM"
+ echo "shared_buffers = $(format_value $shared_buffers)"
+ echo "effective_cache_size = $(format_value $effective_cache_size)"
+ echo "maintenance_work_mem = $(format_value $maintenance_work_mem)"
+ echo "checkpoint_completion_target = $checkpoint_completion_target"
+ echo "wal_buffers = $(format_value $wal_buffers)"
+ echo "default_statistics_target = $default_statistics_target"
+ echo "random_page_cost = $random_page_cost"
+ echo "effective_io_concurrency = $effective_io_concurrency"
+ echo "work_mem = $(format_value $work_mem)"
+ echo "huge_pages = $huge_pages"
+ echo "min_wal_size = $(format_value $min_wal_size)"
+ echo "max_wal_size = $(format_value $max_wal_size)"
+
+ for key in "${orders[@]}"; do
+ echo "$key = ${parallel_settings["$key"]}"
+ done
+ if [ -n "${checkpoint_segments+x}" ]; then
+ echo "checkpoint_segments = $checkpoint_segments"
+ fi
+
+ unset set_parallel_settings
+}
+
+main "$@"
diff --git a/pgtuned.sh b/pgtuned.sh
index 7944e21..272db43 100644
--- a/pgtuned.sh
+++ b/pgtuned.sh
@@ -6,34 +6,34 @@ declare -A outoftune
cmd_opts=""
-if [ ! -z $PG_VERSION ]
+if [ -n "$PG_VERSION" ]
then
cmd_opts+=" -v "$PG_VERSION
else
cmd_opts+=" -v "$PG_MAJOR
fi
-if [ ! -z $DB_TYPE ]
+if [ -n "$DB_TYPE" ]
then
cmd_opts+=" -t "$DB_TYPE
fi
-if [ ! -z $TOTAL_MEM ]
+if [ -n "$TOTAL_MEM" ]
then
cmd_opts+=" -m "$TOTAL_MEM
fi
-if [ ! -z $CPU_COUNT ]
+if [ -n "$CPU_COUNT" ]
then
cmd_opts+=" -u "$CPU_COUNT
fi
-if [ ! -z $MAX_CONN ]
+if [ -n "$MAX_CONN" ]
then
cmd_opts+=" -c "$MAX_CONN
fi
-if [ ! -z $STGE_TYPE ]
+if [ -n "$STGE_TYPE" ]
then
cmd_opts+=" -s "$STGE_TYPE
fi
@@ -65,12 +65,10 @@ for key in "${!outoftune[@]}"
do
if [ ! "${tuned[$key]}" ]; then
if [ "$comment_line" -eq 0 ]; then
- echo >> tuned.conf
- echo "# Configuration parameters harvested from original docker postgres image postgresql.conf" >> tuned.conf
- echo >> tuned.conf
+ { echo; echo "# Configuration parameters harvested from original docker postgres image postgresql.conf"; echo; } >> tuned.conf
comment_line=1
fi
- echo $key" = "${outoftune[$key]} >> tuned.conf
+ echo "$key = ${outoftune[$key]}" >> tuned.conf
fi
done
diff --git a/test/expected_results/10_linux_desktop_2_8GB_1000_hdd.txt b/test/expected_results/10_linux_desktop_2_8GB_1000_hdd.txt
new file mode 100644
index 0000000..447ca67
--- /dev/null
+++ b/test/expected_results/10_linux_desktop_2_8GB_1000_hdd.txt
@@ -0,0 +1,23 @@
+# DB Version: 10
+# OS Type: linux
+# DB Type: desktop
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 512MB
+effective_cache_size = 2GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 433kB
+huge_pages = off
+min_wal_size = 100MB
+max_wal_size = 2GB
+wal_level = minimal
+max_wal_senders = 0
diff --git a/test/expected_results/10_linux_desktop_2_8GB_1000_san.txt b/test/expected_results/10_linux_desktop_2_8GB_1000_san.txt
new file mode 100644
index 0000000..1e854c3
--- /dev/null
+++ b/test/expected_results/10_linux_desktop_2_8GB_1000_san.txt
@@ -0,0 +1,23 @@
+# DB Version: 10
+# OS Type: linux
+# DB Type: desktop
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 512MB
+effective_cache_size = 2GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 433kB
+huge_pages = off
+min_wal_size = 100MB
+max_wal_size = 2GB
+wal_level = minimal
+max_wal_senders = 0
diff --git a/test/expected_results/10_linux_desktop_2_8GB_1000_ssd.txt b/test/expected_results/10_linux_desktop_2_8GB_1000_ssd.txt
new file mode 100644
index 0000000..1ca4ea1
--- /dev/null
+++ b/test/expected_results/10_linux_desktop_2_8GB_1000_ssd.txt
@@ -0,0 +1,23 @@
+# DB Version: 10
+# OS Type: linux
+# DB Type: desktop
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 512MB
+effective_cache_size = 2GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 433kB
+huge_pages = off
+min_wal_size = 100MB
+max_wal_size = 2GB
+wal_level = minimal
+max_wal_senders = 0
diff --git a/test/expected_results/10_linux_desktop_4_8GB_1000_hdd.txt b/test/expected_results/10_linux_desktop_4_8GB_1000_hdd.txt
new file mode 100644
index 0000000..8bf30d6
--- /dev/null
+++ b/test/expected_results/10_linux_desktop_4_8GB_1000_hdd.txt
@@ -0,0 +1,26 @@
+# DB Version: 10
+# OS Type: linux
+# DB Type: desktop
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 512MB
+effective_cache_size = 2GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 435kB
+huge_pages = off
+min_wal_size = 100MB
+max_wal_size = 2GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+wal_level = minimal
+max_wal_senders = 0
diff --git a/test/expected_results/10_linux_desktop_4_8GB_1000_san.txt b/test/expected_results/10_linux_desktop_4_8GB_1000_san.txt
new file mode 100644
index 0000000..e729ed9
--- /dev/null
+++ b/test/expected_results/10_linux_desktop_4_8GB_1000_san.txt
@@ -0,0 +1,26 @@
+# DB Version: 10
+# OS Type: linux
+# DB Type: desktop
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 512MB
+effective_cache_size = 2GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 435kB
+huge_pages = off
+min_wal_size = 100MB
+max_wal_size = 2GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+wal_level = minimal
+max_wal_senders = 0
diff --git a/test/expected_results/10_linux_desktop_4_8GB_1000_ssd.txt b/test/expected_results/10_linux_desktop_4_8GB_1000_ssd.txt
new file mode 100644
index 0000000..9b62430
--- /dev/null
+++ b/test/expected_results/10_linux_desktop_4_8GB_1000_ssd.txt
@@ -0,0 +1,26 @@
+# DB Version: 10
+# OS Type: linux
+# DB Type: desktop
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 512MB
+effective_cache_size = 2GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 435kB
+huge_pages = off
+min_wal_size = 100MB
+max_wal_size = 2GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+wal_level = minimal
+max_wal_senders = 0
diff --git a/test/expected_results/10_linux_dw_2_8GB_1000_hdd.txt b/test/expected_results/10_linux_dw_2_8GB_1000_hdd.txt
new file mode 100644
index 0000000..77eda68
--- /dev/null
+++ b/test/expected_results/10_linux_dw_2_8GB_1000_hdd.txt
@@ -0,0 +1,21 @@
+# DB Version: 10
+# OS Type: linux
+# DB Type: dw
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 1GB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 500
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 1040kB
+huge_pages = off
+min_wal_size = 4GB
+max_wal_size = 16GB
diff --git a/test/expected_results/10_linux_dw_2_8GB_1000_san.txt b/test/expected_results/10_linux_dw_2_8GB_1000_san.txt
new file mode 100644
index 0000000..6fe2a2e
--- /dev/null
+++ b/test/expected_results/10_linux_dw_2_8GB_1000_san.txt
@@ -0,0 +1,21 @@
+# DB Version: 10
+# OS Type: linux
+# DB Type: dw
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 1GB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 500
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 1040kB
+huge_pages = off
+min_wal_size = 4GB
+max_wal_size = 16GB
diff --git a/test/expected_results/10_linux_dw_2_8GB_1000_ssd.txt b/test/expected_results/10_linux_dw_2_8GB_1000_ssd.txt
new file mode 100644
index 0000000..ced6f50
--- /dev/null
+++ b/test/expected_results/10_linux_dw_2_8GB_1000_ssd.txt
@@ -0,0 +1,21 @@
+# DB Version: 10
+# OS Type: linux
+# DB Type: dw
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 1GB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 500
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 1040kB
+huge_pages = off
+min_wal_size = 4GB
+max_wal_size = 16GB
diff --git a/test/expected_results/10_linux_dw_4_8GB_1000_hdd.txt b/test/expected_results/10_linux_dw_4_8GB_1000_hdd.txt
new file mode 100644
index 0000000..2fd6eb6
--- /dev/null
+++ b/test/expected_results/10_linux_dw_4_8GB_1000_hdd.txt
@@ -0,0 +1,24 @@
+# DB Version: 10
+# OS Type: linux
+# DB Type: dw
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 1GB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 500
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 1044kB
+huge_pages = off
+min_wal_size = 4GB
+max_wal_size = 16GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
diff --git a/test/expected_results/10_linux_dw_4_8GB_1000_san.txt b/test/expected_results/10_linux_dw_4_8GB_1000_san.txt
new file mode 100644
index 0000000..0851fc1
--- /dev/null
+++ b/test/expected_results/10_linux_dw_4_8GB_1000_san.txt
@@ -0,0 +1,24 @@
+# DB Version: 10
+# OS Type: linux
+# DB Type: dw
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 1GB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 500
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 1044kB
+huge_pages = off
+min_wal_size = 4GB
+max_wal_size = 16GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
diff --git a/test/expected_results/10_linux_dw_4_8GB_1000_ssd.txt b/test/expected_results/10_linux_dw_4_8GB_1000_ssd.txt
new file mode 100644
index 0000000..98d90e8
--- /dev/null
+++ b/test/expected_results/10_linux_dw_4_8GB_1000_ssd.txt
@@ -0,0 +1,24 @@
+# DB Version: 10
+# OS Type: linux
+# DB Type: dw
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 1GB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 500
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 1044kB
+huge_pages = off
+min_wal_size = 4GB
+max_wal_size = 16GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
diff --git a/test/expected_results/10_linux_mixed_2_8GB_1000_hdd.txt b/test/expected_results/10_linux_mixed_2_8GB_1000_hdd.txt
new file mode 100644
index 0000000..159e6ed
--- /dev/null
+++ b/test/expected_results/10_linux_mixed_2_8GB_1000_hdd.txt
@@ -0,0 +1,21 @@
+# DB Version: 10
+# OS Type: linux
+# DB Type: mixed
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 1040kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
diff --git a/test/expected_results/10_linux_mixed_2_8GB_1000_san.txt b/test/expected_results/10_linux_mixed_2_8GB_1000_san.txt
new file mode 100644
index 0000000..6780ce3
--- /dev/null
+++ b/test/expected_results/10_linux_mixed_2_8GB_1000_san.txt
@@ -0,0 +1,21 @@
+# DB Version: 10
+# OS Type: linux
+# DB Type: mixed
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 1040kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
diff --git a/test/expected_results/10_linux_mixed_2_8GB_1000_ssd.txt b/test/expected_results/10_linux_mixed_2_8GB_1000_ssd.txt
new file mode 100644
index 0000000..5d6dd9f
--- /dev/null
+++ b/test/expected_results/10_linux_mixed_2_8GB_1000_ssd.txt
@@ -0,0 +1,21 @@
+# DB Version: 10
+# OS Type: linux
+# DB Type: mixed
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 1040kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
diff --git a/test/expected_results/10_linux_mixed_4_8GB_1000_hdd.txt b/test/expected_results/10_linux_mixed_4_8GB_1000_hdd.txt
new file mode 100644
index 0000000..aa8e310
--- /dev/null
+++ b/test/expected_results/10_linux_mixed_4_8GB_1000_hdd.txt
@@ -0,0 +1,24 @@
+# DB Version: 10
+# OS Type: linux
+# DB Type: mixed
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 1044kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
diff --git a/test/expected_results/10_linux_mixed_4_8GB_1000_san.txt b/test/expected_results/10_linux_mixed_4_8GB_1000_san.txt
new file mode 100644
index 0000000..4da1646
--- /dev/null
+++ b/test/expected_results/10_linux_mixed_4_8GB_1000_san.txt
@@ -0,0 +1,24 @@
+# DB Version: 10
+# OS Type: linux
+# DB Type: mixed
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 1044kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
diff --git a/test/expected_results/10_linux_mixed_4_8GB_1000_ssd.txt b/test/expected_results/10_linux_mixed_4_8GB_1000_ssd.txt
new file mode 100644
index 0000000..996a837
--- /dev/null
+++ b/test/expected_results/10_linux_mixed_4_8GB_1000_ssd.txt
@@ -0,0 +1,24 @@
+# DB Version: 10
+# OS Type: linux
+# DB Type: mixed
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 1044kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
diff --git a/test/expected_results/10_linux_oltp_2_8GB_1000_hdd.txt b/test/expected_results/10_linux_oltp_2_8GB_1000_hdd.txt
new file mode 100644
index 0000000..32fe3b1
--- /dev/null
+++ b/test/expected_results/10_linux_oltp_2_8GB_1000_hdd.txt
@@ -0,0 +1,21 @@
+# DB Version: 10
+# OS Type: linux
+# DB Type: oltp
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 2080kB
+huge_pages = off
+min_wal_size = 2GB
+max_wal_size = 8GB
diff --git a/test/expected_results/10_linux_oltp_2_8GB_1000_san.txt b/test/expected_results/10_linux_oltp_2_8GB_1000_san.txt
new file mode 100644
index 0000000..c3412fe
--- /dev/null
+++ b/test/expected_results/10_linux_oltp_2_8GB_1000_san.txt
@@ -0,0 +1,21 @@
+# DB Version: 10
+# OS Type: linux
+# DB Type: oltp
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 2080kB
+huge_pages = off
+min_wal_size = 2GB
+max_wal_size = 8GB
diff --git a/test/expected_results/10_linux_oltp_2_8GB_1000_ssd.txt b/test/expected_results/10_linux_oltp_2_8GB_1000_ssd.txt
new file mode 100644
index 0000000..68cb07e
--- /dev/null
+++ b/test/expected_results/10_linux_oltp_2_8GB_1000_ssd.txt
@@ -0,0 +1,21 @@
+# DB Version: 10
+# OS Type: linux
+# DB Type: oltp
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 2080kB
+huge_pages = off
+min_wal_size = 2GB
+max_wal_size = 8GB
diff --git a/test/expected_results/10_linux_oltp_4_8GB_1000_hdd.txt b/test/expected_results/10_linux_oltp_4_8GB_1000_hdd.txt
new file mode 100644
index 0000000..8e272bb
--- /dev/null
+++ b/test/expected_results/10_linux_oltp_4_8GB_1000_hdd.txt
@@ -0,0 +1,24 @@
+# DB Version: 10
+# OS Type: linux
+# DB Type: oltp
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 2088kB
+huge_pages = off
+min_wal_size = 2GB
+max_wal_size = 8GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
diff --git a/test/expected_results/10_linux_oltp_4_8GB_1000_san.txt b/test/expected_results/10_linux_oltp_4_8GB_1000_san.txt
new file mode 100644
index 0000000..88ea442
--- /dev/null
+++ b/test/expected_results/10_linux_oltp_4_8GB_1000_san.txt
@@ -0,0 +1,24 @@
+# DB Version: 10
+# OS Type: linux
+# DB Type: oltp
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 2088kB
+huge_pages = off
+min_wal_size = 2GB
+max_wal_size = 8GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
diff --git a/test/expected_results/10_linux_oltp_4_8GB_1000_ssd.txt b/test/expected_results/10_linux_oltp_4_8GB_1000_ssd.txt
new file mode 100644
index 0000000..894c5ef
--- /dev/null
+++ b/test/expected_results/10_linux_oltp_4_8GB_1000_ssd.txt
@@ -0,0 +1,24 @@
+# DB Version: 10
+# OS Type: linux
+# DB Type: oltp
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 2088kB
+huge_pages = off
+min_wal_size = 2GB
+max_wal_size = 8GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
diff --git a/test/expected_results/10_linux_web_8GB_8_1000_hdd.txt b/test/expected_results/10_linux_web_2_8GB_1000_hdd.txt
similarity index 77%
rename from test/expected_results/10_linux_web_8GB_8_1000_hdd.txt
rename to test/expected_results/10_linux_web_2_8GB_1000_hdd.txt
index 92e38d6..8c6ff93 100644
--- a/test/expected_results/10_linux_web_8GB_8_1000_hdd.txt
+++ b/test/expected_results/10_linux_web_2_8GB_1000_hdd.txt
@@ -2,7 +2,7 @@
# OS Type: linux
# DB Type: web
# Total Memory (RAM): 8 GB
-# CPUs num: 8
+# CPUs num: 2
# Connections num: 1000
# Data Storage: hdd
@@ -15,9 +15,7 @@ wal_buffers = 16MB
default_statistics_target = 100
random_page_cost = 4
effective_io_concurrency = 2
-work_mem = 524kB
+work_mem = 2080kB
+huge_pages = off
min_wal_size = 1GB
max_wal_size = 4GB
-max_worker_processes = 8
-max_parallel_workers = 8
-max_parallel_workers_per_gather = 4
diff --git a/test/expected_results/10_linux_web_8GB_8_1000_san.txt b/test/expected_results/10_linux_web_2_8GB_1000_san.txt
similarity index 77%
rename from test/expected_results/10_linux_web_8GB_8_1000_san.txt
rename to test/expected_results/10_linux_web_2_8GB_1000_san.txt
index 51fd1bd..11666c1 100644
--- a/test/expected_results/10_linux_web_8GB_8_1000_san.txt
+++ b/test/expected_results/10_linux_web_2_8GB_1000_san.txt
@@ -2,7 +2,7 @@
# OS Type: linux
# DB Type: web
# Total Memory (RAM): 8 GB
-# CPUs num: 8
+# CPUs num: 2
# Connections num: 1000
# Data Storage: san
@@ -15,9 +15,7 @@ wal_buffers = 16MB
default_statistics_target = 100
random_page_cost = 1.1
effective_io_concurrency = 300
-work_mem = 524kB
+work_mem = 2080kB
+huge_pages = off
min_wal_size = 1GB
max_wal_size = 4GB
-max_worker_processes = 8
-max_parallel_workers = 8
-max_parallel_workers_per_gather = 4
diff --git a/test/expected_results/10_linux_web_8GB_8_1000_ssd.txt b/test/expected_results/10_linux_web_2_8GB_1000_ssd.txt
similarity index 77%
rename from test/expected_results/10_linux_web_8GB_8_1000_ssd.txt
rename to test/expected_results/10_linux_web_2_8GB_1000_ssd.txt
index f8f97ec..ff1ab29 100644
--- a/test/expected_results/10_linux_web_8GB_8_1000_ssd.txt
+++ b/test/expected_results/10_linux_web_2_8GB_1000_ssd.txt
@@ -2,7 +2,7 @@
# OS Type: linux
# DB Type: web
# Total Memory (RAM): 8 GB
-# CPUs num: 8
+# CPUs num: 2
# Connections num: 1000
# Data Storage: ssd
@@ -15,9 +15,7 @@ wal_buffers = 16MB
default_statistics_target = 100
random_page_cost = 1.1
effective_io_concurrency = 200
-work_mem = 524kB
+work_mem = 2080kB
+huge_pages = off
min_wal_size = 1GB
max_wal_size = 4GB
-max_worker_processes = 8
-max_parallel_workers = 8
-max_parallel_workers_per_gather = 4
diff --git a/test/expected_results/10_linux_web_4_8GB_1000_hdd.txt b/test/expected_results/10_linux_web_4_8GB_1000_hdd.txt
new file mode 100644
index 0000000..e292c94
--- /dev/null
+++ b/test/expected_results/10_linux_web_4_8GB_1000_hdd.txt
@@ -0,0 +1,24 @@
+# DB Version: 10
+# OS Type: linux
+# DB Type: web
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 2088kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
diff --git a/test/expected_results/10_linux_web_4_8GB_1000_san.txt b/test/expected_results/10_linux_web_4_8GB_1000_san.txt
new file mode 100644
index 0000000..17b9c17
--- /dev/null
+++ b/test/expected_results/10_linux_web_4_8GB_1000_san.txt
@@ -0,0 +1,24 @@
+# DB Version: 10
+# OS Type: linux
+# DB Type: web
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 2088kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
diff --git a/test/expected_results/10_linux_web_4_8GB_1000_ssd.txt b/test/expected_results/10_linux_web_4_8GB_1000_ssd.txt
new file mode 100644
index 0000000..aeeef21
--- /dev/null
+++ b/test/expected_results/10_linux_web_4_8GB_1000_ssd.txt
@@ -0,0 +1,24 @@
+# DB Version: 10
+# OS Type: linux
+# DB Type: web
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 2088kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
diff --git a/test/expected_results/11_linux_desktop_2_8GB_1000_hdd.txt b/test/expected_results/11_linux_desktop_2_8GB_1000_hdd.txt
new file mode 100644
index 0000000..ba6e413
--- /dev/null
+++ b/test/expected_results/11_linux_desktop_2_8GB_1000_hdd.txt
@@ -0,0 +1,23 @@
+# DB Version: 11
+# OS Type: linux
+# DB Type: desktop
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 512MB
+effective_cache_size = 2GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 433kB
+huge_pages = off
+min_wal_size = 100MB
+max_wal_size = 2GB
+wal_level = minimal
+max_wal_senders = 0
diff --git a/test/expected_results/11_linux_desktop_2_8GB_1000_san.txt b/test/expected_results/11_linux_desktop_2_8GB_1000_san.txt
new file mode 100644
index 0000000..14d6287
--- /dev/null
+++ b/test/expected_results/11_linux_desktop_2_8GB_1000_san.txt
@@ -0,0 +1,23 @@
+# DB Version: 11
+# OS Type: linux
+# DB Type: desktop
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 512MB
+effective_cache_size = 2GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 433kB
+huge_pages = off
+min_wal_size = 100MB
+max_wal_size = 2GB
+wal_level = minimal
+max_wal_senders = 0
diff --git a/test/expected_results/11_linux_desktop_2_8GB_1000_ssd.txt b/test/expected_results/11_linux_desktop_2_8GB_1000_ssd.txt
new file mode 100644
index 0000000..5f4a394
--- /dev/null
+++ b/test/expected_results/11_linux_desktop_2_8GB_1000_ssd.txt
@@ -0,0 +1,23 @@
+# DB Version: 11
+# OS Type: linux
+# DB Type: desktop
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 512MB
+effective_cache_size = 2GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 433kB
+huge_pages = off
+min_wal_size = 100MB
+max_wal_size = 2GB
+wal_level = minimal
+max_wal_senders = 0
diff --git a/test/expected_results/11_linux_desktop_4_8GB_1000_hdd.txt b/test/expected_results/11_linux_desktop_4_8GB_1000_hdd.txt
new file mode 100644
index 0000000..cc99580
--- /dev/null
+++ b/test/expected_results/11_linux_desktop_4_8GB_1000_hdd.txt
@@ -0,0 +1,27 @@
+# DB Version: 11
+# OS Type: linux
+# DB Type: desktop
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 512MB
+effective_cache_size = 2GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 435kB
+huge_pages = off
+min_wal_size = 100MB
+max_wal_size = 2GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
+wal_level = minimal
+max_wal_senders = 0
diff --git a/test/expected_results/11_linux_desktop_4_8GB_1000_san.txt b/test/expected_results/11_linux_desktop_4_8GB_1000_san.txt
new file mode 100644
index 0000000..3277139
--- /dev/null
+++ b/test/expected_results/11_linux_desktop_4_8GB_1000_san.txt
@@ -0,0 +1,27 @@
+# DB Version: 11
+# OS Type: linux
+# DB Type: desktop
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 512MB
+effective_cache_size = 2GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 435kB
+huge_pages = off
+min_wal_size = 100MB
+max_wal_size = 2GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
+wal_level = minimal
+max_wal_senders = 0
diff --git a/test/expected_results/11_linux_desktop_4_8GB_1000_ssd.txt b/test/expected_results/11_linux_desktop_4_8GB_1000_ssd.txt
new file mode 100644
index 0000000..c9195f2
--- /dev/null
+++ b/test/expected_results/11_linux_desktop_4_8GB_1000_ssd.txt
@@ -0,0 +1,27 @@
+# DB Version: 11
+# OS Type: linux
+# DB Type: desktop
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 512MB
+effective_cache_size = 2GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 435kB
+huge_pages = off
+min_wal_size = 100MB
+max_wal_size = 2GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
+wal_level = minimal
+max_wal_senders = 0
diff --git a/test/expected_results/11_linux_dw_2_8GB_1000_hdd.txt b/test/expected_results/11_linux_dw_2_8GB_1000_hdd.txt
new file mode 100644
index 0000000..ba3aeaa
--- /dev/null
+++ b/test/expected_results/11_linux_dw_2_8GB_1000_hdd.txt
@@ -0,0 +1,21 @@
+# DB Version: 11
+# OS Type: linux
+# DB Type: dw
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 1GB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 500
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 1040kB
+huge_pages = off
+min_wal_size = 4GB
+max_wal_size = 16GB
diff --git a/test/expected_results/11_linux_dw_2_8GB_1000_san.txt b/test/expected_results/11_linux_dw_2_8GB_1000_san.txt
new file mode 100644
index 0000000..02506c7
--- /dev/null
+++ b/test/expected_results/11_linux_dw_2_8GB_1000_san.txt
@@ -0,0 +1,21 @@
+# DB Version: 11
+# OS Type: linux
+# DB Type: dw
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 1GB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 500
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 1040kB
+huge_pages = off
+min_wal_size = 4GB
+max_wal_size = 16GB
diff --git a/test/expected_results/11_linux_dw_2_8GB_1000_ssd.txt b/test/expected_results/11_linux_dw_2_8GB_1000_ssd.txt
new file mode 100644
index 0000000..a1a3583
--- /dev/null
+++ b/test/expected_results/11_linux_dw_2_8GB_1000_ssd.txt
@@ -0,0 +1,21 @@
+# DB Version: 11
+# OS Type: linux
+# DB Type: dw
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 1GB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 500
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 1040kB
+huge_pages = off
+min_wal_size = 4GB
+max_wal_size = 16GB
diff --git a/test/expected_results/11_linux_dw_4_8GB_1000_hdd.txt b/test/expected_results/11_linux_dw_4_8GB_1000_hdd.txt
new file mode 100644
index 0000000..6cee4a3
--- /dev/null
+++ b/test/expected_results/11_linux_dw_4_8GB_1000_hdd.txt
@@ -0,0 +1,25 @@
+# DB Version: 11
+# OS Type: linux
+# DB Type: dw
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 1GB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 500
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 1044kB
+huge_pages = off
+min_wal_size = 4GB
+max_wal_size = 16GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/11_linux_dw_4_8GB_1000_san.txt b/test/expected_results/11_linux_dw_4_8GB_1000_san.txt
new file mode 100644
index 0000000..2f2d391
--- /dev/null
+++ b/test/expected_results/11_linux_dw_4_8GB_1000_san.txt
@@ -0,0 +1,25 @@
+# DB Version: 11
+# OS Type: linux
+# DB Type: dw
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 1GB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 500
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 1044kB
+huge_pages = off
+min_wal_size = 4GB
+max_wal_size = 16GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/11_linux_dw_4_8GB_1000_ssd.txt b/test/expected_results/11_linux_dw_4_8GB_1000_ssd.txt
new file mode 100644
index 0000000..d927d25
--- /dev/null
+++ b/test/expected_results/11_linux_dw_4_8GB_1000_ssd.txt
@@ -0,0 +1,25 @@
+# DB Version: 11
+# OS Type: linux
+# DB Type: dw
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 1GB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 500
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 1044kB
+huge_pages = off
+min_wal_size = 4GB
+max_wal_size = 16GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/11_linux_mixed_2_8GB_1000_hdd.txt b/test/expected_results/11_linux_mixed_2_8GB_1000_hdd.txt
new file mode 100644
index 0000000..234e7ac
--- /dev/null
+++ b/test/expected_results/11_linux_mixed_2_8GB_1000_hdd.txt
@@ -0,0 +1,21 @@
+# DB Version: 11
+# OS Type: linux
+# DB Type: mixed
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 1040kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
diff --git a/test/expected_results/11_linux_mixed_2_8GB_1000_san.txt b/test/expected_results/11_linux_mixed_2_8GB_1000_san.txt
new file mode 100644
index 0000000..e3be723
--- /dev/null
+++ b/test/expected_results/11_linux_mixed_2_8GB_1000_san.txt
@@ -0,0 +1,21 @@
+# DB Version: 11
+# OS Type: linux
+# DB Type: mixed
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 1040kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
diff --git a/test/expected_results/11_linux_mixed_2_8GB_1000_ssd.txt b/test/expected_results/11_linux_mixed_2_8GB_1000_ssd.txt
new file mode 100644
index 0000000..38b1a62
--- /dev/null
+++ b/test/expected_results/11_linux_mixed_2_8GB_1000_ssd.txt
@@ -0,0 +1,21 @@
+# DB Version: 11
+# OS Type: linux
+# DB Type: mixed
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 1040kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
diff --git a/test/expected_results/11_linux_mixed_4_8GB_1000_hdd.txt b/test/expected_results/11_linux_mixed_4_8GB_1000_hdd.txt
new file mode 100644
index 0000000..f59173c
--- /dev/null
+++ b/test/expected_results/11_linux_mixed_4_8GB_1000_hdd.txt
@@ -0,0 +1,25 @@
+# DB Version: 11
+# OS Type: linux
+# DB Type: mixed
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 1044kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/11_linux_mixed_4_8GB_1000_san.txt b/test/expected_results/11_linux_mixed_4_8GB_1000_san.txt
new file mode 100644
index 0000000..7d94859
--- /dev/null
+++ b/test/expected_results/11_linux_mixed_4_8GB_1000_san.txt
@@ -0,0 +1,25 @@
+# DB Version: 11
+# OS Type: linux
+# DB Type: mixed
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 1044kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/11_linux_mixed_4_8GB_1000_ssd.txt b/test/expected_results/11_linux_mixed_4_8GB_1000_ssd.txt
new file mode 100644
index 0000000..9064c71
--- /dev/null
+++ b/test/expected_results/11_linux_mixed_4_8GB_1000_ssd.txt
@@ -0,0 +1,25 @@
+# DB Version: 11
+# OS Type: linux
+# DB Type: mixed
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 1044kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/11_linux_oltp_2_8GB_1000_hdd.txt b/test/expected_results/11_linux_oltp_2_8GB_1000_hdd.txt
new file mode 100644
index 0000000..0225db0
--- /dev/null
+++ b/test/expected_results/11_linux_oltp_2_8GB_1000_hdd.txt
@@ -0,0 +1,21 @@
+# DB Version: 11
+# OS Type: linux
+# DB Type: oltp
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 2080kB
+huge_pages = off
+min_wal_size = 2GB
+max_wal_size = 8GB
diff --git a/test/expected_results/11_linux_oltp_2_8GB_1000_san.txt b/test/expected_results/11_linux_oltp_2_8GB_1000_san.txt
new file mode 100644
index 0000000..570bb7a
--- /dev/null
+++ b/test/expected_results/11_linux_oltp_2_8GB_1000_san.txt
@@ -0,0 +1,21 @@
+# DB Version: 11
+# OS Type: linux
+# DB Type: oltp
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 2080kB
+huge_pages = off
+min_wal_size = 2GB
+max_wal_size = 8GB
diff --git a/test/expected_results/11_linux_oltp_2_8GB_1000_ssd.txt b/test/expected_results/11_linux_oltp_2_8GB_1000_ssd.txt
new file mode 100644
index 0000000..c943b5b
--- /dev/null
+++ b/test/expected_results/11_linux_oltp_2_8GB_1000_ssd.txt
@@ -0,0 +1,21 @@
+# DB Version: 11
+# OS Type: linux
+# DB Type: oltp
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 2080kB
+huge_pages = off
+min_wal_size = 2GB
+max_wal_size = 8GB
diff --git a/test/expected_results/11_linux_oltp_4_8GB_1000_hdd.txt b/test/expected_results/11_linux_oltp_4_8GB_1000_hdd.txt
new file mode 100644
index 0000000..2c55f20
--- /dev/null
+++ b/test/expected_results/11_linux_oltp_4_8GB_1000_hdd.txt
@@ -0,0 +1,25 @@
+# DB Version: 11
+# OS Type: linux
+# DB Type: oltp
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 2088kB
+huge_pages = off
+min_wal_size = 2GB
+max_wal_size = 8GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/11_linux_oltp_4_8GB_1000_san.txt b/test/expected_results/11_linux_oltp_4_8GB_1000_san.txt
new file mode 100644
index 0000000..d346a63
--- /dev/null
+++ b/test/expected_results/11_linux_oltp_4_8GB_1000_san.txt
@@ -0,0 +1,25 @@
+# DB Version: 11
+# OS Type: linux
+# DB Type: oltp
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 2088kB
+huge_pages = off
+min_wal_size = 2GB
+max_wal_size = 8GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/11_linux_oltp_4_8GB_1000_ssd.txt b/test/expected_results/11_linux_oltp_4_8GB_1000_ssd.txt
new file mode 100644
index 0000000..179079f
--- /dev/null
+++ b/test/expected_results/11_linux_oltp_4_8GB_1000_ssd.txt
@@ -0,0 +1,25 @@
+# DB Version: 11
+# OS Type: linux
+# DB Type: oltp
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 2088kB
+huge_pages = off
+min_wal_size = 2GB
+max_wal_size = 8GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/11_linux_web_8GB_8_1000_hdd.txt b/test/expected_results/11_linux_web_2_8GB_1000_hdd.txt
similarity index 71%
rename from test/expected_results/11_linux_web_8GB_8_1000_hdd.txt
rename to test/expected_results/11_linux_web_2_8GB_1000_hdd.txt
index e60a407..7dfe90e 100644
--- a/test/expected_results/11_linux_web_8GB_8_1000_hdd.txt
+++ b/test/expected_results/11_linux_web_2_8GB_1000_hdd.txt
@@ -2,7 +2,7 @@
# OS Type: linux
# DB Type: web
# Total Memory (RAM): 8 GB
-# CPUs num: 8
+# CPUs num: 2
# Connections num: 1000
# Data Storage: hdd
@@ -15,10 +15,7 @@ wal_buffers = 16MB
default_statistics_target = 100
random_page_cost = 4
effective_io_concurrency = 2
-work_mem = 524kB
+work_mem = 2080kB
+huge_pages = off
min_wal_size = 1GB
max_wal_size = 4GB
-max_worker_processes = 8
-max_parallel_workers = 8
-max_parallel_maintenance_workers = 4
-max_parallel_workers_per_gather = 4
diff --git a/test/expected_results/11_linux_web_2_8GB_1000_san.txt b/test/expected_results/11_linux_web_2_8GB_1000_san.txt
new file mode 100644
index 0000000..a2b75c3
--- /dev/null
+++ b/test/expected_results/11_linux_web_2_8GB_1000_san.txt
@@ -0,0 +1,21 @@
+# DB Version: 11
+# OS Type: linux
+# DB Type: web
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 2080kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
diff --git a/test/expected_results/11_linux_web_2_8GB_1000_ssd.txt b/test/expected_results/11_linux_web_2_8GB_1000_ssd.txt
new file mode 100644
index 0000000..4b5fc2a
--- /dev/null
+++ b/test/expected_results/11_linux_web_2_8GB_1000_ssd.txt
@@ -0,0 +1,21 @@
+# DB Version: 11
+# OS Type: linux
+# DB Type: web
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 2080kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
diff --git a/test/expected_results/11_linux_web_4_8GB_1000_hdd.txt b/test/expected_results/11_linux_web_4_8GB_1000_hdd.txt
new file mode 100644
index 0000000..b12774f
--- /dev/null
+++ b/test/expected_results/11_linux_web_4_8GB_1000_hdd.txt
@@ -0,0 +1,25 @@
+# DB Version: 11
+# OS Type: linux
+# DB Type: web
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 2088kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/11_linux_web_8GB_8_1000_san.txt b/test/expected_results/11_linux_web_4_8GB_1000_san.txt
similarity index 69%
rename from test/expected_results/11_linux_web_8GB_8_1000_san.txt
rename to test/expected_results/11_linux_web_4_8GB_1000_san.txt
index 4d1e461..b10d556 100644
--- a/test/expected_results/11_linux_web_8GB_8_1000_san.txt
+++ b/test/expected_results/11_linux_web_4_8GB_1000_san.txt
@@ -2,7 +2,7 @@
# OS Type: linux
# DB Type: web
# Total Memory (RAM): 8 GB
-# CPUs num: 8
+# CPUs num: 4
# Connections num: 1000
# Data Storage: san
@@ -15,10 +15,11 @@ wal_buffers = 16MB
default_statistics_target = 100
random_page_cost = 1.1
effective_io_concurrency = 300
-work_mem = 524kB
+work_mem = 2088kB
+huge_pages = off
min_wal_size = 1GB
max_wal_size = 4GB
-max_worker_processes = 8
-max_parallel_workers = 8
-max_parallel_maintenance_workers = 4
-max_parallel_workers_per_gather = 4
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/11_linux_web_8GB_8_1000_ssd.txt b/test/expected_results/11_linux_web_4_8GB_1000_ssd.txt
similarity index 69%
rename from test/expected_results/11_linux_web_8GB_8_1000_ssd.txt
rename to test/expected_results/11_linux_web_4_8GB_1000_ssd.txt
index e6d8329..4f75375 100644
--- a/test/expected_results/11_linux_web_8GB_8_1000_ssd.txt
+++ b/test/expected_results/11_linux_web_4_8GB_1000_ssd.txt
@@ -2,7 +2,7 @@
# OS Type: linux
# DB Type: web
# Total Memory (RAM): 8 GB
-# CPUs num: 8
+# CPUs num: 4
# Connections num: 1000
# Data Storage: ssd
@@ -15,10 +15,11 @@ wal_buffers = 16MB
default_statistics_target = 100
random_page_cost = 1.1
effective_io_concurrency = 200
-work_mem = 524kB
+work_mem = 2088kB
+huge_pages = off
min_wal_size = 1GB
max_wal_size = 4GB
-max_worker_processes = 8
-max_parallel_workers = 8
-max_parallel_maintenance_workers = 4
-max_parallel_workers_per_gather = 4
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/12_linux_desktop_2_8GB_1000_hdd.txt b/test/expected_results/12_linux_desktop_2_8GB_1000_hdd.txt
new file mode 100644
index 0000000..4a0918f
--- /dev/null
+++ b/test/expected_results/12_linux_desktop_2_8GB_1000_hdd.txt
@@ -0,0 +1,23 @@
+# DB Version: 12
+# OS Type: linux
+# DB Type: desktop
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 512MB
+effective_cache_size = 2GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 433kB
+huge_pages = off
+min_wal_size = 100MB
+max_wal_size = 2GB
+wal_level = minimal
+max_wal_senders = 0
diff --git a/test/expected_results/12_linux_desktop_2_8GB_1000_san.txt b/test/expected_results/12_linux_desktop_2_8GB_1000_san.txt
new file mode 100644
index 0000000..825850e
--- /dev/null
+++ b/test/expected_results/12_linux_desktop_2_8GB_1000_san.txt
@@ -0,0 +1,23 @@
+# DB Version: 12
+# OS Type: linux
+# DB Type: desktop
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 512MB
+effective_cache_size = 2GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 433kB
+huge_pages = off
+min_wal_size = 100MB
+max_wal_size = 2GB
+wal_level = minimal
+max_wal_senders = 0
diff --git a/test/expected_results/12_linux_desktop_2_8GB_1000_ssd.txt b/test/expected_results/12_linux_desktop_2_8GB_1000_ssd.txt
new file mode 100644
index 0000000..11759ea
--- /dev/null
+++ b/test/expected_results/12_linux_desktop_2_8GB_1000_ssd.txt
@@ -0,0 +1,23 @@
+# DB Version: 12
+# OS Type: linux
+# DB Type: desktop
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 512MB
+effective_cache_size = 2GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 433kB
+huge_pages = off
+min_wal_size = 100MB
+max_wal_size = 2GB
+wal_level = minimal
+max_wal_senders = 0
diff --git a/test/expected_results/12_linux_desktop_4_8GB_1000_hdd.txt b/test/expected_results/12_linux_desktop_4_8GB_1000_hdd.txt
new file mode 100644
index 0000000..9a74956
--- /dev/null
+++ b/test/expected_results/12_linux_desktop_4_8GB_1000_hdd.txt
@@ -0,0 +1,27 @@
+# DB Version: 12
+# OS Type: linux
+# DB Type: desktop
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 512MB
+effective_cache_size = 2GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 435kB
+huge_pages = off
+min_wal_size = 100MB
+max_wal_size = 2GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
+wal_level = minimal
+max_wal_senders = 0
diff --git a/test/expected_results/12_linux_desktop_4_8GB_1000_san.txt b/test/expected_results/12_linux_desktop_4_8GB_1000_san.txt
new file mode 100644
index 0000000..fc25979
--- /dev/null
+++ b/test/expected_results/12_linux_desktop_4_8GB_1000_san.txt
@@ -0,0 +1,27 @@
+# DB Version: 12
+# OS Type: linux
+# DB Type: desktop
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 512MB
+effective_cache_size = 2GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 435kB
+huge_pages = off
+min_wal_size = 100MB
+max_wal_size = 2GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
+wal_level = minimal
+max_wal_senders = 0
diff --git a/test/expected_results/12_linux_desktop_4_8GB_1000_ssd.txt b/test/expected_results/12_linux_desktop_4_8GB_1000_ssd.txt
new file mode 100644
index 0000000..861cb1a
--- /dev/null
+++ b/test/expected_results/12_linux_desktop_4_8GB_1000_ssd.txt
@@ -0,0 +1,27 @@
+# DB Version: 12
+# OS Type: linux
+# DB Type: desktop
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 512MB
+effective_cache_size = 2GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 435kB
+huge_pages = off
+min_wal_size = 100MB
+max_wal_size = 2GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
+wal_level = minimal
+max_wal_senders = 0
diff --git a/test/expected_results/12_linux_dw_2_8GB_1000_hdd.txt b/test/expected_results/12_linux_dw_2_8GB_1000_hdd.txt
new file mode 100644
index 0000000..1cb53bc
--- /dev/null
+++ b/test/expected_results/12_linux_dw_2_8GB_1000_hdd.txt
@@ -0,0 +1,21 @@
+# DB Version: 12
+# OS Type: linux
+# DB Type: dw
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 1GB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 500
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 1040kB
+huge_pages = off
+min_wal_size = 4GB
+max_wal_size = 16GB
diff --git a/test/expected_results/12_linux_dw_2_8GB_1000_san.txt b/test/expected_results/12_linux_dw_2_8GB_1000_san.txt
new file mode 100644
index 0000000..bffe269
--- /dev/null
+++ b/test/expected_results/12_linux_dw_2_8GB_1000_san.txt
@@ -0,0 +1,21 @@
+# DB Version: 12
+# OS Type: linux
+# DB Type: dw
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 1GB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 500
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 1040kB
+huge_pages = off
+min_wal_size = 4GB
+max_wal_size = 16GB
diff --git a/test/expected_results/12_linux_dw_2_8GB_1000_ssd.txt b/test/expected_results/12_linux_dw_2_8GB_1000_ssd.txt
new file mode 100644
index 0000000..ead9a30
--- /dev/null
+++ b/test/expected_results/12_linux_dw_2_8GB_1000_ssd.txt
@@ -0,0 +1,21 @@
+# DB Version: 12
+# OS Type: linux
+# DB Type: dw
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 1GB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 500
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 1040kB
+huge_pages = off
+min_wal_size = 4GB
+max_wal_size = 16GB
diff --git a/test/expected_results/12_linux_dw_4_8GB_1000_hdd.txt b/test/expected_results/12_linux_dw_4_8GB_1000_hdd.txt
new file mode 100644
index 0000000..9669b52
--- /dev/null
+++ b/test/expected_results/12_linux_dw_4_8GB_1000_hdd.txt
@@ -0,0 +1,25 @@
+# DB Version: 12
+# OS Type: linux
+# DB Type: dw
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 1GB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 500
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 1044kB
+huge_pages = off
+min_wal_size = 4GB
+max_wal_size = 16GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/12_linux_dw_4_8GB_1000_san.txt b/test/expected_results/12_linux_dw_4_8GB_1000_san.txt
new file mode 100644
index 0000000..bee7fa3
--- /dev/null
+++ b/test/expected_results/12_linux_dw_4_8GB_1000_san.txt
@@ -0,0 +1,25 @@
+# DB Version: 12
+# OS Type: linux
+# DB Type: dw
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 1GB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 500
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 1044kB
+huge_pages = off
+min_wal_size = 4GB
+max_wal_size = 16GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/12_linux_dw_4_8GB_1000_ssd.txt b/test/expected_results/12_linux_dw_4_8GB_1000_ssd.txt
new file mode 100644
index 0000000..eaa2c2e
--- /dev/null
+++ b/test/expected_results/12_linux_dw_4_8GB_1000_ssd.txt
@@ -0,0 +1,25 @@
+# DB Version: 12
+# OS Type: linux
+# DB Type: dw
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 1GB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 500
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 1044kB
+huge_pages = off
+min_wal_size = 4GB
+max_wal_size = 16GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/12_linux_mixed_2_8GB_1000_hdd.txt b/test/expected_results/12_linux_mixed_2_8GB_1000_hdd.txt
new file mode 100644
index 0000000..0701acf
--- /dev/null
+++ b/test/expected_results/12_linux_mixed_2_8GB_1000_hdd.txt
@@ -0,0 +1,21 @@
+# DB Version: 12
+# OS Type: linux
+# DB Type: mixed
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 1040kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
diff --git a/test/expected_results/12_linux_mixed_2_8GB_1000_san.txt b/test/expected_results/12_linux_mixed_2_8GB_1000_san.txt
new file mode 100644
index 0000000..c640d74
--- /dev/null
+++ b/test/expected_results/12_linux_mixed_2_8GB_1000_san.txt
@@ -0,0 +1,21 @@
+# DB Version: 12
+# OS Type: linux
+# DB Type: mixed
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 1040kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
diff --git a/test/expected_results/12_linux_mixed_2_8GB_1000_ssd.txt b/test/expected_results/12_linux_mixed_2_8GB_1000_ssd.txt
new file mode 100644
index 0000000..e9b8636
--- /dev/null
+++ b/test/expected_results/12_linux_mixed_2_8GB_1000_ssd.txt
@@ -0,0 +1,21 @@
+# DB Version: 12
+# OS Type: linux
+# DB Type: mixed
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 1040kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
diff --git a/test/expected_results/12_linux_mixed_4_8GB_1000_hdd.txt b/test/expected_results/12_linux_mixed_4_8GB_1000_hdd.txt
new file mode 100644
index 0000000..cea3db4
--- /dev/null
+++ b/test/expected_results/12_linux_mixed_4_8GB_1000_hdd.txt
@@ -0,0 +1,25 @@
+# DB Version: 12
+# OS Type: linux
+# DB Type: mixed
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 1044kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/12_linux_mixed_4_8GB_1000_san.txt b/test/expected_results/12_linux_mixed_4_8GB_1000_san.txt
new file mode 100644
index 0000000..181c149
--- /dev/null
+++ b/test/expected_results/12_linux_mixed_4_8GB_1000_san.txt
@@ -0,0 +1,25 @@
+# DB Version: 12
+# OS Type: linux
+# DB Type: mixed
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 1044kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/12_linux_mixed_4_8GB_1000_ssd.txt b/test/expected_results/12_linux_mixed_4_8GB_1000_ssd.txt
new file mode 100644
index 0000000..1649b28
--- /dev/null
+++ b/test/expected_results/12_linux_mixed_4_8GB_1000_ssd.txt
@@ -0,0 +1,25 @@
+# DB Version: 12
+# OS Type: linux
+# DB Type: mixed
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 1044kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/12_linux_oltp_2_8GB_1000_hdd.txt b/test/expected_results/12_linux_oltp_2_8GB_1000_hdd.txt
new file mode 100644
index 0000000..7edd743
--- /dev/null
+++ b/test/expected_results/12_linux_oltp_2_8GB_1000_hdd.txt
@@ -0,0 +1,21 @@
+# DB Version: 12
+# OS Type: linux
+# DB Type: oltp
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 2080kB
+huge_pages = off
+min_wal_size = 2GB
+max_wal_size = 8GB
diff --git a/test/expected_results/12_linux_oltp_2_8GB_1000_san.txt b/test/expected_results/12_linux_oltp_2_8GB_1000_san.txt
new file mode 100644
index 0000000..dd74e61
--- /dev/null
+++ b/test/expected_results/12_linux_oltp_2_8GB_1000_san.txt
@@ -0,0 +1,21 @@
+# DB Version: 12
+# OS Type: linux
+# DB Type: oltp
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 2080kB
+huge_pages = off
+min_wal_size = 2GB
+max_wal_size = 8GB
diff --git a/test/expected_results/12_linux_oltp_2_8GB_1000_ssd.txt b/test/expected_results/12_linux_oltp_2_8GB_1000_ssd.txt
new file mode 100644
index 0000000..255694e
--- /dev/null
+++ b/test/expected_results/12_linux_oltp_2_8GB_1000_ssd.txt
@@ -0,0 +1,21 @@
+# DB Version: 12
+# OS Type: linux
+# DB Type: oltp
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 2080kB
+huge_pages = off
+min_wal_size = 2GB
+max_wal_size = 8GB
diff --git a/test/expected_results/12_linux_oltp_4_8GB_1000_hdd.txt b/test/expected_results/12_linux_oltp_4_8GB_1000_hdd.txt
new file mode 100644
index 0000000..1f03ac2
--- /dev/null
+++ b/test/expected_results/12_linux_oltp_4_8GB_1000_hdd.txt
@@ -0,0 +1,25 @@
+# DB Version: 12
+# OS Type: linux
+# DB Type: oltp
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 2088kB
+huge_pages = off
+min_wal_size = 2GB
+max_wal_size = 8GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/12_linux_oltp_4_8GB_1000_san.txt b/test/expected_results/12_linux_oltp_4_8GB_1000_san.txt
new file mode 100644
index 0000000..5007719
--- /dev/null
+++ b/test/expected_results/12_linux_oltp_4_8GB_1000_san.txt
@@ -0,0 +1,25 @@
+# DB Version: 12
+# OS Type: linux
+# DB Type: oltp
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 2088kB
+huge_pages = off
+min_wal_size = 2GB
+max_wal_size = 8GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/12_linux_oltp_4_8GB_1000_ssd.txt b/test/expected_results/12_linux_oltp_4_8GB_1000_ssd.txt
new file mode 100644
index 0000000..e6728c7
--- /dev/null
+++ b/test/expected_results/12_linux_oltp_4_8GB_1000_ssd.txt
@@ -0,0 +1,25 @@
+# DB Version: 12
+# OS Type: linux
+# DB Type: oltp
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 2088kB
+huge_pages = off
+min_wal_size = 2GB
+max_wal_size = 8GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/12_linux_web_8GB_8_1000_hdd.txt b/test/expected_results/12_linux_web_2_8GB_1000_hdd.txt
similarity index 71%
rename from test/expected_results/12_linux_web_8GB_8_1000_hdd.txt
rename to test/expected_results/12_linux_web_2_8GB_1000_hdd.txt
index 62680a6..9892486 100644
--- a/test/expected_results/12_linux_web_8GB_8_1000_hdd.txt
+++ b/test/expected_results/12_linux_web_2_8GB_1000_hdd.txt
@@ -2,7 +2,7 @@
# OS Type: linux
# DB Type: web
# Total Memory (RAM): 8 GB
-# CPUs num: 8
+# CPUs num: 2
# Connections num: 1000
# Data Storage: hdd
@@ -15,10 +15,7 @@ wal_buffers = 16MB
default_statistics_target = 100
random_page_cost = 4
effective_io_concurrency = 2
-work_mem = 524kB
+work_mem = 2080kB
+huge_pages = off
min_wal_size = 1GB
max_wal_size = 4GB
-max_worker_processes = 8
-max_parallel_workers = 8
-max_parallel_maintenance_workers = 4
-max_parallel_workers_per_gather = 4
diff --git a/test/expected_results/12_linux_web_2_8GB_1000_san.txt b/test/expected_results/12_linux_web_2_8GB_1000_san.txt
new file mode 100644
index 0000000..bcee234
--- /dev/null
+++ b/test/expected_results/12_linux_web_2_8GB_1000_san.txt
@@ -0,0 +1,21 @@
+# DB Version: 12
+# OS Type: linux
+# DB Type: web
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 2080kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
diff --git a/test/expected_results/12_linux_web_2_8GB_1000_ssd.txt b/test/expected_results/12_linux_web_2_8GB_1000_ssd.txt
new file mode 100644
index 0000000..ba1e8d1
--- /dev/null
+++ b/test/expected_results/12_linux_web_2_8GB_1000_ssd.txt
@@ -0,0 +1,21 @@
+# DB Version: 12
+# OS Type: linux
+# DB Type: web
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 2080kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
diff --git a/test/expected_results/12_linux_web_4_8GB_1000_hdd.txt b/test/expected_results/12_linux_web_4_8GB_1000_hdd.txt
new file mode 100644
index 0000000..4a0490d
--- /dev/null
+++ b/test/expected_results/12_linux_web_4_8GB_1000_hdd.txt
@@ -0,0 +1,25 @@
+# DB Version: 12
+# OS Type: linux
+# DB Type: web
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 2088kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/12_linux_web_8GB_8_1000_san.txt b/test/expected_results/12_linux_web_4_8GB_1000_san.txt
similarity index 69%
rename from test/expected_results/12_linux_web_8GB_8_1000_san.txt
rename to test/expected_results/12_linux_web_4_8GB_1000_san.txt
index 5370a44..6903920 100644
--- a/test/expected_results/12_linux_web_8GB_8_1000_san.txt
+++ b/test/expected_results/12_linux_web_4_8GB_1000_san.txt
@@ -2,7 +2,7 @@
# OS Type: linux
# DB Type: web
# Total Memory (RAM): 8 GB
-# CPUs num: 8
+# CPUs num: 4
# Connections num: 1000
# Data Storage: san
@@ -15,10 +15,11 @@ wal_buffers = 16MB
default_statistics_target = 100
random_page_cost = 1.1
effective_io_concurrency = 300
-work_mem = 524kB
+work_mem = 2088kB
+huge_pages = off
min_wal_size = 1GB
max_wal_size = 4GB
-max_worker_processes = 8
-max_parallel_workers = 8
-max_parallel_maintenance_workers = 4
-max_parallel_workers_per_gather = 4
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/12_linux_web_8GB_8_1000_ssd.txt b/test/expected_results/12_linux_web_4_8GB_1000_ssd.txt
similarity index 69%
rename from test/expected_results/12_linux_web_8GB_8_1000_ssd.txt
rename to test/expected_results/12_linux_web_4_8GB_1000_ssd.txt
index 994fb82..545b780 100644
--- a/test/expected_results/12_linux_web_8GB_8_1000_ssd.txt
+++ b/test/expected_results/12_linux_web_4_8GB_1000_ssd.txt
@@ -2,7 +2,7 @@
# OS Type: linux
# DB Type: web
# Total Memory (RAM): 8 GB
-# CPUs num: 8
+# CPUs num: 4
# Connections num: 1000
# Data Storage: ssd
@@ -15,10 +15,11 @@ wal_buffers = 16MB
default_statistics_target = 100
random_page_cost = 1.1
effective_io_concurrency = 200
-work_mem = 524kB
+work_mem = 2088kB
+huge_pages = off
min_wal_size = 1GB
max_wal_size = 4GB
-max_worker_processes = 8
-max_parallel_workers = 8
-max_parallel_maintenance_workers = 4
-max_parallel_workers_per_gather = 4
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/13_linux_desktop_2_8GB_1000_hdd.txt b/test/expected_results/13_linux_desktop_2_8GB_1000_hdd.txt
new file mode 100644
index 0000000..0d59cdc
--- /dev/null
+++ b/test/expected_results/13_linux_desktop_2_8GB_1000_hdd.txt
@@ -0,0 +1,23 @@
+# DB Version: 13
+# OS Type: linux
+# DB Type: desktop
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 512MB
+effective_cache_size = 2GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 433kB
+huge_pages = off
+min_wal_size = 100MB
+max_wal_size = 2GB
+wal_level = minimal
+max_wal_senders = 0
diff --git a/test/expected_results/13_linux_desktop_2_8GB_1000_san.txt b/test/expected_results/13_linux_desktop_2_8GB_1000_san.txt
new file mode 100644
index 0000000..bbf1598
--- /dev/null
+++ b/test/expected_results/13_linux_desktop_2_8GB_1000_san.txt
@@ -0,0 +1,23 @@
+# DB Version: 13
+# OS Type: linux
+# DB Type: desktop
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 512MB
+effective_cache_size = 2GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 433kB
+huge_pages = off
+min_wal_size = 100MB
+max_wal_size = 2GB
+wal_level = minimal
+max_wal_senders = 0
diff --git a/test/expected_results/13_linux_desktop_2_8GB_1000_ssd.txt b/test/expected_results/13_linux_desktop_2_8GB_1000_ssd.txt
new file mode 100644
index 0000000..33cc205
--- /dev/null
+++ b/test/expected_results/13_linux_desktop_2_8GB_1000_ssd.txt
@@ -0,0 +1,23 @@
+# DB Version: 13
+# OS Type: linux
+# DB Type: desktop
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 512MB
+effective_cache_size = 2GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 433kB
+huge_pages = off
+min_wal_size = 100MB
+max_wal_size = 2GB
+wal_level = minimal
+max_wal_senders = 0
diff --git a/test/expected_results/13_linux_desktop_4_8GB_1000_hdd.txt b/test/expected_results/13_linux_desktop_4_8GB_1000_hdd.txt
new file mode 100644
index 0000000..9de31e6
--- /dev/null
+++ b/test/expected_results/13_linux_desktop_4_8GB_1000_hdd.txt
@@ -0,0 +1,27 @@
+# DB Version: 13
+# OS Type: linux
+# DB Type: desktop
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 512MB
+effective_cache_size = 2GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 435kB
+huge_pages = off
+min_wal_size = 100MB
+max_wal_size = 2GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
+wal_level = minimal
+max_wal_senders = 0
diff --git a/test/expected_results/13_linux_desktop_4_8GB_1000_san.txt b/test/expected_results/13_linux_desktop_4_8GB_1000_san.txt
new file mode 100644
index 0000000..3233b80
--- /dev/null
+++ b/test/expected_results/13_linux_desktop_4_8GB_1000_san.txt
@@ -0,0 +1,27 @@
+# DB Version: 13
+# OS Type: linux
+# DB Type: desktop
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 512MB
+effective_cache_size = 2GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 435kB
+huge_pages = off
+min_wal_size = 100MB
+max_wal_size = 2GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
+wal_level = minimal
+max_wal_senders = 0
diff --git a/test/expected_results/13_linux_desktop_4_8GB_1000_ssd.txt b/test/expected_results/13_linux_desktop_4_8GB_1000_ssd.txt
new file mode 100644
index 0000000..8e4bf55
--- /dev/null
+++ b/test/expected_results/13_linux_desktop_4_8GB_1000_ssd.txt
@@ -0,0 +1,27 @@
+# DB Version: 13
+# OS Type: linux
+# DB Type: desktop
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 512MB
+effective_cache_size = 2GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 435kB
+huge_pages = off
+min_wal_size = 100MB
+max_wal_size = 2GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
+wal_level = minimal
+max_wal_senders = 0
diff --git a/test/expected_results/13_linux_dw_2_8GB_1000_hdd.txt b/test/expected_results/13_linux_dw_2_8GB_1000_hdd.txt
new file mode 100644
index 0000000..0210904
--- /dev/null
+++ b/test/expected_results/13_linux_dw_2_8GB_1000_hdd.txt
@@ -0,0 +1,21 @@
+# DB Version: 13
+# OS Type: linux
+# DB Type: dw
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 1GB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 500
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 1040kB
+huge_pages = off
+min_wal_size = 4GB
+max_wal_size = 16GB
diff --git a/test/expected_results/13_linux_dw_2_8GB_1000_san.txt b/test/expected_results/13_linux_dw_2_8GB_1000_san.txt
new file mode 100644
index 0000000..5265e08
--- /dev/null
+++ b/test/expected_results/13_linux_dw_2_8GB_1000_san.txt
@@ -0,0 +1,21 @@
+# DB Version: 13
+# OS Type: linux
+# DB Type: dw
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 1GB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 500
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 1040kB
+huge_pages = off
+min_wal_size = 4GB
+max_wal_size = 16GB
diff --git a/test/expected_results/13_linux_dw_2_8GB_1000_ssd.txt b/test/expected_results/13_linux_dw_2_8GB_1000_ssd.txt
new file mode 100644
index 0000000..1643879
--- /dev/null
+++ b/test/expected_results/13_linux_dw_2_8GB_1000_ssd.txt
@@ -0,0 +1,21 @@
+# DB Version: 13
+# OS Type: linux
+# DB Type: dw
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 1GB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 500
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 1040kB
+huge_pages = off
+min_wal_size = 4GB
+max_wal_size = 16GB
diff --git a/test/expected_results/13_linux_dw_4_8GB_1000_hdd.txt b/test/expected_results/13_linux_dw_4_8GB_1000_hdd.txt
new file mode 100644
index 0000000..b208b8f
--- /dev/null
+++ b/test/expected_results/13_linux_dw_4_8GB_1000_hdd.txt
@@ -0,0 +1,25 @@
+# DB Version: 13
+# OS Type: linux
+# DB Type: dw
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 1GB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 500
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 1044kB
+huge_pages = off
+min_wal_size = 4GB
+max_wal_size = 16GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/13_linux_dw_4_8GB_1000_san.txt b/test/expected_results/13_linux_dw_4_8GB_1000_san.txt
new file mode 100644
index 0000000..27b0497
--- /dev/null
+++ b/test/expected_results/13_linux_dw_4_8GB_1000_san.txt
@@ -0,0 +1,25 @@
+# DB Version: 13
+# OS Type: linux
+# DB Type: dw
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 1GB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 500
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 1044kB
+huge_pages = off
+min_wal_size = 4GB
+max_wal_size = 16GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/13_linux_dw_4_8GB_1000_ssd.txt b/test/expected_results/13_linux_dw_4_8GB_1000_ssd.txt
new file mode 100644
index 0000000..020a218
--- /dev/null
+++ b/test/expected_results/13_linux_dw_4_8GB_1000_ssd.txt
@@ -0,0 +1,25 @@
+# DB Version: 13
+# OS Type: linux
+# DB Type: dw
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 1GB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 500
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 1044kB
+huge_pages = off
+min_wal_size = 4GB
+max_wal_size = 16GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/13_linux_mixed_2_8GB_1000_hdd.txt b/test/expected_results/13_linux_mixed_2_8GB_1000_hdd.txt
new file mode 100644
index 0000000..7350da8
--- /dev/null
+++ b/test/expected_results/13_linux_mixed_2_8GB_1000_hdd.txt
@@ -0,0 +1,21 @@
+# DB Version: 13
+# OS Type: linux
+# DB Type: mixed
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 1040kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
diff --git a/test/expected_results/13_linux_mixed_2_8GB_1000_san.txt b/test/expected_results/13_linux_mixed_2_8GB_1000_san.txt
new file mode 100644
index 0000000..d7641e4
--- /dev/null
+++ b/test/expected_results/13_linux_mixed_2_8GB_1000_san.txt
@@ -0,0 +1,21 @@
+# DB Version: 13
+# OS Type: linux
+# DB Type: mixed
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 1040kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
diff --git a/test/expected_results/13_linux_mixed_2_8GB_1000_ssd.txt b/test/expected_results/13_linux_mixed_2_8GB_1000_ssd.txt
new file mode 100644
index 0000000..739a863
--- /dev/null
+++ b/test/expected_results/13_linux_mixed_2_8GB_1000_ssd.txt
@@ -0,0 +1,21 @@
+# DB Version: 13
+# OS Type: linux
+# DB Type: mixed
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 1040kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
diff --git a/test/expected_results/13_linux_mixed_4_8GB_1000_hdd.txt b/test/expected_results/13_linux_mixed_4_8GB_1000_hdd.txt
new file mode 100644
index 0000000..fee78a0
--- /dev/null
+++ b/test/expected_results/13_linux_mixed_4_8GB_1000_hdd.txt
@@ -0,0 +1,25 @@
+# DB Version: 13
+# OS Type: linux
+# DB Type: mixed
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 1044kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/13_linux_mixed_4_8GB_1000_san.txt b/test/expected_results/13_linux_mixed_4_8GB_1000_san.txt
new file mode 100644
index 0000000..d19be2f
--- /dev/null
+++ b/test/expected_results/13_linux_mixed_4_8GB_1000_san.txt
@@ -0,0 +1,25 @@
+# DB Version: 13
+# OS Type: linux
+# DB Type: mixed
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 1044kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/13_linux_mixed_4_8GB_1000_ssd.txt b/test/expected_results/13_linux_mixed_4_8GB_1000_ssd.txt
new file mode 100644
index 0000000..6ac94ff
--- /dev/null
+++ b/test/expected_results/13_linux_mixed_4_8GB_1000_ssd.txt
@@ -0,0 +1,25 @@
+# DB Version: 13
+# OS Type: linux
+# DB Type: mixed
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 1044kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/13_linux_oltp_2_8GB_1000_hdd.txt b/test/expected_results/13_linux_oltp_2_8GB_1000_hdd.txt
new file mode 100644
index 0000000..d740322
--- /dev/null
+++ b/test/expected_results/13_linux_oltp_2_8GB_1000_hdd.txt
@@ -0,0 +1,21 @@
+# DB Version: 13
+# OS Type: linux
+# DB Type: oltp
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 2080kB
+huge_pages = off
+min_wal_size = 2GB
+max_wal_size = 8GB
diff --git a/test/expected_results/13_linux_oltp_2_8GB_1000_san.txt b/test/expected_results/13_linux_oltp_2_8GB_1000_san.txt
new file mode 100644
index 0000000..f48abfe
--- /dev/null
+++ b/test/expected_results/13_linux_oltp_2_8GB_1000_san.txt
@@ -0,0 +1,21 @@
+# DB Version: 13
+# OS Type: linux
+# DB Type: oltp
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 2080kB
+huge_pages = off
+min_wal_size = 2GB
+max_wal_size = 8GB
diff --git a/test/expected_results/13_linux_oltp_2_8GB_1000_ssd.txt b/test/expected_results/13_linux_oltp_2_8GB_1000_ssd.txt
new file mode 100644
index 0000000..88eaf49
--- /dev/null
+++ b/test/expected_results/13_linux_oltp_2_8GB_1000_ssd.txt
@@ -0,0 +1,21 @@
+# DB Version: 13
+# OS Type: linux
+# DB Type: oltp
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 2080kB
+huge_pages = off
+min_wal_size = 2GB
+max_wal_size = 8GB
diff --git a/test/expected_results/13_linux_oltp_4_8GB_1000_hdd.txt b/test/expected_results/13_linux_oltp_4_8GB_1000_hdd.txt
new file mode 100644
index 0000000..b536477
--- /dev/null
+++ b/test/expected_results/13_linux_oltp_4_8GB_1000_hdd.txt
@@ -0,0 +1,25 @@
+# DB Version: 13
+# OS Type: linux
+# DB Type: oltp
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 2088kB
+huge_pages = off
+min_wal_size = 2GB
+max_wal_size = 8GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/13_linux_oltp_4_8GB_1000_san.txt b/test/expected_results/13_linux_oltp_4_8GB_1000_san.txt
new file mode 100644
index 0000000..9b63b14
--- /dev/null
+++ b/test/expected_results/13_linux_oltp_4_8GB_1000_san.txt
@@ -0,0 +1,25 @@
+# DB Version: 13
+# OS Type: linux
+# DB Type: oltp
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 2088kB
+huge_pages = off
+min_wal_size = 2GB
+max_wal_size = 8GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/13_linux_oltp_4_8GB_1000_ssd.txt b/test/expected_results/13_linux_oltp_4_8GB_1000_ssd.txt
new file mode 100644
index 0000000..64261d6
--- /dev/null
+++ b/test/expected_results/13_linux_oltp_4_8GB_1000_ssd.txt
@@ -0,0 +1,25 @@
+# DB Version: 13
+# OS Type: linux
+# DB Type: oltp
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 2088kB
+huge_pages = off
+min_wal_size = 2GB
+max_wal_size = 8GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/13_linux_web_8GB_8_1000_hdd.txt b/test/expected_results/13_linux_web_2_8GB_1000_hdd.txt
similarity index 71%
rename from test/expected_results/13_linux_web_8GB_8_1000_hdd.txt
rename to test/expected_results/13_linux_web_2_8GB_1000_hdd.txt
index e69ee5a..5f50852 100644
--- a/test/expected_results/13_linux_web_8GB_8_1000_hdd.txt
+++ b/test/expected_results/13_linux_web_2_8GB_1000_hdd.txt
@@ -2,7 +2,7 @@
# OS Type: linux
# DB Type: web
# Total Memory (RAM): 8 GB
-# CPUs num: 8
+# CPUs num: 2
# Connections num: 1000
# Data Storage: hdd
@@ -15,10 +15,7 @@ wal_buffers = 16MB
default_statistics_target = 100
random_page_cost = 4
effective_io_concurrency = 2
-work_mem = 524kB
+work_mem = 2080kB
+huge_pages = off
min_wal_size = 1GB
max_wal_size = 4GB
-max_worker_processes = 8
-max_parallel_workers = 8
-max_parallel_maintenance_workers = 4
-max_parallel_workers_per_gather = 4
diff --git a/test/expected_results/13_linux_web_2_8GB_1000_san.txt b/test/expected_results/13_linux_web_2_8GB_1000_san.txt
new file mode 100644
index 0000000..272bea6
--- /dev/null
+++ b/test/expected_results/13_linux_web_2_8GB_1000_san.txt
@@ -0,0 +1,21 @@
+# DB Version: 13
+# OS Type: linux
+# DB Type: web
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 2080kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
diff --git a/test/expected_results/13_linux_web_2_8GB_1000_ssd.txt b/test/expected_results/13_linux_web_2_8GB_1000_ssd.txt
new file mode 100644
index 0000000..5549610
--- /dev/null
+++ b/test/expected_results/13_linux_web_2_8GB_1000_ssd.txt
@@ -0,0 +1,21 @@
+# DB Version: 13
+# OS Type: linux
+# DB Type: web
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 2080kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
diff --git a/test/expected_results/13_linux_web_4_8GB_1000_hdd.txt b/test/expected_results/13_linux_web_4_8GB_1000_hdd.txt
new file mode 100644
index 0000000..639bdf3
--- /dev/null
+++ b/test/expected_results/13_linux_web_4_8GB_1000_hdd.txt
@@ -0,0 +1,25 @@
+# DB Version: 13
+# OS Type: linux
+# DB Type: web
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 2088kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/13_linux_web_8GB_8_1000_san.txt b/test/expected_results/13_linux_web_4_8GB_1000_san.txt
similarity index 69%
rename from test/expected_results/13_linux_web_8GB_8_1000_san.txt
rename to test/expected_results/13_linux_web_4_8GB_1000_san.txt
index f34648e..1e4b080 100644
--- a/test/expected_results/13_linux_web_8GB_8_1000_san.txt
+++ b/test/expected_results/13_linux_web_4_8GB_1000_san.txt
@@ -2,7 +2,7 @@
# OS Type: linux
# DB Type: web
# Total Memory (RAM): 8 GB
-# CPUs num: 8
+# CPUs num: 4
# Connections num: 1000
# Data Storage: san
@@ -15,10 +15,11 @@ wal_buffers = 16MB
default_statistics_target = 100
random_page_cost = 1.1
effective_io_concurrency = 300
-work_mem = 524kB
+work_mem = 2088kB
+huge_pages = off
min_wal_size = 1GB
max_wal_size = 4GB
-max_worker_processes = 8
-max_parallel_workers = 8
-max_parallel_maintenance_workers = 4
-max_parallel_workers_per_gather = 4
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/13_linux_web_8GB_8_1000_ssd.txt b/test/expected_results/13_linux_web_4_8GB_1000_ssd.txt
similarity index 69%
rename from test/expected_results/13_linux_web_8GB_8_1000_ssd.txt
rename to test/expected_results/13_linux_web_4_8GB_1000_ssd.txt
index 08a9c48..b510f72 100644
--- a/test/expected_results/13_linux_web_8GB_8_1000_ssd.txt
+++ b/test/expected_results/13_linux_web_4_8GB_1000_ssd.txt
@@ -2,7 +2,7 @@
# OS Type: linux
# DB Type: web
# Total Memory (RAM): 8 GB
-# CPUs num: 8
+# CPUs num: 4
# Connections num: 1000
# Data Storage: ssd
@@ -15,10 +15,11 @@ wal_buffers = 16MB
default_statistics_target = 100
random_page_cost = 1.1
effective_io_concurrency = 200
-work_mem = 524kB
+work_mem = 2088kB
+huge_pages = off
min_wal_size = 1GB
max_wal_size = 4GB
-max_worker_processes = 8
-max_parallel_workers = 8
-max_parallel_maintenance_workers = 4
-max_parallel_workers_per_gather = 4
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/14_linux_desktop_2_8GB_1000_hdd.txt b/test/expected_results/14_linux_desktop_2_8GB_1000_hdd.txt
new file mode 100644
index 0000000..f87736d
--- /dev/null
+++ b/test/expected_results/14_linux_desktop_2_8GB_1000_hdd.txt
@@ -0,0 +1,23 @@
+# DB Version: 14
+# OS Type: linux
+# DB Type: desktop
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 512MB
+effective_cache_size = 2GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 433kB
+huge_pages = off
+min_wal_size = 100MB
+max_wal_size = 2GB
+wal_level = minimal
+max_wal_senders = 0
diff --git a/test/expected_results/14_linux_desktop_2_8GB_1000_san.txt b/test/expected_results/14_linux_desktop_2_8GB_1000_san.txt
new file mode 100644
index 0000000..d0f66fc
--- /dev/null
+++ b/test/expected_results/14_linux_desktop_2_8GB_1000_san.txt
@@ -0,0 +1,23 @@
+# DB Version: 14
+# OS Type: linux
+# DB Type: desktop
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 512MB
+effective_cache_size = 2GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 433kB
+huge_pages = off
+min_wal_size = 100MB
+max_wal_size = 2GB
+wal_level = minimal
+max_wal_senders = 0
diff --git a/test/expected_results/14_linux_desktop_2_8GB_1000_ssd.txt b/test/expected_results/14_linux_desktop_2_8GB_1000_ssd.txt
new file mode 100644
index 0000000..90a7fca
--- /dev/null
+++ b/test/expected_results/14_linux_desktop_2_8GB_1000_ssd.txt
@@ -0,0 +1,23 @@
+# DB Version: 14
+# OS Type: linux
+# DB Type: desktop
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 512MB
+effective_cache_size = 2GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 433kB
+huge_pages = off
+min_wal_size = 100MB
+max_wal_size = 2GB
+wal_level = minimal
+max_wal_senders = 0
diff --git a/test/expected_results/14_linux_desktop_4_8GB_1000_hdd.txt b/test/expected_results/14_linux_desktop_4_8GB_1000_hdd.txt
new file mode 100644
index 0000000..1fb097d
--- /dev/null
+++ b/test/expected_results/14_linux_desktop_4_8GB_1000_hdd.txt
@@ -0,0 +1,27 @@
+# DB Version: 14
+# OS Type: linux
+# DB Type: desktop
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 512MB
+effective_cache_size = 2GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 435kB
+huge_pages = off
+min_wal_size = 100MB
+max_wal_size = 2GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
+wal_level = minimal
+max_wal_senders = 0
diff --git a/test/expected_results/14_linux_desktop_4_8GB_1000_san.txt b/test/expected_results/14_linux_desktop_4_8GB_1000_san.txt
new file mode 100644
index 0000000..3ca04e9
--- /dev/null
+++ b/test/expected_results/14_linux_desktop_4_8GB_1000_san.txt
@@ -0,0 +1,27 @@
+# DB Version: 14
+# OS Type: linux
+# DB Type: desktop
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 512MB
+effective_cache_size = 2GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 435kB
+huge_pages = off
+min_wal_size = 100MB
+max_wal_size = 2GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
+wal_level = minimal
+max_wal_senders = 0
diff --git a/test/expected_results/14_linux_desktop_4_8GB_1000_ssd.txt b/test/expected_results/14_linux_desktop_4_8GB_1000_ssd.txt
new file mode 100644
index 0000000..2b1def0
--- /dev/null
+++ b/test/expected_results/14_linux_desktop_4_8GB_1000_ssd.txt
@@ -0,0 +1,27 @@
+# DB Version: 14
+# OS Type: linux
+# DB Type: desktop
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 512MB
+effective_cache_size = 2GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 435kB
+huge_pages = off
+min_wal_size = 100MB
+max_wal_size = 2GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
+wal_level = minimal
+max_wal_senders = 0
diff --git a/test/expected_results/14_linux_dw_2_8GB_1000_hdd.txt b/test/expected_results/14_linux_dw_2_8GB_1000_hdd.txt
new file mode 100644
index 0000000..12af380
--- /dev/null
+++ b/test/expected_results/14_linux_dw_2_8GB_1000_hdd.txt
@@ -0,0 +1,21 @@
+# DB Version: 14
+# OS Type: linux
+# DB Type: dw
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 1GB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 500
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 1040kB
+huge_pages = off
+min_wal_size = 4GB
+max_wal_size = 16GB
diff --git a/test/expected_results/14_linux_dw_2_8GB_1000_san.txt b/test/expected_results/14_linux_dw_2_8GB_1000_san.txt
new file mode 100644
index 0000000..97e1354
--- /dev/null
+++ b/test/expected_results/14_linux_dw_2_8GB_1000_san.txt
@@ -0,0 +1,21 @@
+# DB Version: 14
+# OS Type: linux
+# DB Type: dw
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 1GB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 500
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 1040kB
+huge_pages = off
+min_wal_size = 4GB
+max_wal_size = 16GB
diff --git a/test/expected_results/14_linux_dw_2_8GB_1000_ssd.txt b/test/expected_results/14_linux_dw_2_8GB_1000_ssd.txt
new file mode 100644
index 0000000..cff8855
--- /dev/null
+++ b/test/expected_results/14_linux_dw_2_8GB_1000_ssd.txt
@@ -0,0 +1,21 @@
+# DB Version: 14
+# OS Type: linux
+# DB Type: dw
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 1GB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 500
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 1040kB
+huge_pages = off
+min_wal_size = 4GB
+max_wal_size = 16GB
diff --git a/test/expected_results/14_linux_dw_4_8GB_1000_hdd.txt b/test/expected_results/14_linux_dw_4_8GB_1000_hdd.txt
new file mode 100644
index 0000000..5236778
--- /dev/null
+++ b/test/expected_results/14_linux_dw_4_8GB_1000_hdd.txt
@@ -0,0 +1,25 @@
+# DB Version: 14
+# OS Type: linux
+# DB Type: dw
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 1GB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 500
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 1044kB
+huge_pages = off
+min_wal_size = 4GB
+max_wal_size = 16GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/14_linux_dw_4_8GB_1000_san.txt b/test/expected_results/14_linux_dw_4_8GB_1000_san.txt
new file mode 100644
index 0000000..f0a1797
--- /dev/null
+++ b/test/expected_results/14_linux_dw_4_8GB_1000_san.txt
@@ -0,0 +1,25 @@
+# DB Version: 14
+# OS Type: linux
+# DB Type: dw
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 1GB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 500
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 1044kB
+huge_pages = off
+min_wal_size = 4GB
+max_wal_size = 16GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/14_linux_dw_4_8GB_1000_ssd.txt b/test/expected_results/14_linux_dw_4_8GB_1000_ssd.txt
new file mode 100644
index 0000000..b28136e
--- /dev/null
+++ b/test/expected_results/14_linux_dw_4_8GB_1000_ssd.txt
@@ -0,0 +1,25 @@
+# DB Version: 14
+# OS Type: linux
+# DB Type: dw
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 1GB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 500
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 1044kB
+huge_pages = off
+min_wal_size = 4GB
+max_wal_size = 16GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/14_linux_mixed_2_8GB_1000_hdd.txt b/test/expected_results/14_linux_mixed_2_8GB_1000_hdd.txt
new file mode 100644
index 0000000..3ff011c
--- /dev/null
+++ b/test/expected_results/14_linux_mixed_2_8GB_1000_hdd.txt
@@ -0,0 +1,21 @@
+# DB Version: 14
+# OS Type: linux
+# DB Type: mixed
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 1040kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
diff --git a/test/expected_results/14_linux_mixed_2_8GB_1000_san.txt b/test/expected_results/14_linux_mixed_2_8GB_1000_san.txt
new file mode 100644
index 0000000..61aa559
--- /dev/null
+++ b/test/expected_results/14_linux_mixed_2_8GB_1000_san.txt
@@ -0,0 +1,21 @@
+# DB Version: 14
+# OS Type: linux
+# DB Type: mixed
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 1040kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
diff --git a/test/expected_results/14_linux_mixed_2_8GB_1000_ssd.txt b/test/expected_results/14_linux_mixed_2_8GB_1000_ssd.txt
new file mode 100644
index 0000000..d141c57
--- /dev/null
+++ b/test/expected_results/14_linux_mixed_2_8GB_1000_ssd.txt
@@ -0,0 +1,21 @@
+# DB Version: 14
+# OS Type: linux
+# DB Type: mixed
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 1040kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
diff --git a/test/expected_results/14_linux_mixed_4_8GB_1000_hdd.txt b/test/expected_results/14_linux_mixed_4_8GB_1000_hdd.txt
new file mode 100644
index 0000000..73ae2cd
--- /dev/null
+++ b/test/expected_results/14_linux_mixed_4_8GB_1000_hdd.txt
@@ -0,0 +1,25 @@
+# DB Version: 14
+# OS Type: linux
+# DB Type: mixed
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 1044kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/14_linux_mixed_4_8GB_1000_san.txt b/test/expected_results/14_linux_mixed_4_8GB_1000_san.txt
new file mode 100644
index 0000000..6081d03
--- /dev/null
+++ b/test/expected_results/14_linux_mixed_4_8GB_1000_san.txt
@@ -0,0 +1,25 @@
+# DB Version: 14
+# OS Type: linux
+# DB Type: mixed
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 1044kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/14_linux_mixed_4_8GB_1000_ssd.txt b/test/expected_results/14_linux_mixed_4_8GB_1000_ssd.txt
new file mode 100644
index 0000000..4f9c078
--- /dev/null
+++ b/test/expected_results/14_linux_mixed_4_8GB_1000_ssd.txt
@@ -0,0 +1,25 @@
+# DB Version: 14
+# OS Type: linux
+# DB Type: mixed
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 1044kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/14_linux_oltp_2_8GB_1000_hdd.txt b/test/expected_results/14_linux_oltp_2_8GB_1000_hdd.txt
new file mode 100644
index 0000000..a27c6ee
--- /dev/null
+++ b/test/expected_results/14_linux_oltp_2_8GB_1000_hdd.txt
@@ -0,0 +1,21 @@
+# DB Version: 14
+# OS Type: linux
+# DB Type: oltp
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 2080kB
+huge_pages = off
+min_wal_size = 2GB
+max_wal_size = 8GB
diff --git a/test/expected_results/14_linux_oltp_2_8GB_1000_san.txt b/test/expected_results/14_linux_oltp_2_8GB_1000_san.txt
new file mode 100644
index 0000000..3c3ba84
--- /dev/null
+++ b/test/expected_results/14_linux_oltp_2_8GB_1000_san.txt
@@ -0,0 +1,21 @@
+# DB Version: 14
+# OS Type: linux
+# DB Type: oltp
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 2080kB
+huge_pages = off
+min_wal_size = 2GB
+max_wal_size = 8GB
diff --git a/test/expected_results/14_linux_oltp_2_8GB_1000_ssd.txt b/test/expected_results/14_linux_oltp_2_8GB_1000_ssd.txt
new file mode 100644
index 0000000..0e76b10
--- /dev/null
+++ b/test/expected_results/14_linux_oltp_2_8GB_1000_ssd.txt
@@ -0,0 +1,21 @@
+# DB Version: 14
+# OS Type: linux
+# DB Type: oltp
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 2080kB
+huge_pages = off
+min_wal_size = 2GB
+max_wal_size = 8GB
diff --git a/test/expected_results/14_linux_oltp_4_8GB_1000_hdd.txt b/test/expected_results/14_linux_oltp_4_8GB_1000_hdd.txt
new file mode 100644
index 0000000..4294931
--- /dev/null
+++ b/test/expected_results/14_linux_oltp_4_8GB_1000_hdd.txt
@@ -0,0 +1,25 @@
+# DB Version: 14
+# OS Type: linux
+# DB Type: oltp
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 2088kB
+huge_pages = off
+min_wal_size = 2GB
+max_wal_size = 8GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/14_linux_oltp_4_8GB_1000_san.txt b/test/expected_results/14_linux_oltp_4_8GB_1000_san.txt
new file mode 100644
index 0000000..59a714c
--- /dev/null
+++ b/test/expected_results/14_linux_oltp_4_8GB_1000_san.txt
@@ -0,0 +1,25 @@
+# DB Version: 14
+# OS Type: linux
+# DB Type: oltp
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 2088kB
+huge_pages = off
+min_wal_size = 2GB
+max_wal_size = 8GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/14_linux_oltp_4_8GB_1000_ssd.txt b/test/expected_results/14_linux_oltp_4_8GB_1000_ssd.txt
new file mode 100644
index 0000000..cc87684
--- /dev/null
+++ b/test/expected_results/14_linux_oltp_4_8GB_1000_ssd.txt
@@ -0,0 +1,25 @@
+# DB Version: 14
+# OS Type: linux
+# DB Type: oltp
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 2088kB
+huge_pages = off
+min_wal_size = 2GB
+max_wal_size = 8GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/14_linux_web_8GB_8_1000_hdd.txt b/test/expected_results/14_linux_web_2_8GB_1000_hdd.txt
similarity index 71%
rename from test/expected_results/14_linux_web_8GB_8_1000_hdd.txt
rename to test/expected_results/14_linux_web_2_8GB_1000_hdd.txt
index cae331e..43a4f21 100644
--- a/test/expected_results/14_linux_web_8GB_8_1000_hdd.txt
+++ b/test/expected_results/14_linux_web_2_8GB_1000_hdd.txt
@@ -2,7 +2,7 @@
# OS Type: linux
# DB Type: web
# Total Memory (RAM): 8 GB
-# CPUs num: 8
+# CPUs num: 2
# Connections num: 1000
# Data Storage: hdd
@@ -15,10 +15,7 @@ wal_buffers = 16MB
default_statistics_target = 100
random_page_cost = 4
effective_io_concurrency = 2
-work_mem = 524kB
+work_mem = 2080kB
+huge_pages = off
min_wal_size = 1GB
max_wal_size = 4GB
-max_worker_processes = 8
-max_parallel_workers = 8
-max_parallel_maintenance_workers = 4
-max_parallel_workers_per_gather = 4
diff --git a/test/expected_results/14_linux_web_2_8GB_1000_san.txt b/test/expected_results/14_linux_web_2_8GB_1000_san.txt
new file mode 100644
index 0000000..4d29701
--- /dev/null
+++ b/test/expected_results/14_linux_web_2_8GB_1000_san.txt
@@ -0,0 +1,21 @@
+# DB Version: 14
+# OS Type: linux
+# DB Type: web
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 2080kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
diff --git a/test/expected_results/14_linux_web_2_8GB_1000_ssd.txt b/test/expected_results/14_linux_web_2_8GB_1000_ssd.txt
new file mode 100644
index 0000000..c6f6369
--- /dev/null
+++ b/test/expected_results/14_linux_web_2_8GB_1000_ssd.txt
@@ -0,0 +1,21 @@
+# DB Version: 14
+# OS Type: linux
+# DB Type: web
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 2080kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
diff --git a/test/expected_results/14_linux_web_4_8GB_1000_hdd.txt b/test/expected_results/14_linux_web_4_8GB_1000_hdd.txt
new file mode 100644
index 0000000..76eb9d7
--- /dev/null
+++ b/test/expected_results/14_linux_web_4_8GB_1000_hdd.txt
@@ -0,0 +1,25 @@
+# DB Version: 14
+# OS Type: linux
+# DB Type: web
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 2088kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/14_linux_web_8GB_8_1000_san.txt b/test/expected_results/14_linux_web_4_8GB_1000_san.txt
similarity index 69%
rename from test/expected_results/14_linux_web_8GB_8_1000_san.txt
rename to test/expected_results/14_linux_web_4_8GB_1000_san.txt
index ddf738b..7694463 100644
--- a/test/expected_results/14_linux_web_8GB_8_1000_san.txt
+++ b/test/expected_results/14_linux_web_4_8GB_1000_san.txt
@@ -2,7 +2,7 @@
# OS Type: linux
# DB Type: web
# Total Memory (RAM): 8 GB
-# CPUs num: 8
+# CPUs num: 4
# Connections num: 1000
# Data Storage: san
@@ -15,10 +15,11 @@ wal_buffers = 16MB
default_statistics_target = 100
random_page_cost = 1.1
effective_io_concurrency = 300
-work_mem = 524kB
+work_mem = 2088kB
+huge_pages = off
min_wal_size = 1GB
max_wal_size = 4GB
-max_worker_processes = 8
-max_parallel_workers = 8
-max_parallel_maintenance_workers = 4
-max_parallel_workers_per_gather = 4
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/14_linux_web_8GB_8_1000_ssd.txt b/test/expected_results/14_linux_web_4_8GB_1000_ssd.txt
similarity index 69%
rename from test/expected_results/14_linux_web_8GB_8_1000_ssd.txt
rename to test/expected_results/14_linux_web_4_8GB_1000_ssd.txt
index f88a45c..166b534 100644
--- a/test/expected_results/14_linux_web_8GB_8_1000_ssd.txt
+++ b/test/expected_results/14_linux_web_4_8GB_1000_ssd.txt
@@ -2,7 +2,7 @@
# OS Type: linux
# DB Type: web
# Total Memory (RAM): 8 GB
-# CPUs num: 8
+# CPUs num: 4
# Connections num: 1000
# Data Storage: ssd
@@ -15,10 +15,11 @@ wal_buffers = 16MB
default_statistics_target = 100
random_page_cost = 1.1
effective_io_concurrency = 200
-work_mem = 524kB
+work_mem = 2088kB
+huge_pages = off
min_wal_size = 1GB
max_wal_size = 4GB
-max_worker_processes = 8
-max_parallel_workers = 8
-max_parallel_maintenance_workers = 4
-max_parallel_workers_per_gather = 4
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/15_linux_desktop_2_8GB_1000_hdd.txt b/test/expected_results/15_linux_desktop_2_8GB_1000_hdd.txt
new file mode 100644
index 0000000..5cf88ab
--- /dev/null
+++ b/test/expected_results/15_linux_desktop_2_8GB_1000_hdd.txt
@@ -0,0 +1,23 @@
+# DB Version: 15
+# OS Type: linux
+# DB Type: desktop
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 512MB
+effective_cache_size = 2GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 433kB
+huge_pages = off
+min_wal_size = 100MB
+max_wal_size = 2GB
+wal_level = minimal
+max_wal_senders = 0
diff --git a/test/expected_results/15_linux_desktop_2_8GB_1000_san.txt b/test/expected_results/15_linux_desktop_2_8GB_1000_san.txt
new file mode 100644
index 0000000..7742d1a
--- /dev/null
+++ b/test/expected_results/15_linux_desktop_2_8GB_1000_san.txt
@@ -0,0 +1,23 @@
+# DB Version: 15
+# OS Type: linux
+# DB Type: desktop
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 512MB
+effective_cache_size = 2GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 433kB
+huge_pages = off
+min_wal_size = 100MB
+max_wal_size = 2GB
+wal_level = minimal
+max_wal_senders = 0
diff --git a/test/expected_results/15_linux_desktop_2_8GB_1000_ssd.txt b/test/expected_results/15_linux_desktop_2_8GB_1000_ssd.txt
new file mode 100644
index 0000000..6895576
--- /dev/null
+++ b/test/expected_results/15_linux_desktop_2_8GB_1000_ssd.txt
@@ -0,0 +1,23 @@
+# DB Version: 15
+# OS Type: linux
+# DB Type: desktop
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 512MB
+effective_cache_size = 2GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 433kB
+huge_pages = off
+min_wal_size = 100MB
+max_wal_size = 2GB
+wal_level = minimal
+max_wal_senders = 0
diff --git a/test/expected_results/15_linux_desktop_4_8GB_1000_hdd.txt b/test/expected_results/15_linux_desktop_4_8GB_1000_hdd.txt
new file mode 100644
index 0000000..9342bfb
--- /dev/null
+++ b/test/expected_results/15_linux_desktop_4_8GB_1000_hdd.txt
@@ -0,0 +1,27 @@
+# DB Version: 15
+# OS Type: linux
+# DB Type: desktop
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 512MB
+effective_cache_size = 2GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 435kB
+huge_pages = off
+min_wal_size = 100MB
+max_wal_size = 2GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
+wal_level = minimal
+max_wal_senders = 0
diff --git a/test/expected_results/15_linux_desktop_4_8GB_1000_san.txt b/test/expected_results/15_linux_desktop_4_8GB_1000_san.txt
new file mode 100644
index 0000000..0bd037f
--- /dev/null
+++ b/test/expected_results/15_linux_desktop_4_8GB_1000_san.txt
@@ -0,0 +1,27 @@
+# DB Version: 15
+# OS Type: linux
+# DB Type: desktop
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 512MB
+effective_cache_size = 2GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 435kB
+huge_pages = off
+min_wal_size = 100MB
+max_wal_size = 2GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
+wal_level = minimal
+max_wal_senders = 0
diff --git a/test/expected_results/15_linux_desktop_4_8GB_1000_ssd.txt b/test/expected_results/15_linux_desktop_4_8GB_1000_ssd.txt
new file mode 100644
index 0000000..dad9009
--- /dev/null
+++ b/test/expected_results/15_linux_desktop_4_8GB_1000_ssd.txt
@@ -0,0 +1,27 @@
+# DB Version: 15
+# OS Type: linux
+# DB Type: desktop
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 512MB
+effective_cache_size = 2GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 435kB
+huge_pages = off
+min_wal_size = 100MB
+max_wal_size = 2GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
+wal_level = minimal
+max_wal_senders = 0
diff --git a/test/expected_results/15_linux_dw_2_8GB_1000_hdd.txt b/test/expected_results/15_linux_dw_2_8GB_1000_hdd.txt
new file mode 100644
index 0000000..62e0092
--- /dev/null
+++ b/test/expected_results/15_linux_dw_2_8GB_1000_hdd.txt
@@ -0,0 +1,21 @@
+# DB Version: 15
+# OS Type: linux
+# DB Type: dw
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 1GB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 500
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 1040kB
+huge_pages = off
+min_wal_size = 4GB
+max_wal_size = 16GB
diff --git a/test/expected_results/15_linux_dw_2_8GB_1000_san.txt b/test/expected_results/15_linux_dw_2_8GB_1000_san.txt
new file mode 100644
index 0000000..a39ff43
--- /dev/null
+++ b/test/expected_results/15_linux_dw_2_8GB_1000_san.txt
@@ -0,0 +1,21 @@
+# DB Version: 15
+# OS Type: linux
+# DB Type: dw
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 1GB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 500
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 1040kB
+huge_pages = off
+min_wal_size = 4GB
+max_wal_size = 16GB
diff --git a/test/expected_results/15_linux_dw_2_8GB_1000_ssd.txt b/test/expected_results/15_linux_dw_2_8GB_1000_ssd.txt
new file mode 100644
index 0000000..62cc5c5
--- /dev/null
+++ b/test/expected_results/15_linux_dw_2_8GB_1000_ssd.txt
@@ -0,0 +1,21 @@
+# DB Version: 15
+# OS Type: linux
+# DB Type: dw
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 1GB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 500
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 1040kB
+huge_pages = off
+min_wal_size = 4GB
+max_wal_size = 16GB
diff --git a/test/expected_results/15_linux_dw_4_8GB_1000_hdd.txt b/test/expected_results/15_linux_dw_4_8GB_1000_hdd.txt
new file mode 100644
index 0000000..d0b12c7
--- /dev/null
+++ b/test/expected_results/15_linux_dw_4_8GB_1000_hdd.txt
@@ -0,0 +1,25 @@
+# DB Version: 15
+# OS Type: linux
+# DB Type: dw
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 1GB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 500
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 1044kB
+huge_pages = off
+min_wal_size = 4GB
+max_wal_size = 16GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/15_linux_dw_4_8GB_1000_san.txt b/test/expected_results/15_linux_dw_4_8GB_1000_san.txt
new file mode 100644
index 0000000..d7dc38f
--- /dev/null
+++ b/test/expected_results/15_linux_dw_4_8GB_1000_san.txt
@@ -0,0 +1,25 @@
+# DB Version: 15
+# OS Type: linux
+# DB Type: dw
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 1GB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 500
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 1044kB
+huge_pages = off
+min_wal_size = 4GB
+max_wal_size = 16GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/15_linux_dw_4_8GB_1000_ssd.txt b/test/expected_results/15_linux_dw_4_8GB_1000_ssd.txt
new file mode 100644
index 0000000..ff242cf
--- /dev/null
+++ b/test/expected_results/15_linux_dw_4_8GB_1000_ssd.txt
@@ -0,0 +1,25 @@
+# DB Version: 15
+# OS Type: linux
+# DB Type: dw
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 1GB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 500
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 1044kB
+huge_pages = off
+min_wal_size = 4GB
+max_wal_size = 16GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/15_linux_mixed_2_8GB_1000_hdd.txt b/test/expected_results/15_linux_mixed_2_8GB_1000_hdd.txt
new file mode 100644
index 0000000..3e0be02
--- /dev/null
+++ b/test/expected_results/15_linux_mixed_2_8GB_1000_hdd.txt
@@ -0,0 +1,21 @@
+# DB Version: 15
+# OS Type: linux
+# DB Type: mixed
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 1040kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
diff --git a/test/expected_results/15_linux_mixed_2_8GB_1000_san.txt b/test/expected_results/15_linux_mixed_2_8GB_1000_san.txt
new file mode 100644
index 0000000..52e24e3
--- /dev/null
+++ b/test/expected_results/15_linux_mixed_2_8GB_1000_san.txt
@@ -0,0 +1,21 @@
+# DB Version: 15
+# OS Type: linux
+# DB Type: mixed
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 1040kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
diff --git a/test/expected_results/15_linux_mixed_2_8GB_1000_ssd.txt b/test/expected_results/15_linux_mixed_2_8GB_1000_ssd.txt
new file mode 100644
index 0000000..41f34cc
--- /dev/null
+++ b/test/expected_results/15_linux_mixed_2_8GB_1000_ssd.txt
@@ -0,0 +1,21 @@
+# DB Version: 15
+# OS Type: linux
+# DB Type: mixed
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 1040kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
diff --git a/test/expected_results/15_linux_mixed_4_8GB_1000_hdd.txt b/test/expected_results/15_linux_mixed_4_8GB_1000_hdd.txt
new file mode 100644
index 0000000..434955c
--- /dev/null
+++ b/test/expected_results/15_linux_mixed_4_8GB_1000_hdd.txt
@@ -0,0 +1,25 @@
+# DB Version: 15
+# OS Type: linux
+# DB Type: mixed
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 1044kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/15_linux_mixed_4_8GB_1000_san.txt b/test/expected_results/15_linux_mixed_4_8GB_1000_san.txt
new file mode 100644
index 0000000..39881a9
--- /dev/null
+++ b/test/expected_results/15_linux_mixed_4_8GB_1000_san.txt
@@ -0,0 +1,25 @@
+# DB Version: 15
+# OS Type: linux
+# DB Type: mixed
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 1044kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/15_linux_mixed_4_8GB_1000_ssd.txt b/test/expected_results/15_linux_mixed_4_8GB_1000_ssd.txt
new file mode 100644
index 0000000..b4f63cc
--- /dev/null
+++ b/test/expected_results/15_linux_mixed_4_8GB_1000_ssd.txt
@@ -0,0 +1,25 @@
+# DB Version: 15
+# OS Type: linux
+# DB Type: mixed
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 1044kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/15_linux_oltp_2_8GB_1000_hdd.txt b/test/expected_results/15_linux_oltp_2_8GB_1000_hdd.txt
new file mode 100644
index 0000000..008f34f
--- /dev/null
+++ b/test/expected_results/15_linux_oltp_2_8GB_1000_hdd.txt
@@ -0,0 +1,21 @@
+# DB Version: 15
+# OS Type: linux
+# DB Type: oltp
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 2080kB
+huge_pages = off
+min_wal_size = 2GB
+max_wal_size = 8GB
diff --git a/test/expected_results/15_linux_oltp_2_8GB_1000_san.txt b/test/expected_results/15_linux_oltp_2_8GB_1000_san.txt
new file mode 100644
index 0000000..07ffb17
--- /dev/null
+++ b/test/expected_results/15_linux_oltp_2_8GB_1000_san.txt
@@ -0,0 +1,21 @@
+# DB Version: 15
+# OS Type: linux
+# DB Type: oltp
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 2080kB
+huge_pages = off
+min_wal_size = 2GB
+max_wal_size = 8GB
diff --git a/test/expected_results/15_linux_oltp_2_8GB_1000_ssd.txt b/test/expected_results/15_linux_oltp_2_8GB_1000_ssd.txt
new file mode 100644
index 0000000..bdc0805
--- /dev/null
+++ b/test/expected_results/15_linux_oltp_2_8GB_1000_ssd.txt
@@ -0,0 +1,21 @@
+# DB Version: 15
+# OS Type: linux
+# DB Type: oltp
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 2080kB
+huge_pages = off
+min_wal_size = 2GB
+max_wal_size = 8GB
diff --git a/test/expected_results/15_linux_oltp_4_8GB_1000_hdd.txt b/test/expected_results/15_linux_oltp_4_8GB_1000_hdd.txt
new file mode 100644
index 0000000..4ad698b
--- /dev/null
+++ b/test/expected_results/15_linux_oltp_4_8GB_1000_hdd.txt
@@ -0,0 +1,25 @@
+# DB Version: 15
+# OS Type: linux
+# DB Type: oltp
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 2088kB
+huge_pages = off
+min_wal_size = 2GB
+max_wal_size = 8GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/15_linux_oltp_4_8GB_1000_san.txt b/test/expected_results/15_linux_oltp_4_8GB_1000_san.txt
new file mode 100644
index 0000000..39b647a
--- /dev/null
+++ b/test/expected_results/15_linux_oltp_4_8GB_1000_san.txt
@@ -0,0 +1,25 @@
+# DB Version: 15
+# OS Type: linux
+# DB Type: oltp
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 2088kB
+huge_pages = off
+min_wal_size = 2GB
+max_wal_size = 8GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/15_linux_oltp_4_8GB_1000_ssd.txt b/test/expected_results/15_linux_oltp_4_8GB_1000_ssd.txt
new file mode 100644
index 0000000..7531a89
--- /dev/null
+++ b/test/expected_results/15_linux_oltp_4_8GB_1000_ssd.txt
@@ -0,0 +1,25 @@
+# DB Version: 15
+# OS Type: linux
+# DB Type: oltp
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 2088kB
+huge_pages = off
+min_wal_size = 2GB
+max_wal_size = 8GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/15_linux_web_8GB_8_1000_hdd.txt b/test/expected_results/15_linux_web_2_8GB_1000_hdd.txt
similarity index 71%
rename from test/expected_results/15_linux_web_8GB_8_1000_hdd.txt
rename to test/expected_results/15_linux_web_2_8GB_1000_hdd.txt
index 6ae554a..1eca7e8 100644
--- a/test/expected_results/15_linux_web_8GB_8_1000_hdd.txt
+++ b/test/expected_results/15_linux_web_2_8GB_1000_hdd.txt
@@ -2,7 +2,7 @@
# OS Type: linux
# DB Type: web
# Total Memory (RAM): 8 GB
-# CPUs num: 8
+# CPUs num: 2
# Connections num: 1000
# Data Storage: hdd
@@ -15,10 +15,7 @@ wal_buffers = 16MB
default_statistics_target = 100
random_page_cost = 4
effective_io_concurrency = 2
-work_mem = 524kB
+work_mem = 2080kB
+huge_pages = off
min_wal_size = 1GB
max_wal_size = 4GB
-max_worker_processes = 8
-max_parallel_workers = 8
-max_parallel_maintenance_workers = 4
-max_parallel_workers_per_gather = 4
diff --git a/test/expected_results/15_linux_web_2_8GB_1000_san.txt b/test/expected_results/15_linux_web_2_8GB_1000_san.txt
new file mode 100644
index 0000000..857c67d
--- /dev/null
+++ b/test/expected_results/15_linux_web_2_8GB_1000_san.txt
@@ -0,0 +1,21 @@
+# DB Version: 15
+# OS Type: linux
+# DB Type: web
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 2080kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
diff --git a/test/expected_results/15_linux_web_2_8GB_1000_ssd.txt b/test/expected_results/15_linux_web_2_8GB_1000_ssd.txt
new file mode 100644
index 0000000..20fdcd6
--- /dev/null
+++ b/test/expected_results/15_linux_web_2_8GB_1000_ssd.txt
@@ -0,0 +1,21 @@
+# DB Version: 15
+# OS Type: linux
+# DB Type: web
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 2080kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
diff --git a/test/expected_results/15_linux_web_4_8GB_1000_hdd.txt b/test/expected_results/15_linux_web_4_8GB_1000_hdd.txt
new file mode 100644
index 0000000..dac0f8b
--- /dev/null
+++ b/test/expected_results/15_linux_web_4_8GB_1000_hdd.txt
@@ -0,0 +1,25 @@
+# DB Version: 15
+# OS Type: linux
+# DB Type: web
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 2088kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/15_linux_web_8GB_8_1000_san.txt b/test/expected_results/15_linux_web_4_8GB_1000_san.txt
similarity index 69%
rename from test/expected_results/15_linux_web_8GB_8_1000_san.txt
rename to test/expected_results/15_linux_web_4_8GB_1000_san.txt
index 4e6b3de..9b73fd2 100644
--- a/test/expected_results/15_linux_web_8GB_8_1000_san.txt
+++ b/test/expected_results/15_linux_web_4_8GB_1000_san.txt
@@ -2,7 +2,7 @@
# OS Type: linux
# DB Type: web
# Total Memory (RAM): 8 GB
-# CPUs num: 8
+# CPUs num: 4
# Connections num: 1000
# Data Storage: san
@@ -15,10 +15,11 @@ wal_buffers = 16MB
default_statistics_target = 100
random_page_cost = 1.1
effective_io_concurrency = 300
-work_mem = 524kB
+work_mem = 2088kB
+huge_pages = off
min_wal_size = 1GB
max_wal_size = 4GB
-max_worker_processes = 8
-max_parallel_workers = 8
-max_parallel_maintenance_workers = 4
-max_parallel_workers_per_gather = 4
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/15_linux_web_8GB_8_1000_ssd.txt b/test/expected_results/15_linux_web_4_8GB_1000_ssd.txt
similarity index 69%
rename from test/expected_results/15_linux_web_8GB_8_1000_ssd.txt
rename to test/expected_results/15_linux_web_4_8GB_1000_ssd.txt
index e7f5203..e27e401 100644
--- a/test/expected_results/15_linux_web_8GB_8_1000_ssd.txt
+++ b/test/expected_results/15_linux_web_4_8GB_1000_ssd.txt
@@ -2,7 +2,7 @@
# OS Type: linux
# DB Type: web
# Total Memory (RAM): 8 GB
-# CPUs num: 8
+# CPUs num: 4
# Connections num: 1000
# Data Storage: ssd
@@ -15,10 +15,11 @@ wal_buffers = 16MB
default_statistics_target = 100
random_page_cost = 1.1
effective_io_concurrency = 200
-work_mem = 524kB
+work_mem = 2088kB
+huge_pages = off
min_wal_size = 1GB
max_wal_size = 4GB
-max_worker_processes = 8
-max_parallel_workers = 8
-max_parallel_maintenance_workers = 4
-max_parallel_workers_per_gather = 4
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/16_linux_desktop_2_8GB_1000_hdd.txt b/test/expected_results/16_linux_desktop_2_8GB_1000_hdd.txt
new file mode 100644
index 0000000..82efe83
--- /dev/null
+++ b/test/expected_results/16_linux_desktop_2_8GB_1000_hdd.txt
@@ -0,0 +1,23 @@
+# DB Version: 16
+# OS Type: linux
+# DB Type: desktop
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 512MB
+effective_cache_size = 2GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 433kB
+huge_pages = off
+min_wal_size = 100MB
+max_wal_size = 2GB
+wal_level = minimal
+max_wal_senders = 0
diff --git a/test/expected_results/16_linux_desktop_2_8GB_1000_san.txt b/test/expected_results/16_linux_desktop_2_8GB_1000_san.txt
new file mode 100644
index 0000000..317631b
--- /dev/null
+++ b/test/expected_results/16_linux_desktop_2_8GB_1000_san.txt
@@ -0,0 +1,23 @@
+# DB Version: 16
+# OS Type: linux
+# DB Type: desktop
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 512MB
+effective_cache_size = 2GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 433kB
+huge_pages = off
+min_wal_size = 100MB
+max_wal_size = 2GB
+wal_level = minimal
+max_wal_senders = 0
diff --git a/test/expected_results/16_linux_desktop_2_8GB_1000_ssd.txt b/test/expected_results/16_linux_desktop_2_8GB_1000_ssd.txt
new file mode 100644
index 0000000..a24a2f5
--- /dev/null
+++ b/test/expected_results/16_linux_desktop_2_8GB_1000_ssd.txt
@@ -0,0 +1,23 @@
+# DB Version: 16
+# OS Type: linux
+# DB Type: desktop
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 512MB
+effective_cache_size = 2GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 433kB
+huge_pages = off
+min_wal_size = 100MB
+max_wal_size = 2GB
+wal_level = minimal
+max_wal_senders = 0
diff --git a/test/expected_results/16_linux_desktop_4_8GB_1000_hdd.txt b/test/expected_results/16_linux_desktop_4_8GB_1000_hdd.txt
new file mode 100644
index 0000000..ed2fecf
--- /dev/null
+++ b/test/expected_results/16_linux_desktop_4_8GB_1000_hdd.txt
@@ -0,0 +1,27 @@
+# DB Version: 16
+# OS Type: linux
+# DB Type: desktop
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 512MB
+effective_cache_size = 2GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 435kB
+huge_pages = off
+min_wal_size = 100MB
+max_wal_size = 2GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
+wal_level = minimal
+max_wal_senders = 0
diff --git a/test/expected_results/16_linux_desktop_4_8GB_1000_san.txt b/test/expected_results/16_linux_desktop_4_8GB_1000_san.txt
new file mode 100644
index 0000000..e98a56f
--- /dev/null
+++ b/test/expected_results/16_linux_desktop_4_8GB_1000_san.txt
@@ -0,0 +1,27 @@
+# DB Version: 16
+# OS Type: linux
+# DB Type: desktop
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 512MB
+effective_cache_size = 2GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 435kB
+huge_pages = off
+min_wal_size = 100MB
+max_wal_size = 2GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
+wal_level = minimal
+max_wal_senders = 0
diff --git a/test/expected_results/16_linux_desktop_4_8GB_1000_ssd.txt b/test/expected_results/16_linux_desktop_4_8GB_1000_ssd.txt
new file mode 100644
index 0000000..138829f
--- /dev/null
+++ b/test/expected_results/16_linux_desktop_4_8GB_1000_ssd.txt
@@ -0,0 +1,27 @@
+# DB Version: 16
+# OS Type: linux
+# DB Type: desktop
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 512MB
+effective_cache_size = 2GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 435kB
+huge_pages = off
+min_wal_size = 100MB
+max_wal_size = 2GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
+wal_level = minimal
+max_wal_senders = 0
diff --git a/test/expected_results/16_linux_dw_2_8GB_1000_hdd.txt b/test/expected_results/16_linux_dw_2_8GB_1000_hdd.txt
new file mode 100644
index 0000000..8ebf2c2
--- /dev/null
+++ b/test/expected_results/16_linux_dw_2_8GB_1000_hdd.txt
@@ -0,0 +1,21 @@
+# DB Version: 16
+# OS Type: linux
+# DB Type: dw
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 1GB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 500
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 1040kB
+huge_pages = off
+min_wal_size = 4GB
+max_wal_size = 16GB
diff --git a/test/expected_results/16_linux_dw_2_8GB_1000_san.txt b/test/expected_results/16_linux_dw_2_8GB_1000_san.txt
new file mode 100644
index 0000000..1dacebf
--- /dev/null
+++ b/test/expected_results/16_linux_dw_2_8GB_1000_san.txt
@@ -0,0 +1,21 @@
+# DB Version: 16
+# OS Type: linux
+# DB Type: dw
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 1GB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 500
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 1040kB
+huge_pages = off
+min_wal_size = 4GB
+max_wal_size = 16GB
diff --git a/test/expected_results/16_linux_dw_2_8GB_1000_ssd.txt b/test/expected_results/16_linux_dw_2_8GB_1000_ssd.txt
new file mode 100644
index 0000000..8df4c36
--- /dev/null
+++ b/test/expected_results/16_linux_dw_2_8GB_1000_ssd.txt
@@ -0,0 +1,21 @@
+# DB Version: 16
+# OS Type: linux
+# DB Type: dw
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 1GB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 500
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 1040kB
+huge_pages = off
+min_wal_size = 4GB
+max_wal_size = 16GB
diff --git a/test/expected_results/16_linux_dw_4_8GB_1000_hdd.txt b/test/expected_results/16_linux_dw_4_8GB_1000_hdd.txt
new file mode 100644
index 0000000..0e25015
--- /dev/null
+++ b/test/expected_results/16_linux_dw_4_8GB_1000_hdd.txt
@@ -0,0 +1,25 @@
+# DB Version: 16
+# OS Type: linux
+# DB Type: dw
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 1GB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 500
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 1044kB
+huge_pages = off
+min_wal_size = 4GB
+max_wal_size = 16GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/16_linux_dw_4_8GB_1000_san.txt b/test/expected_results/16_linux_dw_4_8GB_1000_san.txt
new file mode 100644
index 0000000..e54d4d4
--- /dev/null
+++ b/test/expected_results/16_linux_dw_4_8GB_1000_san.txt
@@ -0,0 +1,25 @@
+# DB Version: 16
+# OS Type: linux
+# DB Type: dw
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 1GB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 500
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 1044kB
+huge_pages = off
+min_wal_size = 4GB
+max_wal_size = 16GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/16_linux_dw_4_8GB_1000_ssd.txt b/test/expected_results/16_linux_dw_4_8GB_1000_ssd.txt
new file mode 100644
index 0000000..b74d299
--- /dev/null
+++ b/test/expected_results/16_linux_dw_4_8GB_1000_ssd.txt
@@ -0,0 +1,25 @@
+# DB Version: 16
+# OS Type: linux
+# DB Type: dw
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 1GB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 500
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 1044kB
+huge_pages = off
+min_wal_size = 4GB
+max_wal_size = 16GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/16_linux_mixed_2_8GB_1000_hdd.txt b/test/expected_results/16_linux_mixed_2_8GB_1000_hdd.txt
new file mode 100644
index 0000000..5fc67a3
--- /dev/null
+++ b/test/expected_results/16_linux_mixed_2_8GB_1000_hdd.txt
@@ -0,0 +1,21 @@
+# DB Version: 16
+# OS Type: linux
+# DB Type: mixed
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 1040kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
diff --git a/test/expected_results/16_linux_mixed_2_8GB_1000_san.txt b/test/expected_results/16_linux_mixed_2_8GB_1000_san.txt
new file mode 100644
index 0000000..9672a73
--- /dev/null
+++ b/test/expected_results/16_linux_mixed_2_8GB_1000_san.txt
@@ -0,0 +1,21 @@
+# DB Version: 16
+# OS Type: linux
+# DB Type: mixed
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 1040kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
diff --git a/test/expected_results/16_linux_mixed_2_8GB_1000_ssd.txt b/test/expected_results/16_linux_mixed_2_8GB_1000_ssd.txt
new file mode 100644
index 0000000..9e5cfc3
--- /dev/null
+++ b/test/expected_results/16_linux_mixed_2_8GB_1000_ssd.txt
@@ -0,0 +1,21 @@
+# DB Version: 16
+# OS Type: linux
+# DB Type: mixed
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 1040kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
diff --git a/test/expected_results/16_linux_mixed_4_8GB_1000_hdd.txt b/test/expected_results/16_linux_mixed_4_8GB_1000_hdd.txt
new file mode 100644
index 0000000..e87279b
--- /dev/null
+++ b/test/expected_results/16_linux_mixed_4_8GB_1000_hdd.txt
@@ -0,0 +1,25 @@
+# DB Version: 16
+# OS Type: linux
+# DB Type: mixed
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 1044kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/16_linux_mixed_4_8GB_1000_san.txt b/test/expected_results/16_linux_mixed_4_8GB_1000_san.txt
new file mode 100644
index 0000000..1436e2f
--- /dev/null
+++ b/test/expected_results/16_linux_mixed_4_8GB_1000_san.txt
@@ -0,0 +1,25 @@
+# DB Version: 16
+# OS Type: linux
+# DB Type: mixed
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 1044kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/16_linux_mixed_4_8GB_1000_ssd.txt b/test/expected_results/16_linux_mixed_4_8GB_1000_ssd.txt
new file mode 100644
index 0000000..954fce8
--- /dev/null
+++ b/test/expected_results/16_linux_mixed_4_8GB_1000_ssd.txt
@@ -0,0 +1,25 @@
+# DB Version: 16
+# OS Type: linux
+# DB Type: mixed
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 1044kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/16_linux_oltp_2_8GB_1000_hdd.txt b/test/expected_results/16_linux_oltp_2_8GB_1000_hdd.txt
new file mode 100644
index 0000000..0e224d3
--- /dev/null
+++ b/test/expected_results/16_linux_oltp_2_8GB_1000_hdd.txt
@@ -0,0 +1,21 @@
+# DB Version: 16
+# OS Type: linux
+# DB Type: oltp
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 2080kB
+huge_pages = off
+min_wal_size = 2GB
+max_wal_size = 8GB
diff --git a/test/expected_results/16_linux_oltp_2_8GB_1000_san.txt b/test/expected_results/16_linux_oltp_2_8GB_1000_san.txt
new file mode 100644
index 0000000..dd06c56
--- /dev/null
+++ b/test/expected_results/16_linux_oltp_2_8GB_1000_san.txt
@@ -0,0 +1,21 @@
+# DB Version: 16
+# OS Type: linux
+# DB Type: oltp
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 2080kB
+huge_pages = off
+min_wal_size = 2GB
+max_wal_size = 8GB
diff --git a/test/expected_results/16_linux_oltp_2_8GB_1000_ssd.txt b/test/expected_results/16_linux_oltp_2_8GB_1000_ssd.txt
new file mode 100644
index 0000000..4b49656
--- /dev/null
+++ b/test/expected_results/16_linux_oltp_2_8GB_1000_ssd.txt
@@ -0,0 +1,21 @@
+# DB Version: 16
+# OS Type: linux
+# DB Type: oltp
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 2080kB
+huge_pages = off
+min_wal_size = 2GB
+max_wal_size = 8GB
diff --git a/test/expected_results/16_linux_oltp_4_8GB_1000_hdd.txt b/test/expected_results/16_linux_oltp_4_8GB_1000_hdd.txt
new file mode 100644
index 0000000..b25916e
--- /dev/null
+++ b/test/expected_results/16_linux_oltp_4_8GB_1000_hdd.txt
@@ -0,0 +1,25 @@
+# DB Version: 16
+# OS Type: linux
+# DB Type: oltp
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 2088kB
+huge_pages = off
+min_wal_size = 2GB
+max_wal_size = 8GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/16_linux_oltp_4_8GB_1000_san.txt b/test/expected_results/16_linux_oltp_4_8GB_1000_san.txt
new file mode 100644
index 0000000..6107294
--- /dev/null
+++ b/test/expected_results/16_linux_oltp_4_8GB_1000_san.txt
@@ -0,0 +1,25 @@
+# DB Version: 16
+# OS Type: linux
+# DB Type: oltp
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 2088kB
+huge_pages = off
+min_wal_size = 2GB
+max_wal_size = 8GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/16_linux_oltp_4_8GB_1000_ssd.txt b/test/expected_results/16_linux_oltp_4_8GB_1000_ssd.txt
new file mode 100644
index 0000000..e3bc35a
--- /dev/null
+++ b/test/expected_results/16_linux_oltp_4_8GB_1000_ssd.txt
@@ -0,0 +1,25 @@
+# DB Version: 16
+# OS Type: linux
+# DB Type: oltp
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 2088kB
+huge_pages = off
+min_wal_size = 2GB
+max_wal_size = 8GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/16_linux_web_2_8GB_1000_hdd.txt b/test/expected_results/16_linux_web_2_8GB_1000_hdd.txt
new file mode 100644
index 0000000..bd163f3
--- /dev/null
+++ b/test/expected_results/16_linux_web_2_8GB_1000_hdd.txt
@@ -0,0 +1,21 @@
+# DB Version: 16
+# OS Type: linux
+# DB Type: web
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 2080kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
diff --git a/test/expected_results/16_linux_web_2_8GB_1000_san.txt b/test/expected_results/16_linux_web_2_8GB_1000_san.txt
new file mode 100644
index 0000000..ee99cac
--- /dev/null
+++ b/test/expected_results/16_linux_web_2_8GB_1000_san.txt
@@ -0,0 +1,21 @@
+# DB Version: 16
+# OS Type: linux
+# DB Type: web
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 2080kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
diff --git a/test/expected_results/16_linux_web_2_8GB_1000_ssd.txt b/test/expected_results/16_linux_web_2_8GB_1000_ssd.txt
new file mode 100644
index 0000000..4274cd0
--- /dev/null
+++ b/test/expected_results/16_linux_web_2_8GB_1000_ssd.txt
@@ -0,0 +1,21 @@
+# DB Version: 16
+# OS Type: linux
+# DB Type: web
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 2080kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
diff --git a/test/expected_results/16_linux_web_4_8GB_1000_hdd.txt b/test/expected_results/16_linux_web_4_8GB_1000_hdd.txt
new file mode 100644
index 0000000..1a0d7a0
--- /dev/null
+++ b/test/expected_results/16_linux_web_4_8GB_1000_hdd.txt
@@ -0,0 +1,25 @@
+# DB Version: 16
+# OS Type: linux
+# DB Type: web
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 2088kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/16_linux_web_4_8GB_1000_san.txt b/test/expected_results/16_linux_web_4_8GB_1000_san.txt
new file mode 100644
index 0000000..cae64ab
--- /dev/null
+++ b/test/expected_results/16_linux_web_4_8GB_1000_san.txt
@@ -0,0 +1,25 @@
+# DB Version: 16
+# OS Type: linux
+# DB Type: web
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 2088kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/16_linux_web_4_8GB_1000_ssd.txt b/test/expected_results/16_linux_web_4_8GB_1000_ssd.txt
new file mode 100644
index 0000000..a688270
--- /dev/null
+++ b/test/expected_results/16_linux_web_4_8GB_1000_ssd.txt
@@ -0,0 +1,25 @@
+# DB Version: 16
+# OS Type: linux
+# DB Type: web
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 2088kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/17_linux_desktop_2_8GB_1000_hdd.txt b/test/expected_results/17_linux_desktop_2_8GB_1000_hdd.txt
new file mode 100644
index 0000000..3f01400
--- /dev/null
+++ b/test/expected_results/17_linux_desktop_2_8GB_1000_hdd.txt
@@ -0,0 +1,23 @@
+# DB Version: 17
+# OS Type: linux
+# DB Type: desktop
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 512MB
+effective_cache_size = 2GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 433kB
+huge_pages = off
+min_wal_size = 100MB
+max_wal_size = 2GB
+wal_level = minimal
+max_wal_senders = 0
diff --git a/test/expected_results/17_linux_desktop_2_8GB_1000_san.txt b/test/expected_results/17_linux_desktop_2_8GB_1000_san.txt
new file mode 100644
index 0000000..a9bf015
--- /dev/null
+++ b/test/expected_results/17_linux_desktop_2_8GB_1000_san.txt
@@ -0,0 +1,23 @@
+# DB Version: 17
+# OS Type: linux
+# DB Type: desktop
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 512MB
+effective_cache_size = 2GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 433kB
+huge_pages = off
+min_wal_size = 100MB
+max_wal_size = 2GB
+wal_level = minimal
+max_wal_senders = 0
diff --git a/test/expected_results/17_linux_desktop_2_8GB_1000_ssd.txt b/test/expected_results/17_linux_desktop_2_8GB_1000_ssd.txt
new file mode 100644
index 0000000..347daf9
--- /dev/null
+++ b/test/expected_results/17_linux_desktop_2_8GB_1000_ssd.txt
@@ -0,0 +1,23 @@
+# DB Version: 17
+# OS Type: linux
+# DB Type: desktop
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 512MB
+effective_cache_size = 2GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 433kB
+huge_pages = off
+min_wal_size = 100MB
+max_wal_size = 2GB
+wal_level = minimal
+max_wal_senders = 0
diff --git a/test/expected_results/17_linux_desktop_4_8GB_1000_hdd.txt b/test/expected_results/17_linux_desktop_4_8GB_1000_hdd.txt
new file mode 100644
index 0000000..aebf172
--- /dev/null
+++ b/test/expected_results/17_linux_desktop_4_8GB_1000_hdd.txt
@@ -0,0 +1,27 @@
+# DB Version: 17
+# OS Type: linux
+# DB Type: desktop
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 512MB
+effective_cache_size = 2GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 435kB
+huge_pages = off
+min_wal_size = 100MB
+max_wal_size = 2GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
+wal_level = minimal
+max_wal_senders = 0
diff --git a/test/expected_results/17_linux_desktop_4_8GB_1000_san.txt b/test/expected_results/17_linux_desktop_4_8GB_1000_san.txt
new file mode 100644
index 0000000..e09c828
--- /dev/null
+++ b/test/expected_results/17_linux_desktop_4_8GB_1000_san.txt
@@ -0,0 +1,27 @@
+# DB Version: 17
+# OS Type: linux
+# DB Type: desktop
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 512MB
+effective_cache_size = 2GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 435kB
+huge_pages = off
+min_wal_size = 100MB
+max_wal_size = 2GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
+wal_level = minimal
+max_wal_senders = 0
diff --git a/test/expected_results/17_linux_desktop_4_8GB_1000_ssd.txt b/test/expected_results/17_linux_desktop_4_8GB_1000_ssd.txt
new file mode 100644
index 0000000..13bf6c1
--- /dev/null
+++ b/test/expected_results/17_linux_desktop_4_8GB_1000_ssd.txt
@@ -0,0 +1,27 @@
+# DB Version: 17
+# OS Type: linux
+# DB Type: desktop
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 512MB
+effective_cache_size = 2GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 435kB
+huge_pages = off
+min_wal_size = 100MB
+max_wal_size = 2GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
+wal_level = minimal
+max_wal_senders = 0
diff --git a/test/expected_results/17_linux_dw_2_8GB_1000_hdd.txt b/test/expected_results/17_linux_dw_2_8GB_1000_hdd.txt
new file mode 100644
index 0000000..5e71b91
--- /dev/null
+++ b/test/expected_results/17_linux_dw_2_8GB_1000_hdd.txt
@@ -0,0 +1,21 @@
+# DB Version: 17
+# OS Type: linux
+# DB Type: dw
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 1GB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 500
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 1040kB
+huge_pages = off
+min_wal_size = 4GB
+max_wal_size = 16GB
diff --git a/test/expected_results/17_linux_dw_2_8GB_1000_san.txt b/test/expected_results/17_linux_dw_2_8GB_1000_san.txt
new file mode 100644
index 0000000..323d8c8
--- /dev/null
+++ b/test/expected_results/17_linux_dw_2_8GB_1000_san.txt
@@ -0,0 +1,21 @@
+# DB Version: 17
+# OS Type: linux
+# DB Type: dw
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 1GB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 500
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 1040kB
+huge_pages = off
+min_wal_size = 4GB
+max_wal_size = 16GB
diff --git a/test/expected_results/17_linux_dw_2_8GB_1000_ssd.txt b/test/expected_results/17_linux_dw_2_8GB_1000_ssd.txt
new file mode 100644
index 0000000..95dc591
--- /dev/null
+++ b/test/expected_results/17_linux_dw_2_8GB_1000_ssd.txt
@@ -0,0 +1,21 @@
+# DB Version: 17
+# OS Type: linux
+# DB Type: dw
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 1GB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 500
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 1040kB
+huge_pages = off
+min_wal_size = 4GB
+max_wal_size = 16GB
diff --git a/test/expected_results/17_linux_dw_4_8GB_1000_hdd.txt b/test/expected_results/17_linux_dw_4_8GB_1000_hdd.txt
new file mode 100644
index 0000000..c131aa0
--- /dev/null
+++ b/test/expected_results/17_linux_dw_4_8GB_1000_hdd.txt
@@ -0,0 +1,25 @@
+# DB Version: 17
+# OS Type: linux
+# DB Type: dw
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 1GB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 500
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 1044kB
+huge_pages = off
+min_wal_size = 4GB
+max_wal_size = 16GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/17_linux_dw_4_8GB_1000_san.txt b/test/expected_results/17_linux_dw_4_8GB_1000_san.txt
new file mode 100644
index 0000000..9a41177
--- /dev/null
+++ b/test/expected_results/17_linux_dw_4_8GB_1000_san.txt
@@ -0,0 +1,25 @@
+# DB Version: 17
+# OS Type: linux
+# DB Type: dw
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 1GB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 500
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 1044kB
+huge_pages = off
+min_wal_size = 4GB
+max_wal_size = 16GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/17_linux_dw_4_8GB_1000_ssd.txt b/test/expected_results/17_linux_dw_4_8GB_1000_ssd.txt
new file mode 100644
index 0000000..76e859a
--- /dev/null
+++ b/test/expected_results/17_linux_dw_4_8GB_1000_ssd.txt
@@ -0,0 +1,25 @@
+# DB Version: 17
+# OS Type: linux
+# DB Type: dw
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 1GB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 500
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 1044kB
+huge_pages = off
+min_wal_size = 4GB
+max_wal_size = 16GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/17_linux_mixed_2_8GB_1000_hdd.txt b/test/expected_results/17_linux_mixed_2_8GB_1000_hdd.txt
new file mode 100644
index 0000000..bb7c03c
--- /dev/null
+++ b/test/expected_results/17_linux_mixed_2_8GB_1000_hdd.txt
@@ -0,0 +1,21 @@
+# DB Version: 17
+# OS Type: linux
+# DB Type: mixed
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 1040kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
diff --git a/test/expected_results/17_linux_mixed_2_8GB_1000_san.txt b/test/expected_results/17_linux_mixed_2_8GB_1000_san.txt
new file mode 100644
index 0000000..4d28600
--- /dev/null
+++ b/test/expected_results/17_linux_mixed_2_8GB_1000_san.txt
@@ -0,0 +1,21 @@
+# DB Version: 17
+# OS Type: linux
+# DB Type: mixed
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 1040kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
diff --git a/test/expected_results/17_linux_mixed_2_8GB_1000_ssd.txt b/test/expected_results/17_linux_mixed_2_8GB_1000_ssd.txt
new file mode 100644
index 0000000..e710b07
--- /dev/null
+++ b/test/expected_results/17_linux_mixed_2_8GB_1000_ssd.txt
@@ -0,0 +1,21 @@
+# DB Version: 17
+# OS Type: linux
+# DB Type: mixed
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 1040kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
diff --git a/test/expected_results/17_linux_mixed_4_8GB_1000_hdd.txt b/test/expected_results/17_linux_mixed_4_8GB_1000_hdd.txt
new file mode 100644
index 0000000..1f0e1fe
--- /dev/null
+++ b/test/expected_results/17_linux_mixed_4_8GB_1000_hdd.txt
@@ -0,0 +1,25 @@
+# DB Version: 17
+# OS Type: linux
+# DB Type: mixed
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 1044kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/17_linux_mixed_4_8GB_1000_san.txt b/test/expected_results/17_linux_mixed_4_8GB_1000_san.txt
new file mode 100644
index 0000000..6c5f206
--- /dev/null
+++ b/test/expected_results/17_linux_mixed_4_8GB_1000_san.txt
@@ -0,0 +1,25 @@
+# DB Version: 17
+# OS Type: linux
+# DB Type: mixed
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 1044kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/17_linux_mixed_4_8GB_1000_ssd.txt b/test/expected_results/17_linux_mixed_4_8GB_1000_ssd.txt
new file mode 100644
index 0000000..978a220
--- /dev/null
+++ b/test/expected_results/17_linux_mixed_4_8GB_1000_ssd.txt
@@ -0,0 +1,25 @@
+# DB Version: 17
+# OS Type: linux
+# DB Type: mixed
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 1044kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/17_linux_oltp_2_8GB_1000_hdd.txt b/test/expected_results/17_linux_oltp_2_8GB_1000_hdd.txt
new file mode 100644
index 0000000..8390b93
--- /dev/null
+++ b/test/expected_results/17_linux_oltp_2_8GB_1000_hdd.txt
@@ -0,0 +1,21 @@
+# DB Version: 17
+# OS Type: linux
+# DB Type: oltp
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 2080kB
+huge_pages = off
+min_wal_size = 2GB
+max_wal_size = 8GB
diff --git a/test/expected_results/17_linux_oltp_2_8GB_1000_san.txt b/test/expected_results/17_linux_oltp_2_8GB_1000_san.txt
new file mode 100644
index 0000000..fb45cd7
--- /dev/null
+++ b/test/expected_results/17_linux_oltp_2_8GB_1000_san.txt
@@ -0,0 +1,21 @@
+# DB Version: 17
+# OS Type: linux
+# DB Type: oltp
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 2080kB
+huge_pages = off
+min_wal_size = 2GB
+max_wal_size = 8GB
diff --git a/test/expected_results/17_linux_oltp_2_8GB_1000_ssd.txt b/test/expected_results/17_linux_oltp_2_8GB_1000_ssd.txt
new file mode 100644
index 0000000..90e6c5d
--- /dev/null
+++ b/test/expected_results/17_linux_oltp_2_8GB_1000_ssd.txt
@@ -0,0 +1,21 @@
+# DB Version: 17
+# OS Type: linux
+# DB Type: oltp
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 2080kB
+huge_pages = off
+min_wal_size = 2GB
+max_wal_size = 8GB
diff --git a/test/expected_results/17_linux_oltp_4_8GB_1000_hdd.txt b/test/expected_results/17_linux_oltp_4_8GB_1000_hdd.txt
new file mode 100644
index 0000000..0bdc212
--- /dev/null
+++ b/test/expected_results/17_linux_oltp_4_8GB_1000_hdd.txt
@@ -0,0 +1,25 @@
+# DB Version: 17
+# OS Type: linux
+# DB Type: oltp
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 2088kB
+huge_pages = off
+min_wal_size = 2GB
+max_wal_size = 8GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/17_linux_oltp_4_8GB_1000_san.txt b/test/expected_results/17_linux_oltp_4_8GB_1000_san.txt
new file mode 100644
index 0000000..b82dd3a
--- /dev/null
+++ b/test/expected_results/17_linux_oltp_4_8GB_1000_san.txt
@@ -0,0 +1,25 @@
+# DB Version: 17
+# OS Type: linux
+# DB Type: oltp
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 2088kB
+huge_pages = off
+min_wal_size = 2GB
+max_wal_size = 8GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/17_linux_oltp_4_8GB_1000_ssd.txt b/test/expected_results/17_linux_oltp_4_8GB_1000_ssd.txt
new file mode 100644
index 0000000..168fe21
--- /dev/null
+++ b/test/expected_results/17_linux_oltp_4_8GB_1000_ssd.txt
@@ -0,0 +1,25 @@
+# DB Version: 17
+# OS Type: linux
+# DB Type: oltp
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 2088kB
+huge_pages = off
+min_wal_size = 2GB
+max_wal_size = 8GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/17_linux_web_2_8GB_1000_hdd.txt b/test/expected_results/17_linux_web_2_8GB_1000_hdd.txt
new file mode 100644
index 0000000..7c64b65
--- /dev/null
+++ b/test/expected_results/17_linux_web_2_8GB_1000_hdd.txt
@@ -0,0 +1,21 @@
+# DB Version: 17
+# OS Type: linux
+# DB Type: web
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 2080kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
diff --git a/test/expected_results/17_linux_web_2_8GB_1000_san.txt b/test/expected_results/17_linux_web_2_8GB_1000_san.txt
new file mode 100644
index 0000000..c7913ee
--- /dev/null
+++ b/test/expected_results/17_linux_web_2_8GB_1000_san.txt
@@ -0,0 +1,21 @@
+# DB Version: 17
+# OS Type: linux
+# DB Type: web
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 2080kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
diff --git a/test/expected_results/17_linux_web_2_8GB_1000_ssd.txt b/test/expected_results/17_linux_web_2_8GB_1000_ssd.txt
new file mode 100644
index 0000000..20462b7
--- /dev/null
+++ b/test/expected_results/17_linux_web_2_8GB_1000_ssd.txt
@@ -0,0 +1,21 @@
+# DB Version: 17
+# OS Type: linux
+# DB Type: web
+# Total Memory (RAM): 8 GB
+# CPUs num: 2
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 2080kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
diff --git a/test/expected_results/17_linux_web_4_8GB_1000_hdd.txt b/test/expected_results/17_linux_web_4_8GB_1000_hdd.txt
new file mode 100644
index 0000000..702ae16
--- /dev/null
+++ b/test/expected_results/17_linux_web_4_8GB_1000_hdd.txt
@@ -0,0 +1,25 @@
+# DB Version: 17
+# OS Type: linux
+# DB Type: web
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: hdd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 4
+effective_io_concurrency = 2
+work_mem = 2088kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/17_linux_web_4_8GB_1000_san.txt b/test/expected_results/17_linux_web_4_8GB_1000_san.txt
new file mode 100644
index 0000000..47ee178
--- /dev/null
+++ b/test/expected_results/17_linux_web_4_8GB_1000_san.txt
@@ -0,0 +1,25 @@
+# DB Version: 17
+# OS Type: linux
+# DB Type: web
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: san
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 300
+work_mem = 2088kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/17_linux_web_4_8GB_1000_ssd.txt b/test/expected_results/17_linux_web_4_8GB_1000_ssd.txt
new file mode 100644
index 0000000..c7d0531
--- /dev/null
+++ b/test/expected_results/17_linux_web_4_8GB_1000_ssd.txt
@@ -0,0 +1,25 @@
+# DB Version: 17
+# OS Type: linux
+# DB Type: web
+# Total Memory (RAM): 8 GB
+# CPUs num: 4
+# Connections num: 1000
+# Data Storage: ssd
+
+max_connections = 1000
+shared_buffers = 2GB
+effective_cache_size = 6GB
+maintenance_work_mem = 512MB
+checkpoint_completion_target = 0.9
+wal_buffers = 16MB
+default_statistics_target = 100
+random_page_cost = 1.1
+effective_io_concurrency = 200
+work_mem = 2088kB
+huge_pages = off
+min_wal_size = 1GB
+max_wal_size = 4GB
+max_worker_processes = 4
+max_parallel_workers_per_gather = 2
+max_parallel_workers = 4
+max_parallel_maintenance_workers = 2
diff --git a/test/expected_results/9.5_linux_web_8GB_8_1000_hdd.txt b/test/expected_results/9.5_linux_web_8_8GB_1000_hdd.txt
similarity index 96%
rename from test/expected_results/9.5_linux_web_8GB_8_1000_hdd.txt
rename to test/expected_results/9.5_linux_web_8_8GB_1000_hdd.txt
index 19e1a4c..8011a5e 100644
--- a/test/expected_results/9.5_linux_web_8GB_8_1000_hdd.txt
+++ b/test/expected_results/9.5_linux_web_8_8GB_1000_hdd.txt
@@ -16,6 +16,7 @@ default_statistics_target = 100
random_page_cost = 4
effective_io_concurrency = 2
work_mem = 2097kB
+huge_pages = off
min_wal_size = 1GB
max_wal_size = 4GB
max_worker_processes = 8
diff --git a/test/expected_results/9.5_linux_web_8GB_8_1000_san.txt b/test/expected_results/9.5_linux_web_8_8GB_1000_san.txt
similarity index 96%
rename from test/expected_results/9.5_linux_web_8GB_8_1000_san.txt
rename to test/expected_results/9.5_linux_web_8_8GB_1000_san.txt
index e068bfa..b2d8304 100644
--- a/test/expected_results/9.5_linux_web_8GB_8_1000_san.txt
+++ b/test/expected_results/9.5_linux_web_8_8GB_1000_san.txt
@@ -16,6 +16,7 @@ default_statistics_target = 100
random_page_cost = 1.1
effective_io_concurrency = 300
work_mem = 2097kB
+huge_pages = off
min_wal_size = 1GB
max_wal_size = 4GB
max_worker_processes = 8
diff --git a/test/expected_results/9.5_linux_web_8GB_8_1000_ssd.txt b/test/expected_results/9.5_linux_web_8_8GB_1000_ssd.txt
similarity index 96%
rename from test/expected_results/9.5_linux_web_8GB_8_1000_ssd.txt
rename to test/expected_results/9.5_linux_web_8_8GB_1000_ssd.txt
index bad61ba..fd32fe5 100644
--- a/test/expected_results/9.5_linux_web_8GB_8_1000_ssd.txt
+++ b/test/expected_results/9.5_linux_web_8_8GB_1000_ssd.txt
@@ -16,6 +16,7 @@ default_statistics_target = 100
random_page_cost = 1.1
effective_io_concurrency = 200
work_mem = 2097kB
+huge_pages = off
min_wal_size = 1GB
max_wal_size = 4GB
max_worker_processes = 8
diff --git a/test/expected_results/9.6_linux_web_8GB_8_1000_hdd.txt b/test/expected_results/9.6_linux_web_8_8GB_1000_hdd.txt
similarity index 96%
rename from test/expected_results/9.6_linux_web_8GB_8_1000_hdd.txt
rename to test/expected_results/9.6_linux_web_8_8GB_1000_hdd.txt
index 17db648..a4c1584 100644
--- a/test/expected_results/9.6_linux_web_8GB_8_1000_hdd.txt
+++ b/test/expected_results/9.6_linux_web_8_8GB_1000_hdd.txt
@@ -16,6 +16,7 @@ default_statistics_target = 100
random_page_cost = 4
effective_io_concurrency = 2
work_mem = 524kB
+huge_pages = off
min_wal_size = 1GB
max_wal_size = 4GB
max_worker_processes = 8
diff --git a/test/expected_results/9.6_linux_web_8GB_8_1000_san.txt b/test/expected_results/9.6_linux_web_8_8GB_1000_san.txt
similarity index 96%
rename from test/expected_results/9.6_linux_web_8GB_8_1000_san.txt
rename to test/expected_results/9.6_linux_web_8_8GB_1000_san.txt
index 2a07382..783c8d1 100644
--- a/test/expected_results/9.6_linux_web_8GB_8_1000_san.txt
+++ b/test/expected_results/9.6_linux_web_8_8GB_1000_san.txt
@@ -16,6 +16,7 @@ default_statistics_target = 100
random_page_cost = 1.1
effective_io_concurrency = 300
work_mem = 524kB
+huge_pages = off
min_wal_size = 1GB
max_wal_size = 4GB
max_worker_processes = 8
diff --git a/test/expected_results/9.6_linux_web_8GB_8_1000_ssd.txt b/test/expected_results/9.6_linux_web_8_8GB_1000_ssd.txt
similarity index 96%
rename from test/expected_results/9.6_linux_web_8GB_8_1000_ssd.txt
rename to test/expected_results/9.6_linux_web_8_8GB_1000_ssd.txt
index e790d78..5c88c09 100644
--- a/test/expected_results/9.6_linux_web_8GB_8_1000_ssd.txt
+++ b/test/expected_results/9.6_linux_web_8_8GB_1000_ssd.txt
@@ -16,6 +16,7 @@ default_statistics_target = 100
random_page_cost = 1.1
effective_io_concurrency = 200
work_mem = 524kB
+huge_pages = off
min_wal_size = 1GB
max_wal_size = 4GB
max_worker_processes = 8
diff --git a/test/scripts/build_local_images.sh b/test/scripts/build_local_images.sh
new file mode 100644
index 0000000..63d8a96
--- /dev/null
+++ b/test/scripts/build_local_images.sh
@@ -0,0 +1,60 @@
+#!/usr/bin/env bash
+
+# Place ourselves in scripts directory
+SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
+cd "$SCRIPT_DIR" || exit
+# Get back at root level
+cd ../../ || exit
+
+# This scripts build all possible Debian combination
+# of PostgreSQL + PostGIS and outputs PostgreSQL
+# configuration file for manual checking
+
+declare -a arr=("9.5|2.3"
+ "9.5|2.4"
+ "9.5|2.5"
+ "9.5|3"
+ "9.6|2.3"
+ "9.6|2.4"
+ "9.6|2.5"
+ "9.6|3"
+ "9.6-bullseye|3"
+ "10|2.4"
+ "10|2.5"
+ "10|3"
+ "10-bullseye|3"
+ "11|2.5"
+ "11|3"
+ "11-bullseye|3"
+ "12|3"
+ "13|3"
+ "14|3"
+ "15|3"
+ "16|3"
+ "17|3"
+ )
+
+IFS='|'
+for i in "${arr[@]}"
+do
+ read -ra ADDR <<< "$i"
+ pg_version="${ADDR[0]}"
+ postgis_version="${ADDR[1]}"
+ docker build --no-cache \
+ --build-arg POSTGRES_VERSION="$pg_version" \
+ --build-arg POSTGIS_VERSION="$postgis_version" \
+ -t "pg$pg_version-$postgis_version" \
+ .
+ docker run -d \
+ -e POSTGRES_PASSWORD=secret \
+ --name "pg$pg_version-$postgis_version" \
+ "pg$pg_version-$postgis_version"
+ docker exec -ti "pg$pg_version-$postgis_version" \
+ bash -c "until pg_isready -q; do sleep 5; done"
+ docker exec -ti "pg$pg_version-$postgis_version" \
+ bash -c "cat /etc/apt/sources.list.d/pgdg.list"
+ docker exec -ti "pg$pg_version-$postgis_version" \
+ bash -c "cat /var/lib/postgresql/data/postgresql.conf" \
+ > "pg$pg_version-$postgis_version.txt"
+ docker rm -f "pg$pg_version-$postgis_version"
+done
diff --git a/test/scripts/build_run_images.sh b/test/scripts/build_run_images.sh
deleted file mode 100644
index 3117de4..0000000
--- a/test/scripts/build_run_images.sh
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/usr/bin/env bash
-
-# This scripts build all possible Debian combination
-# of PostgreSQL + PostGIS and outputs PostgreSQL
-# configuration file for checking
-
-declare -a arr=("15|3"
- "14|3"
- "13|3"
- "12|3"
- "11-bullseye|3"
- "11|2.5"
- "10-bullseye|3"
- "10|2.5"
- "10|2.4"
- "9.6-bullseye|3"
- "9.6|2.5"
- "9.6|2.4"
- "9.6|2.3"
- "9.5|3"
- "9.5|2.5"
- "9.5|2.4"
- "9.5|2.3"
- )
-
-IFS='|'
-for i in "${arr[@]}"
-do
- read -ra ADDR <<< "$i"
- pg_version="${ADDR[0]}"
- postgis_version="${ADDR[1]}"
- docker build --no-cache --build-arg POSTGRES_VERSION=$pg_version --build-arg POSTGIS_VERSION=$postgis_version . -t pg$pg_version-$postgis_version
- docker run -d -e POSTGRES_PASSWORD=secret --name pg$pg_version-$postgis_version pg$pg_version-$postgis_version
- docker exec -ti pg$pg_version-$postgis_version bash -c "until pg_isready -q; do sleep 5; done"
- docker exec -ti pg$pg_version-$postgis_version bash -c "cat /etc/apt/sources.list.d/pgdg.list"
- docker exec -ti pg$pg_version-$postgis_version bash -c "cat /var/lib/postgresql/data/postgresql.conf" > pg$pg_version-$postgis_version.txt
- docker stop pg$pg_version-$postgis_version && docker rm pg$pg_version-$postgis_version
-done
diff --git a/test/scripts/check_compatibility.sh b/test/scripts/check_compatibility.sh
deleted file mode 100644
index 9b7a72f..0000000
--- a/test/scripts/check_compatibility.sh
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/usr/bin/env bash
-
-# This script runs official PostgreSQL Docker images
-# and gets the available PostGIS version for each of them.
-# Also ouputs the distribution used for each image.
-
-pg_versions="15 14 13 12 11 11-bullseye 10 10-bullseye 9.6 9.6-bullseye 9.5"
-
-for v in $pg_versions
-do
- echo "Examining postgres:$v"
- echo "######################"
- docker run -d -e POSTGRES_PASSWORD=secret --name pg$v postgres:$v >/dev/null 2>&1
- codename=$(docker exec -ti pg$v bash -c "source /etc/os-release && echo -n \$VERSION_CODENAME")
- id=$(docker exec -ti pg$v bash -c "source /etc/os-release && echo -n \$ID")
- if [ "$id" = "debian" ]
- then
- if [ "$codename" = "stretch" ]
- then
- echo "applying apt-archive.postgres.org patch"
- c="cd /etc/apt/sources.list.d/ && mv pgdg.list pgdg.list.backup"
- docker exec -ti pg$v bash -c "$c"
- c="apt-get -qq update && DEBCONF_NOWARNINGS='yes' apt-get install apt-transport-https -y > /dev/null"
- docker exec -ti pg$v bash -c "$c"
- c="cd /etc/apt/sources.list.d/ && mv pgdg.list.backup pgdg.list"
- docker exec -ti pg$v bash -c "$c"
- c="sed -i 's/http\:\/\/apt\.postgres/https\:\/\/apt-archive\.postgres/' /etc/apt/sources.list.d/pgdg.list"
- docker exec -ti pg$v bash -c "$c"
- c="apt-get -qq update"
- docker exec -ti pg$v bash -c "$c"
- fi
- c="apt update >/dev/null 2>&1 && apt-cache search \$PG_MAJOR-postgis | grep -Po \"(?<=postgresql-\$PG_MAJOR-postgis-)([0-9\.]*)\" | uniq | xargs "
- versions=$(docker exec -ti pg$v bash -c "$c")
- fi
- echo "Available PostGIS versions : "$versions
- distrib=$(docker exec -ti pg$v bash -c "source /etc/os-release && echo -n \$PRETTY_NAME")
- echo "Running on "$distrib
- docker rm -f pg$v >/dev/null 2>&1
- echo
-done
diff --git a/test/scripts/check_pg_postgis_compatibility.sh b/test/scripts/check_pg_postgis_compatibility.sh
new file mode 100644
index 0000000..d558046
--- /dev/null
+++ b/test/scripts/check_pg_postgis_compatibility.sh
@@ -0,0 +1,46 @@
+#!/usr/bin/env bash
+
+# This script runs official PostgreSQL Docker images
+# and gets the available PostGIS version for each of them.
+# Also ouputs the distribution used for each image.
+
+pg_versions="17 16 15 14 13 12 11 11-bullseye 10 10-bullseye 9.6 9.6-bullseye 9.5"
+
+for v in $pg_versions
+do
+ echo "Examining postgres:$v"
+ echo "######################"
+ docker run -d -e POSTGRES_PASSWORD=secret --name "pg$v" "postgres:$v" >/dev/null 2>&1
+ codename=$(docker exec -ti "pg$v" bash -c "source /etc/os-release && echo -n \$VERSION_CODENAME")
+ id=$(docker exec -ti "pg$v" bash -c "source /etc/os-release && echo -n \$ID")
+ if [ "$id" = "debian" ]
+ then
+ if [ "$codename" = "stretch" ]
+ then
+ echo "applying apt-archive.postgres.org patch"
+ c="sed -i 's/deb\.debian\.org/archive\.debian\.org/' /etc/apt/sources.list"
+ docker exec -ti "pg$v" bash -c "$c"
+ c="sed -i 's/security\.debian\.org/archive\.debian\.org/' /etc/apt/sources.list"
+ docker exec -ti "pg$v" bash -c "$c"
+ c="sed -i '/stretch-updates/d' /etc/apt/sources.list"
+ docker exec -ti "pg$v" bash -c "$c"
+ c="cd /etc/apt/sources.list.d/ && mv pgdg.list pgdg.list.backup"
+ docker exec -ti "pg$v" bash -c "$c"
+ c="apt-get -qq update && DEBCONF_NOWARNINGS='yes' apt-get install apt-transport-https -y > /dev/null"
+ docker exec -ti "pg$v" bash -c "$c"
+ c="cd /etc/apt/sources.list.d/ && mv pgdg.list.backup pgdg.list"
+ docker exec -ti "pg$v" bash -c "$c"
+ c="sed -i 's/http\:\/\/apt\.postgres/https\:\/\/apt-archive\.postgres/' /etc/apt/sources.list.d/pgdg.list"
+ docker exec -ti "pg$v" bash -c "$c"
+ c="apt-get -qq update"
+ docker exec -ti "pg$v" bash -c "$c"
+ fi
+ c="apt update >/dev/null 2>&1 && apt-cache search \$PG_MAJOR-postgis | grep -Po \"(?<=postgresql-\$PG_MAJOR-postgis-)([0-9\.]*)\" | uniq | xargs "
+ versions=$(docker exec -ti "pg$v" bash -c "$c")
+ fi
+ echo "Available PostGIS versions : $versions"
+ distrib=$(docker exec -ti "pg$v" bash -c "source /etc/os-release && echo -n \$PRETTY_NAME")
+ echo "Running on $distrib"
+ docker rm -f "pg$v" >/dev/null 2>&1
+ echo
+done
diff --git a/test/scripts/pull_testing_images.sh b/test/scripts/pull_testing_images.sh
index 9722d49..403c8e9 100644
--- a/test/scripts/pull_testing_images.sh
+++ b/test/scripts/pull_testing_images.sh
@@ -1,19 +1,27 @@
#!/usr/bin/env bash
+# Place ourselves in scripts directory
+SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
+cd "$SCRIPT_DIR" || exit
+
# This script pulls images from Docker Hub and run them
# to do a simple check of PostgreSQL configuration
+set -e
+
testing_image="esgn/pgtuned-testing"
-tags=$(curl "https://registry.hub.docker.com/v2/repositories/$testing_image/tags?page_size=32" 2>/dev/null | jq -r '.results | .[] | .name')
-for tag in $tags
-do
+# get all available tags from docker hub registry
+tags=$(curl "https://registry.hub.docker.com/v2/repositories/$testing_image/tags?page_size=100" 2>/dev/null | jq -r '.results | .[] | .name')
+
+# Iterate over tags
+for tag in $tags; do
image_name=$testing_image":"$tag
- docker rmi $image_name &> /dev/null
- docker pull -q $image_name
- docker run -d -e POSTGRES_PASSWORD=secret --name pg-testing$tag $image_name
- docker exec -ti pg-testing$tag bash -c "until pg_isready -q; do sleep 5; done"
- docker exec -ti pg-testing$tag bash -c "cat /etc/apt/sources.list.d/pgdg.list"
- docker exec -ti pg-testing$tag bash -c "cat /var/lib/postgresql/data/postgresql.conf" > pg-testing$tag".txt"
- docker stop pg-testing$tag &> /dev/null && docker rm pg-testing$tag &> /dev/null
+ docker rmi --force "$image_name" &>/dev/null
+ docker pull -q "$image_name"
+ docker run -d -e POSTGRES_PASSWORD=secret --name "pg-testing$tag" "$image_name"
+ docker exec -ti "pg-testing$tag" bash -c "until pg_isready -q; do sleep 5; done"
+ docker exec -ti "pg-testing$tag" bash -c "cat /var/lib/postgresql/data/postgresql.conf" > "pg-testing$tag.txt"
+ docker stop "pg-testing$tag" &>/dev/null && docker rm --force "pg-testing$tag" &>/dev/null
done
+
\ No newline at end of file
diff --git a/test/scripts/test_pgtune.sh b/test/scripts/test_pgtune.sh
index c5f1e2a..267b5b6 100644
--- a/test/scripts/test_pgtune.sh
+++ b/test/scripts/test_pgtune.sh
@@ -1,49 +1,66 @@
#!/usr/bin/env bash
+# Place ourselves in scripts directory
+SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
+cd "$SCRIPT_DIR" || exit
+# Get back to root level
+cd ../../ || exit
+
# This scripts runs pgtune.sh and compare its results
-# to expected results (see /expected_results directory)
+# to expected results (see /expected_results directory).
+# Requires cmp command installed
-test_files_dir="../expected_results/"
-pgtuned_script="../../pgtune.sh"
-pg_versions="15 14 13 12 11 10 9.6 9.5"
-db_types="web oltp dw desktop mixed"
+test_files_dir="test/expected_results/"
+pgtuned_script="pgtune.sh"
+pg_versions="17 16 15 14 13 12 11 10 9.6 9.5"
total_mem=8GB
-cpu_count=8
+cpu_counts="2 4"
max_conn=1000
stge_types="ssd hdd san"
+db_types="web oltp dw desktop mixed"
-for pg_version in $pg_versions
+for cpu_count in $cpu_counts
do
- for stge_type in $stge_types
+ for pg_version in $pg_versions
do
- db_type="web"
- echo "TESTING WITH THE FOLLOWING PARAMETERS"
- echo "====================================="
- echo "= pg_version: "$pg_version
- echo "= db_type: "$db_type
- echo "= total_mem: "$total_mem
- echo "= cpu_count: "$cpu_count
- echo "= max_conn: "$max_conn
- echo "= stge_type: "$stge_type
- echo "====================================="
- output_file=$pg_version$db_type$total_mem$cpu_count$max_conn$stge_type".txt"
- bash $pgtuned_script -v $pg_version -t $db_type -m $total_mem -u $cpu_count -c $max_conn -s $stge_type > $output_file
- test_file=$pg_version"_linux_"$db_type"_"$total_mem"_"$cpu_count"_"$max_conn"_"$stge_type".txt"
- if [ ! -f "$test_files_dir$test_file" ]
- then
- echo "Test result : error"
- echo "REASON : $test_file does not exist"
- exit 2
- fi
- if [ "$(cmp $test_files_dir$test_file $output_file)" ]
- then
- echo "Test result : error"
- echo "REASON : generated file does not match existing file. Inspect $output_file."
- exit 1
- else
- echo "Test result : passed"
- echo
- fi
- rm $output_file
+ for stge_type in $stge_types
+ do
+ for db_type in $db_types
+ do
+ if [ "$pg_version" = "9.5" -o "$pg_version" = "9.6" ]
+ then
+ db_type="web"
+ cpu_count=8
+ fi
+ echo "TESTING WITH THE FOLLOWING PARAMETERS"
+ echo "====================================="
+ echo "= pg_version: $pg_version"
+ echo "= db_type: $db_type"
+ echo "= total_mem: $total_mem"
+ echo "= cpu_count: $cpu_count"
+ echo "= max_conn: $max_conn"
+ echo "= stge_type: $stge_type"
+ echo "====================================="
+ output_file="$pg_version"_"$db_type"_"$total_mem"_"$cpu_count"_"$max_conn"_"$stge_type.txt"
+ bash "$pgtuned_script" -v "$pg_version" -t "$db_type" -m "$total_mem" -u "$cpu_count" -c "$max_conn" -s "$stge_type" > "$output_file"
+ test_file="$pg_version"_linux_"$db_type"_"$cpu_count"_"$total_mem"_"$max_conn"_"$stge_type".txt
+ if [ ! -f "$test_files_dir$test_file" ]
+ then
+ echo "Test result : error"
+ echo "REASON : $test_file does not exist"
+ exit 2
+ fi
+ if [ "$(cmp "$test_files_dir$test_file" "$output_file")" ]
+ then
+ echo "Test result : error"
+ echo "REASON : generated file does not match existing file. Inspect $output_file."
+ exit 1
+ else
+ echo "Test result : passed"
+ echo
+ fi
+ rm "$output_file"
+ done
+ done
done
-done
+done
\ No newline at end of file