すべての記事

PostgreSQL 実践講座 #7 パーティショニング — 巨大テーブルを時間の単位で分ける
読了 5分

PostgreSQL 実践講座 #7 パーティショニング — 巨大テーブルを時間の単位で分ける

数億行テーブルの標準処方である宣言的パーティショニングを扱います。パーティショニングが実際に解決する問題(古いデータの削除が DROP 一発・パーティションプルーニング・VACUUM 負担の分散)と解決しない問題、RANGE パーティショニングで月別テーブルを作る文法、パーティションキーが PK に含まれる必要がある制約、プルーニングが効くクエリ条件の条件、新しいパーティションを作り続ける運用負担と pg_partman、そして「いつ導入するか」の判断基準まで扱います。

Rust 実践講座 #7 リリース最適化とクロスコンパイル — 小さく速いバイナリをどこでも
読了 5分

Rust 実践講座 #7 リリース最適化とクロスコンパイル — 小さく速いバイナリをどこでも

配布準備の前半です。[profile.release] で締める最適化(lto、codegen-units、strip)とそれぞれの代償、panic = "abort" を安易に有効にしてはいけない理由、バイナリサイズが縮む過程、そして rustup target で行うクロスコンパイル — 特に glibc 依存をなくして古いサーバーでも動く musl 静的リンクビルドと、リンカ問題を Docker で迂回する cross ツールまで扱います。

SRE 実践 #5 ポストモーテム — 非難なき振り返りとアクションアイテムの事後管理
読了 5分

SRE 実践 #5 ポストモーテム — 非難なき振り返りとアクションアイテムの事後管理

障害を組織の学習に変えるポストモーテムの運用を扱います。非難なし(blameless)が温情主義ではなく情報獲得の戦略である理由、どの障害にポストモーテムを書くかを決めるトリガー基準、タイムライン・影響・原因分析・アクションアイテムへ続くテンプレート、人のミスで止まらずシステムの原因まで掘り下げる問いの立て方、そしてアクションアイテムが放置されないための追跡ルールまで扱います。

Terraform 基礎 #8 モジュール基礎 — リソースのまとまりの再利用とレジストリモジュール
読了 5分

Terraform 基礎 #8 モジュール基礎 — リソースのまとまりの再利用とレジストリモジュール

すべての Terraform ディレクトリがすでにモジュールであるという事実から出発し、変数を入力に output を出力に持つ子モジュールを自分で作って module ブロックで呼び出す方法を整理します。レジストリの実績あるモジュールをバージョン固定と一緒に使う方法、そしてモジュールを分ける基準と過剰な分割の境界まで扱います。

PostgreSQL 実践講座 #6 ロックと同時実行 — デッドロック、DDL ロック、SKIP LOCKED
読了 4分

PostgreSQL 実践講座 #6 ロックと同時実行 — デッドロック、DDL ロック、SKIP LOCKED

MVCC が解決してくれない領域、ロックを扱います。行ロック(書き込み同士の衝突)とテーブルロック(DDL)の 2 つの層、ロック待ちを pg_locks と pg_blocking_pids で追跡する方法、デッドロックが起きる構造(交差した順序の更新)と予防ルール(同じ順序で取る)、SELECT FOR UPDATE で読んで-判断して-書くを安全にする方法、そして作業キューの標準パターン FOR UPDATE SKIP LOCKED まで扱います。

Rust 実践講座 #6 テスト — パーサーの単体テストから CLI の統合テストまで
読了 4分

Rust 実践講座 #6 テスト — パーサーの単体テストから CLI の統合テストまで

loglens に安全網を張ります。同じファイルに置く #[cfg(test)] の単体テスト(パーサーの正常・境界・失敗ケース)、tests/ ディレクトリの統合テスト、assert_cmd と predicates でビルド済みバイナリを実際に実行して出力と終了コードを検証する CLI テスト、tempfile で作る一時ログファイル、そして cargo test がテストを並列実行するという事実が持つ意味まで扱います。

SRE 実践 #4 オンコール運用 — ローテーション、エスカレーション、負荷管理
読了 6分

SRE 実践 #4 オンコール運用 — ローテーション、エスカレーション、負荷管理

持続可能なオンコール体制の設計を扱います。ローテーションが成立する最低人数と勤務編成の方式、一次対応者が詰まったときのためのエスカレーションチェーン、シフトを引き継ぐときのハンドオフのルーチン、シフトあたりのページ件数で負荷を測定して上限を設ける理由、オンコール中に見つけた問題を返済するフォローアップ時間の確保、そして報酬と文化まで、オンコールが燃え尽き製造機にならないための条件を扱います。

Terraform 基礎 #7 リソースのライフサイクル制御 — 置き換えの条件、create_before_destroy、prevent_destroy
読了 5分

Terraform 基礎 #7 リソースのライフサイクル制御 — 置き換えの条件、create_before_destroy、prevent_destroy

どの属性の変更が update で済み、どの変更がリソースの置き換えを強制するのかを plan から読み取る方法を整理します。置き換えの順序を逆転させて中断を減らす create_before_destroy、本番リソースの削除を防ぐ prevent_destroy、コードの外の変更を無視する ignore_changes、そして -replace フラグで置き換えを強制する方法まで扱います。

PostgreSQL 実践講座 #5 VACUUM と autovacuum — dead tuple 掃除の原理とチューニング
読了 4分

PostgreSQL 実践講座 #5 VACUUM と autovacuum — dead tuple 掃除の原理とチューニング

PostgreSQL 運用知識の中心である VACUUM を扱います。MVCC が残す dead tuple と VACUUM がする仕事(空間の再利用マーク・可視性マップの更新・トランザクション ID 周回の防止)、普段は autovacuum に任せればいい理由と既定のしきい値の限界(大きいテーブルほど掃除が遅れる)、テーブル単位のスケールファクタ調整、掃除を妨げる長時間トランザクション、肥大化の確認クエリ、そして VACUUM FULL の危険性まで扱います。

Rust 実践講座 #5 rayon 並列化 — データ競合のない map-reduce
読了 5分

Rust 実践講座 #5 rayon 並列化 — データ競合のない map-reduce

集計を複数コアに分けます。並列化が得になる条件(CPU バウンド)とストリーミングから丸ごと読みへ戦略を変える理由、rayon の par_lines と fold・reduce で作るスレッドごとの部分集計と統合、Mutex で 1 つの HashMap を共有すると遅くなる理由(ロック競合)、そして共有可変状態のミスをコンパイラが捕まえる場面まで扱います。

SRE 実践 #3 アラート設計 — 症状ベースの通知とマルチウィンドウ・バーンレート
読了 5分

SRE 実践 #3 アラート設計 — 症状ベースの通知とマルチウィンドウ・バーンレート

深夜に人を起こす価値のあるアラートだけを残す設計を扱います。原因ベースのアラート(CPU 高負荷)ではなく症状ベースのアラート(ユーザーリクエストの失敗)へ移行すべき理由、ページとチケットを分ける基準、バーンレートアラートを短いウィンドウと長いウィンドウの組み合わせで作り誤検知と見逃しを同時に減らすマルチウィンドウ構成、アラート疲れを測定して減らす運用ルーチンまで扱います。

Terraform 基礎 #6 依存関係と繰り返し — depends_on、count と for_each、dynamic ブロック
読了 5分

Terraform 基礎 #6 依存関係と繰り返し — depends_on、count と for_each、dynamic ブロック

参照がそのまま依存関係になり、作成順序が決まる仕組みと、depends_on が必要になる例外的な場面を整理します。count でリソースを複製するときにリストの途中削除が引き起こす再作成の落とし穴、キーベースだから安全な for_each との使い分けの基準、そしてネストしたブロックを繰り返す dynamic ブロックまで扱います。