105 lines
2.7 KiB
Markdown
105 lines
2.7 KiB
Markdown
|
---
|
||
|
stage: Enablement
|
||
|
group: Sharding
|
||
|
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
|
||
|
---
|
||
|
|
||
|
# Multiple Databases
|
||
|
|
||
|
In order to scale GitLab, the GitLab application database
|
||
|
will be [decomposed into multiple
|
||
|
databases](https://gitlab.com/groups/gitlab-org/-/epics/6168).
|
||
|
|
||
|
## CI Database
|
||
|
|
||
|
Support for configuring the GitLab Rails application to use a distinct
|
||
|
database for CI tables was added in [GitLab
|
||
|
14.1](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/64289). This
|
||
|
feature is still under development, and is not ready for production use.
|
||
|
|
||
|
By default, GitLab is configured to use only one main database. To
|
||
|
opt-in to use a main database, and CI database, modify the
|
||
|
`config/database.yml` file to have a `primary` and a `ci` database
|
||
|
configurations. For example, given a `config/database.yml` like below:
|
||
|
|
||
|
```yaml
|
||
|
development:
|
||
|
adapter: postgresql
|
||
|
encoding: unicode
|
||
|
database: gitlabhq_development
|
||
|
host: /path/to/gdk/postgresql
|
||
|
pool: 10
|
||
|
prepared_statements: false
|
||
|
variables:
|
||
|
statement_timeout: 120s
|
||
|
|
||
|
test: &test
|
||
|
adapter: postgresql
|
||
|
encoding: unicode
|
||
|
database: gitlabhq_test
|
||
|
host: /path/to/gdk/postgresql
|
||
|
pool: 10
|
||
|
prepared_statements: false
|
||
|
variables:
|
||
|
statement_timeout: 120s
|
||
|
```
|
||
|
|
||
|
Edit the `config/database.yml` to look like this:
|
||
|
|
||
|
```yaml
|
||
|
development:
|
||
|
primary:
|
||
|
adapter: postgresql
|
||
|
encoding: unicode
|
||
|
database: gitlabhq_development
|
||
|
host: /path/to/gdk/postgresql
|
||
|
pool: 10
|
||
|
prepared_statements: false
|
||
|
variables:
|
||
|
statement_timeout: 120s
|
||
|
ci:
|
||
|
adapter: postgresql
|
||
|
encoding: unicode
|
||
|
database: gitlabhq_development_ci
|
||
|
migrations_paths: db/ci_migrate
|
||
|
host: /path/to/gdk/postgresql
|
||
|
pool: 10
|
||
|
prepared_statements: false
|
||
|
variables:
|
||
|
statement_timeout: 120s
|
||
|
|
||
|
test: &test
|
||
|
primary:
|
||
|
adapter: postgresql
|
||
|
encoding: unicode
|
||
|
database: gitlabhq_test
|
||
|
host: /path/to/gdk/postgresql
|
||
|
pool: 10
|
||
|
prepared_statements: false
|
||
|
variables:
|
||
|
statement_timeout: 120s
|
||
|
ci:
|
||
|
adapter: postgresql
|
||
|
encoding: unicode
|
||
|
database: gitlabhq_test_ci
|
||
|
migrations_paths: db/ci_migrate
|
||
|
host: /path/to/gdk/postgresql
|
||
|
pool: 10
|
||
|
prepared_statements: false
|
||
|
variables:
|
||
|
statement_timeout: 120s
|
||
|
```
|
||
|
|
||
|
Note that we use `primary` in the `config/database.yml` to refer to the main
|
||
|
database. This is to match the default name Rails has.
|
||
|
|
||
|
### Migrations
|
||
|
|
||
|
Any migrations that affect `Ci::ApplicationRecord` models
|
||
|
and their tables must be placed in two directories for now:
|
||
|
|
||
|
- `db/migrate`
|
||
|
- `db/ci_migrate`
|
||
|
|
||
|
We aim to keep the schema for both tables the same across both databases.
|