データベース開発者向けガイドライン
データベースレビュー
- 作業中の機能の設計フェーズでは、データベース関連の変更を加えるかどうかに注意してください。クエリを追加または修正する場合、レビューフェーズの後半で驚かないように、
explain
プランを早めに見始めます。 - クエリの最適化や、
explain
プランを理解するのに手助けが必要な場合は、#database
で支援を求めてください。 -
レビュー用のデータベース MR を作成する場合は、データベースレビューガイドラインを参照してください。
データベース関連の変更、マイグレーション、複雑なSQLクエリについて紹介しています。
- データベースのレビュアー、またはレビュアーになりたい方は、データベース変更のレビュー入門をご覧ください。
ツール
- EXPLAINプランについて
-
explainの出力を視覚化するexplain.depesz.comまたはexplain.dalibo.com。
EXPLAIN
- pgFormatterはPostgreSQLのSQL構文を美化します。
- db:check-migrationsジョブ
- データベースマイグレーションパイプライン
マイグレーション
- 必要なストップの追加
- マイグレーションにおけるダウンタイムの回避
- 一括バックグラウンドマイグレーションガイドライン
- 新しいモデルの作成を含む、定期的なマイグレーションの作成
- マイグレーションの削除
- さまざまな種類のマイグレーション
- 複数のデータベースに対するマイグレーション
- 安全な SQL マイグレーションを作成するためのマイグレーションスタイルガイド
- テーブルのパーティショニング
- デプロイ後のマイグレーションのガイドラインと 作成方法
- データベースマイグレーションの実行
- SQLクエリに関するガイドライン
- テーブルの入れ替え
- Railsマイグレーションのテストガイド
- Railsマイグレーションのテストを書くタイミングと方法
デバッグ
- データベースへのアクセス
- データベースのリセット
- データベースのトラブルシューティングとデバッグ
- SQL クエリのソースのトレース
- Railsコンソールでクエリログの詳細表示を使用する方法
- Marginaliaでクエリコメントを使う
ベストプラクティス
- データベースインデックスの追加
- 既存のカラムへの外部キー制約の追加
- アップグレード前のバックグラウンドマイグレーションの確認
- クライアント側の接続プール
- 制約の命名規則
- 列挙型の作成
- データレイアウトとアクセスパターン
- 効率的な
IN
演算子クエリ - 外部キーと関連付け
- ハッシュインデックス
- テーブルへの一括挿入
- バッチでのテーブルの繰り返し
- ロードバランシング
NOT NULL
制約- テーブルのカラムの並び順
- ページネーションのガイドライン
- 多相の関連付け
- クエリ数の制限
- クエリ・パフォーマンス・ガイドライン
- データのシリアライズ
- 単一テーブル継承
- SHA1ハッシュのバイナリ格納
- 文字列とTextデータ型
- 複数の値の更新
- データベース機能の検証
ケーススタディ
GitLab管理者のためのPostgreSQL情報
- 外部のPostgreSQLサービスを使ったGitLabの設定
- スケーリングのためのPostgreSQLの設定
- データベースの負荷分散
- GitLabデータベースの別のPostgreSQLインスタンスへの移動
- Omnibus GitLabを使ったレプリケーションとフェイルオーバー
- Omnibus GitLabを使ったスタンドアロンのPostgreSQL
- PostgreSQLのトラブルシューティング
- バンドルされているPgBouncerサービスでの作業
スケーリングのためのユーザ情報
GitLab 管理者向けに、PostgreSQL のスケーリング設定に関する情報を提供しています:
クリックハウス
- 紹介
- GitLabにおけるClickHouse
- クエリ実行の最適化
- ClickHouseを使ったGitLab機能の再構築1:アクティビティデータ
- ClickHouseを使ったGitLab機能の再構築2:マージリクエスト分析
- ClickHouseの階層型ストレージ