inflearn logo
知識共有
inflearn logo

MySQLしか使ってこなかった開発者のためのPostgreSQL実践 — MVCC・VACUUM・実行計画・インデックスを自分で再現しながら学ぶ

MySQLでサービスを作ったことがあるなら。同じSQLをMySQL 8.4とPostgreSQL 17で並べて実行し、UPDATEによってテーブルが4倍に膨らむ現象、異なるデフォルトの分離レベル、40001シリアライゼーションエラー、ギャップロックのないロック、ツリー形式で読み解く実行計画、部分インデックス/GIN/BRINインデックスまで、40の違いを実際の実行内容で直接確認します。

1名 が受講中です。

難易度 中級以上

受講期間 無制限

PostgreSQL
PostgreSQL
MySQL
MySQL
SQL
SQL
DBMS/RDBMS
DBMS/RDBMS
database
database
PostgreSQL
PostgreSQL
MySQL
MySQL
SQL
SQL
DBMS/RDBMS
DBMS/RDBMS
database
database

この講座で身につくこと

  • MySQLから移行したクエリ・DDLのうち、PostgreSQLで動作が異なる箇所(大文字・小文字の比較・採番・UPSERT・型変換・タイムゾーン・DDLトランザクション)をチェックリストで洗い出します。

  • テーブルがなぜ肥大化したのかを、デッドタプルとautovacuumの記録から説明し、クリーンアップを妨げている長時間トランザクションを見つけて終了させます。

  • 同じシナリオでMySQLと結果に差が出る分離レベル・ロック動作を把握し、40001の再試行コードを入れる場所を決めます。

  • EXPLAIN (ANALYZE, BUFFERS)をツリーとして読み解き、古い統計情報・結合方式・Index Only Scanが失敗する原因を数値で説明します。

  • 部分インデックス・式インデックス・INCLUDE・GIN・BRINインデックスとパーティショニングから適切なものを選び、本番環境でCONCURRENTLYを使って安全に作成します。

MySQLでは当たり前だったことが、PostgreSQLではなぜ異なる動きをするのでしょうか。同じSQLを両方のエンジンで実行して、直接確かめます。

MySQLでサービスを作ったことがあるなら。同じSQLをMySQL 8.4とPostgreSQL 17で並べて実行し、テーブルが4倍に膨らむUPDATE、異なるデフォルトの分離レベル、40001シリアライゼーションエラー、ギャップロックのないロック、ツリーで読む実行計画、部分・GIN・BRINインデックスまで、40の違いを実行結果そのもので直接確認します。

PostgreSQLの講義の大半は、文法や機能の紹介で終わります。この講義では、MySQLの経験を出発点に、同じデータ・同じSQLを両方のエンジンで実行し、何が異なるのかを各場面で実行結果そのままに示します。行バージョンとVACUUM、分離レベルとロック、実行計画、インデックスなど、運用上の障害につながるエンジンの動作が中心です。大手EC企業で現役のDBAチームリーダーが、両方のエンジンを運用する中で使っている点検手順を盛り込みました。

この講義を終えると

  • MySQLから移行したクエリ・DDLのうち、PostgreSQLで異なる動作をする箇所(大文字・小文字の比較・番号・UPSERT・型変換・タイムゾーン・DDLトランザクション)をチェックリストで見つけます。

  • テーブルがなぜ肥大化したのかを、デッドタプルやautovacuumの記録から説明し、クリーンアップを妨げる長時間トランザクションを見つけて終了させます。

  • 同じシナリオでMySQLと結果が異なる分離レベル・ロック動作を把握し、40001の再試行コードを入れる箇所を決めます。

  • EXPLAIN (ANALYZE, BUFFERS)をツリー構造として読み、古い統計情報・結合方式・Index Only Scanが失敗する原因を数値で説明します。

  • 部分インデックス・式インデックス・INCLUDE・GIN・BRINインデックスとパーティショニングの中から適切なものを選び、運用環境でCONCURRENTLYを使って安全に作成します。

こんな方におすすめです

  • MySQL(InnoDB)でサービスを開発した経験があり、新規プロジェクトや転職を機にPostgreSQLを担当することになったバックエンドエンジニア

  • MySQLからPostgreSQLへの移行を検討・進行中のチーム

  • PostgreSQL入門講座を終え、エンジンの動作を深く知りたい方

カリキュラム(6セクション・40講義・約292分)

  • セクション1. 同じSQL、異なる結果 — 同じUPDATEでテーブルサイズは4倍、接続から異なる — データベース・スキーマ・ロール、番号と型 — AUTO_INCREMENTの代わりにIDENTITY、大文字・小文字と空文字列 — 同じWHEREでも件数は異なる、UPSERTと型変換 — 移行すると壊れるSQL、NULLの並び順とページネーション、タイムゾーン — DATETIMEとtimestamptz

  • セクション2. MVCCとVACUUM — 行が蓄積する場所が異なる — 行バージョンが存在する場所 — Undoではなくテーブル内、デッドタプルとテーブルサイズ、VACUUMとVACUUM FULLは異なる、長いトランザクションがクリーンアップを妨げる、autovacuumのログを読む、HOT更新とfillfactor、インデックスも肥大化する — REINDEX、トランザクションIDの年齢を監視する

  • セクション3. トランザクションとロック — 同じ分離レベル、異なる結果 — デフォルトの分離レベルが異なる、同じREPEATABLE READ、異なる結末 — 40001、ギャップロックはない — 代わりにSERIALIZABLE、FOR UPDATE・NOWAIT・SKIP LOCKED、アプリケーションロック — advisory lock、DDLもロールバックされる — そしてロック待ち行列、タイムアウトの安全策3つ、デッドロックメッセージの読み方

  • セクション4. 実行計画 — ツリーで読み、数値で証明する — EXPLAINをツリーで読む、EXPLAIN (ANALYZE, BUFFERS)、古い統計情報が実行計画を狂わせる、カラム間で絡み合う条件 — 拡張統計、結合方式 — Nested Loop・Hash・Merge、クラスタ化インデックスがない — ヒープとIndex Only Scan、COUNTと深いOFFSETのコスト、pg_stat_statementsで遅いクエリを探す

  • セクション5. インデックスとパーティション — MySQLにはなかった選択肢 — 部分インデックス — 必要な行だけ、式インデックス — lower(email)、複合インデックスとINCLUDE、GINとJSONB、BRIN — 時系列の大容量ログ、宣言的パーティショニングとパーティションの除外、CREATE INDEX CONCURRENTLY

  • セクション6. 移行時 — 1つのコネクションにつき1つのプロセス、まとめ:MySQLからPostgreSQLへ移行する際のチェックリスト

実習環境

DockerでMySQL 8.4とPostgreSQL 17を1組ずつ起動し、同じ仮想ショッピングモールのデータ(顧客1万・商品1千・注文20万)を両方に投入します。各講義の内容は、./scenarios/sNN.shひとつで画面ごとそのまま再現できます。講義画面に表示されるすべての数値、エラーメッセージ、実行計画は、この実習を実際に実行した結果です。

事前知識

  • MySQLでテーブル・インデックス・トランザクションを扱った経験

  • SQL JOIN

  • Dockerがインストールされたコンピューター(メモリは4GB以上の割り当てを推奨)

この講義で扱わないこと

  • SQLの基礎文法を最初から

  • レプリケーション・高可用性・バックアップ・メジャーアップグレードなどのサーバー運用。

  • クラウド管理型DBの構成

  • ORMマッピング

ご案内

スライドのナレーションは合成音声です。すべてのデータは教育用の仮想データであり、数値は実行環境によって異なる場合があります。

次のような方に
おすすめです

受講対象

  • MySQL(InnoDB)でサービスを開発し、新規プロジェクトや転職を機にPostgreSQLを担当することになったバックエンド開発者

  • MySQLからPostgreSQLへの移行を検討・進行中のチーム

  • PostgreSQL入門講座を終え、エンジンの動作を深く理解したい方

前提知識

  • MySQLでテーブル・インデックス・トランザクションを扱った経験

  • SQL結合

  • Dockerがインストールされたコンピューター(メモリ4GB以上の割り当てを推奨)

こんにちは
dorian05202988です。

経歴認証済み

20年以上にわたりデータベースとIT分野でキャリアを積んできたデータ職人です。DBAおよびDB Platformチームのマネージャーとしてデータベースプラットフォームに携わり、MySQL・PostgreSQL・Oracle・MongoDB、SQLチューニング、AWS・Terraform・Pythonを専門分野としています。ゲーム・金融・ITサービス分野での経験をもとに、データベースとクラウドアーキテクチャについて解説しています。『オラ​​クル実務チューニング SQLパターン学習』と『Oracle Pro*C実務プロジェクト活用書』を出版し、AWS Summit 2018・2019と「データよ、遊ぼう」2020では、サーバーレス・データベースの選択・マルチデータベース戦略について発表しました。最近は、Bedrock LLMを利用したスロークエリの分析・チューニング提案、DBスペック算定の自動化、DBメタMCPサーバーとSlackボットを通じた照会フローを扱っています。開発者向けのデータベース自動化と、非開発者向けのAI業務活用について、各コースの対象者と目的に合わせた実習を通じて解説しています。AIの提案をそのまま適用するのではなく、結果の同一性・実行計画・観測条件を確認し、根拠が不足している場合は保留する判断基準を伝えています。会社の運用データや認証情報は講義資料に含めません。

もっと見る

カリキュラム

全体

40件 ∙ (4時間 52分)

講座資料:

授業資料
講座掲載日: 
最終更新日: 

受講レビュー

まだ十分な評価が集まっていない講座です。
ぜひ最初のレビューをお寄せください。

dorian05202988の他の講座

知識共有者の他の講座はこちら

似ている講座

同じ分野の他の講座を見てみましょう!

期間限定セール

¥56,320

20%

¥8,954