#インフラ

381 件の記事

PostgreSQL 実践講座 #3 性能診断のルーチン — pg_stat_statements で遅いクエリを見つける
読了 4分

PostgreSQL 実践講座 #3 性能診断のルーチン — pg_stat_statements で遅いクエリを見つける

「DB が遅い」から犯人のクエリまで辿り着く標準ルーチンを作ります。いま何が起きているかを見る pg_stat_activity(アクティブなクエリ・待ち・長引くトランザクション)、累積統計で高くつくクエリを見つける pg_stat_statements の導入と主要カラム(total_exec_time・mean_exec_time・calls)、合計上位と平均上位が指す別々の犯人、スロークエリログ(log_min_duration_statement)の設定、そして EXPLAIN への受け渡しまで扱います。

SRE 実践 #1 SLI・SLO 設計 — 何を測り、いくつの 9 を約束するか
読了 6分

SRE 実践 #1 SLI・SLO 設計 — 何を測り、いくつの 9 を約束するか

SRE 実践シリーズの第 1 回として、SLI と SLO を実際に設計するプロセスを扱います。ユーザージャーニーから測定対象を選ぶ方法、良い SLI が good/total の比率になる理由、ロードバランサー・サーバー・クライアントのどこで測るかのトレードオフ、SLO の数値を現在の性能から出発させるべき理由、測定ウィンドウの選択、そして SLO 仕様書に必ず書くべき項目まで扱います。

Terraform 基礎 #4 データソースと式 — 作らずに読み取る、条件式と for
読了 5分

Terraform 基礎 #4 データソースと式 — 作らずに読み取る、条件式と for

Terraform が作っていない既存リソースの情報を読み取る data ブロックを、最新 AMI の検索を例に扱います。条件式で環境ごとの分岐を作り、for 式とスプラットでリストとマップを加工する方法も整理します。よく使う組み込み関数と、式の実験場である terraform console まで扱います。

PostgreSQL 実践講座 #2 コネクションプール — max_connections の誤解と PgBouncer
読了 5分

PostgreSQL 実践講座 #2 コネクションプール — max_connections の誤解と PgBouncer

トラフィックが増えると必ずぶつかるコネクション問題を扱います。PostgreSQL のコネクションがプロセス 1 つで高くつく理由、max_connections を上げるのが答えではない理由(多すぎるコネクションはむしろスループットを下げます)、アプリケーションのプールと PgBouncer のような外部プーラーの役割分担、PgBouncer transaction モードの効果と制約(セッション状態の機能が使えない)、そして適正なプールサイズの感覚まで扱います。

Terraform 基礎 #3 変数・出力・ローカル値 — ハードコーディングを取り除く 3 つの道具
読了 5分

Terraform 基礎 #3 変数・出力・ローカル値 — ハードコーディングを取り除く 3 つの道具

variable ブロックで値をコードの外に切り出す方法と、tfvars ファイル、-var フラグ、環境変数という 4 つの入力パスの優先順位を整理します。validation で誤った値を入り口で止め、output で結果を取り出し、locals で内部の計算に名前を付けるところまで、同じコードで複数の環境を作る土台を固めます。

PostgreSQL 実践講座 #1 スキーマ・マイグレーション — サービスを止めずにテーブルを変える
読了 4分

PostgreSQL 実践講座 #1 スキーマ・マイグレーション — サービスを止めずにテーブルを変える

実践編の始まりは、稼働中のテーブルを変える技術です。マイグレーションをコードで管理すべき理由(順序・再現性)、DDL もトランザクションになる PostgreSQL の強み、ロックを長く握る危険な変更と安全な変更の区別、NOT NULL の追加を段階に分ける方法、CREATE INDEX CONCURRENTLY、そしてカラム名の変更・型変更を拡張-移行-縮小(expand-contract)で解く戦略まで扱います。

Terraform 基礎 #2 HCL の基本文法 — ブロック、引数、リソースアドレスと変更の 3 つの形
読了 5分

Terraform 基礎 #2 HCL の基本文法 — ブロック、引数、リソースアドレスと変更の 3 つの形

HCL の骨格であるブロックと引数の構造、aws_s3_bucket.hello のようなリソースアドレスの意味と、リソース同士を参照する文法を整理します。plan 出力の記号を読みながら create、update、replace という変更の 3 つの形を区別し、fmt と validate でコードを整える習慣まで扱います。

PostgreSQL 基礎講座 #9 ロール・権限・バックアップ基礎 — 運用の最小規律
読了 5分

PostgreSQL 基礎講座 #9 ロール・権限・バックアップ基礎 — 運用の最小規律

基礎講座の締めくくりとして運用の最小規律を固めます。ロール(role)1 つでユーザーとグループを統一した PostgreSQL の権限モデル、アプリケーションに superuser を渡さず最小権限アカウントを作る実務の手順(GRANT とデフォルト権限)、public スキーマの注意点、pg_dump・pg_restore による論理バックアップと復元リハーサルの重要性、そして基礎 9 回の振り返りと実践編の予告まで扱います。

Terraform 基礎 #1 IaC と Terraform — コンソールクリック運用の限界、インストールと初めての apply
読了 8分

Terraform 基礎 #1 IaC と Terraform — コンソールクリック運用の限界、インストールと初めての apply

コンソールのクリックで作ったインフラが、再現不能、履歴の不在、レビューの不在によって崩れていく過程を整理し、あるべき状態をコードで宣言する IaC がこの問題をどう解決するのかを説明します。CloudFormation、CDK、Pulumi の中で Terraform が占める位置を比較し、インストールから S3 バケットを init、plan、apply で作成して destroy で削除する最初のサイクルまで扱います。

PostgreSQL 基礎講座 #8 ビュー・CTE・ウィンドウ関数 — 複雑なクエリを読みやすくする
読了 4分

PostgreSQL 基礎講座 #8 ビュー・CTE・ウィンドウ関数 — 複雑なクエリを読みやすくする

大きくなったクエリを構造化する 3 つの道具を固めます。繰り返されるクエリに名前を付けるビューと物理コピーであるマテリアライズドビューの区別、WITH 句(CTE)でクエリを段階ごとに記述する方法、ウィンドウ関数の基本構造(OVER、PARTITION BY)と ROW_NUMBER でグループごとの上位 N 件を取る代表パターン、集計関数とウィンドウ関数の違い(行が減らない)、LAG で前月比を求める例まで扱います。

PostgreSQL 基礎講座 #7 JSONB — スキーマの柔軟さをリレーショナルの中で
読了 4分

PostgreSQL 基礎講座 #7 JSONB — スキーマの柔軟さをリレーショナルの中で

PostgreSQL が NoSQL の領域まで担えるようになった立役者、JSONB を固めます。json と jsonb の違い(jsonb が既定値である理由)、値の取り出し演算子(->、->>、#>>)と存在・包含演算子(?、@>)の使い方、JSONB 検索を支える GIN インデックス、更新(jsonb_set)の特性、そして一番重要な「どこまでをカラムにして、どこからを JSONB に入れるか」の設計境界まで扱います。

PostgreSQL 基礎講座 #6 トランザクションと MVCC — 同時実行の基本原理
読了 4分

PostgreSQL 基礎講座 #6 トランザクションと MVCC — 同時実行の基本原理

複数の接続が同じデータを同時に触るとき、PostgreSQL が一貫性を守る仕組みを固めます。BEGIN・COMMIT・ROLLBACK の基本と原子性、MVCC(多版型同時実行制御)の核心である「読み取りは書き込みを妨げない」、UPDATE が実際には新しいバージョンの行を作るという事実と dead tuple の予告、既定の分離レベル Read Committed の意味と罠、Repeatable Read・Serializable に上げる場合まで扱います。