Skip to content

Commit a5a4975

Browse files
committed
Apply DB performance optimizations also for github actions
1 parent 1c10d36 commit a5a4975

File tree

3 files changed

+71
-5
lines changed

3 files changed

+71
-5
lines changed

.github/workflows/unit_tests.yml

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,12 +54,24 @@ jobs:
5454
--health-interval 10s
5555
--health-timeout 5s
5656
--health-retries 5
57+
--tmpfs /var/lib/postgresql/data
58+
--shm-size=256m
5759
ports:
5860
- 5432:5432
5961
steps:
6062
- uses: hmarr/debug-action@v3
6163
- uses: actions/checkout@v4
6264
- uses: ./.github/workflows/composite/setup
65+
- name: Configure PostgreSQL for performance
66+
run: |
67+
sudo apt-get update && sudo apt-get install -y postgresql-client
68+
PGPASSWORD=rootpassword psql -h localhost -U postgres -c "ALTER SYSTEM SET fsync = off;"
69+
PGPASSWORD=rootpassword psql -h localhost -U postgres -c "ALTER SYSTEM SET synchronous_commit = off;"
70+
PGPASSWORD=rootpassword psql -h localhost -U postgres -c "ALTER SYSTEM SET full_page_writes = off;"
71+
PGPASSWORD=rootpassword psql -h localhost -U postgres -c "ALTER SYSTEM SET checkpoint_completion_target = 0.9;"
72+
PGPASSWORD=rootpassword psql -h localhost -U postgres -c "ALTER SYSTEM SET wal_buffers = '16MB';"
73+
PGPASSWORD=rootpassword psql -h localhost -U postgres -c "ALTER SYSTEM SET shared_buffers = '256MB';"
74+
PGPASSWORD=rootpassword psql -h localhost -U postgres -c "SELECT pg_reload_conf();"
6375
- name: Run tests
6476
run: DB=postgres POSTGRES_CONNECTION_PREFIX="postgres://postgres:rootpassword@localhost:5432" bundle exec rake spec
6577
- uses: ravsamhq/notify-slack-action@v2
@@ -83,13 +95,27 @@ jobs:
8395
env:
8496
MYSQL_DATABASE: cc_test
8597
MYSQL_ROOT_PASSWORD: password
86-
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
98+
options: >-
99+
--health-cmd="mysqladmin ping"
100+
--health-interval=10s
101+
--health-timeout=5s
102+
--health-retries=3
103+
--tmpfs /var/lib/mysql
104+
--tmpfs /tmp
87105
ports:
88106
- 3306:3306
89107
steps:
90108
- uses: hmarr/debug-action@v3
91109
- uses: actions/checkout@v4
92110
- uses: ./.github/workflows/composite/setup
111+
- name: Configure MySQL for performance
112+
run: |
113+
sudo apt-get update && sudo apt-get install -y mysql-client
114+
mysql -h 127.0.0.1 -u root -ppassword -e "SET GLOBAL innodb_flush_method = 'nosync';"
115+
mysql -h 127.0.0.1 -u root -ppassword -e "SET GLOBAL innodb_flush_log_at_trx_commit = 0;"
116+
mysql -h 127.0.0.1 -u root -ppassword -e "SET GLOBAL innodb_doublewrite = 0;"
117+
mysql -h 127.0.0.1 -u root -ppassword -e "SET GLOBAL innodb_buffer_pool_size = 268435456;"
118+
mysql -h 127.0.0.1 -u root -ppassword -e "SET GLOBAL innodb_log_buffer_size = 16777216;"
93119
- name: Run tests
94120
run: DB=mysql MYSQL_CONNECTION_PREFIX="mysql2://root:[email protected]:3306" bundle exec rake spec
95121
- uses: ravsamhq/notify-slack-action@v2
@@ -98,4 +124,4 @@ jobs:
98124
status: ${{ job.status }}
99125
notify_when: 'failure' # default is 'success,failure,warnings'
100126
env:
101-
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} # required
127+
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} # required

.github/workflows/unit_tests_backwards_compatibility.yml

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ concurrency:
44
cancel-in-progress: true
55
on:
66
workflow_dispatch:
7-
description: "This action tests backwards compatibility when db migrations are introduced. It tests database schema at new code(old_cc_ref) with unittests running old code(new_cc_ref) "
87
inputs:
98
old_cc_ref:
109
description: 'Old Version of CC_NG that the backwards compatibility should be checked against'
@@ -44,6 +43,8 @@ jobs:
4443
--health-interval 10s
4544
--health-timeout 5s
4645
--health-retries 5
46+
--tmpfs /var/lib/postgresql/data
47+
--shm-size=256m
4748
ports:
4849
- 5432:5432
4950
steps:
@@ -63,6 +64,16 @@ jobs:
6364
)}}
6465
- name: Setup Environment
6566
uses: ./.github/workflows/composite/setup
67+
- name: Configure PostgreSQL for performance
68+
run: |
69+
sudo apt-get update && sudo apt-get install -y postgresql-client
70+
PGPASSWORD=rootpassword psql -h localhost -U postgres -c "ALTER SYSTEM SET fsync = off;"
71+
PGPASSWORD=rootpassword psql -h localhost -U postgres -c "ALTER SYSTEM SET synchronous_commit = off;"
72+
PGPASSWORD=rootpassword psql -h localhost -U postgres -c "ALTER SYSTEM SET full_page_writes = off;"
73+
PGPASSWORD=rootpassword psql -h localhost -U postgres -c "ALTER SYSTEM SET checkpoint_completion_target = 0.9;"
74+
PGPASSWORD=rootpassword psql -h localhost -U postgres -c "ALTER SYSTEM SET wal_buffers = '16MB';"
75+
PGPASSWORD=rootpassword psql -h localhost -U postgres -c "ALTER SYSTEM SET shared_buffers = '256MB';"
76+
PGPASSWORD=rootpassword psql -h localhost -U postgres -c "SELECT pg_reload_conf();"
6677
- name: Migrate Database
6778
run: DB=postgres POSTGRES_CONNECTION_PREFIX="postgres://postgres:rootpassword@localhost:5432" bundle exec rake db:parallel:recreate db:parallel:migrate
6879
- name: Checkout code to run the unit tests with
@@ -92,7 +103,13 @@ jobs:
92103
env:
93104
MYSQL_DATABASE: cc_test
94105
MYSQL_ROOT_PASSWORD: password
95-
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
106+
options: >-
107+
--health-cmd="mysqladmin ping"
108+
--health-interval=10s
109+
--health-timeout=5s
110+
--health-retries=3
111+
--tmpfs /var/lib/mysql
112+
--tmpfs /tmp
96113
ports:
97114
- 3306:3306
98115
steps:
@@ -112,6 +129,14 @@ jobs:
112129
)}}
113130
- name: Setup Environment
114131
uses: ./.github/workflows/composite/setup
132+
- name: Configure MySQL for performance
133+
run: |
134+
sudo apt-get update && sudo apt-get install -y mysql-client
135+
mysql -h 127.0.0.1 -u root -ppassword -e "SET GLOBAL innodb_flush_method = 'nosync';"
136+
mysql -h 127.0.0.1 -u root -ppassword -e "SET GLOBAL innodb_flush_log_at_trx_commit = 0;"
137+
mysql -h 127.0.0.1 -u root -ppassword -e "SET GLOBAL innodb_doublewrite = 0;"
138+
mysql -h 127.0.0.1 -u root -ppassword -e "SET GLOBAL innodb_buffer_pool_size = 268435456;"
139+
mysql -h 127.0.0.1 -u root -ppassword -e "SET GLOBAL innodb_log_buffer_size = 16777216;"
115140
- name: Migrate Database
116141
run: DB=mysql MYSQL_CONNECTION_PREFIX="mysql2://root:[email protected]:3306" bundle exec rake db:parallel:recreate db:parallel:migrate
117142
- name: Checkout code to run the unit tests with
@@ -125,4 +150,4 @@ jobs:
125150
- name: Setup Environment
126151
uses: ./.github/workflows/composite/setup
127152
- name: Run tests
128-
run: DB=mysql MYSQL_CONNECTION_PREFIX="mysql2://root:[email protected]:3306" bundle exec rake spec:without_migrate
153+
run: DB=mysql MYSQL_CONNECTION_PREFIX="mysql2://root:[email protected]:3306" bundle exec rake spec:without_migrate

docker-compose.yml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,17 @@ services:
1616
- "full_page_writes=off"
1717
- "-c"
1818
- "log_statement=all"
19+
- "-c"
20+
- "checkpoint_segments=32"
21+
- "-c"
22+
- "checkpoint_completion_target=0.9"
23+
- "-c"
24+
- "wal_buffers=16MB"
25+
- "-c"
26+
- "shared_buffers=256MB"
1927
tmpfs:
2028
- /var/lib/postgresql/data
29+
shm_size: 256m
2130
ports:
2231
- "127.0.0.1:5432:5432"
2332
networks:
@@ -39,8 +48,14 @@ services:
3948
- "--innodb-flush-method=nosync"
4049
- "--innodb-flush-log-at-trx-commit=0"
4150
- "--innodb-doublewrite=0"
51+
- "--innodb-buffer-pool-size=256M"
52+
- "--innodb-log-buffer-size=16M"
53+
- "--innodb-log-file-size=64M"
54+
- "--skip-innodb-checksums"
55+
- "--skip-sync-frm"
4256
tmpfs:
4357
- /var/lib/mysql
58+
- /tmp
4459
ports:
4560
- "127.0.0.1:3306:3306"
4661
healthcheck:

0 commit comments

Comments
 (0)