ぱと隊長日誌

ブログ運用もエンジニアとしての生き方も模索中

データベース

PostgreSQL が空テーブルの統計情報を更新しないことによる実行計画への影響

概要 PostgreSQL の ANALYZE コマンドの説明に以下の記載があります。 解析しようとするテーブルが完全に空である場合、ANALYZEはそのテーブルに対する新しい解析情報を記録しません。 これまでの統計情報はすべて保持されます。 ANALYZE 「これまでの統計情…

PostgreSQL の ANALYZE コマンドをトランザクション内で実行した際の挙動

概要 PostgreSQL の ANALYZE コマンドはトランザクション内でも実行できます。また、トランザクション内でのそれまでの更新結果が統計情報に反映されます。ANALYZE コマンドをトランザクション内で実行した際の挙動について、検証と考察を行いました。 検証 …

RDB が ROLLBACK の処理コストを支払うタイミング

概要 Oracle Database で大量のデータを ROLLBACK するのには時間がかかります。これに対して PostgreSQL の ROLLBACK は一瞬で完了します。この差について検証と考察を行いました。そこで見えてきたのは ROLLBACK の処理コストを支払うタイミングの違いでし…

PostgreSQL は更新処理を ROLLBACK してもテーブルファイルに追記される

概要 PostgreSQL はテーブルに対する更新処理 (INSERT / UPDATE / DELETE) を行うと、テーブルファイルに追記されます(追記型アーキテクチャ)。これは最終的に COMMIT した場合に限らず、ROLLBACK された場合でも同様となります。本エントリではこの挙動を…

データベーススペシャリスト試験(令和2年度春期)勉強記録

始めに 令和2年度春期情報処理技術者試験及び情報処理安全確保支援士試験は新型コロナウイルス感染症拡大防止の観点から、試験実施を取りやめ(中止)となりました。当時、情報処理推進機構(IPA)に掲載されたお知らせ私はデータベーススペシャリスト試験を目…

PostgreSQLのトランザクション分離レベル毎のパフォーマンス測定(に失敗しました)

要約 PostgreSQL のベンチマーク試験コマンドである pgbench を利用して、トランザクション(TX)分離レベル毎のパフォーマンス測定にチャレンジしました。残念ながら、今回の検証手法でTX分離レベルのパフォーマンスを比較することに意味がないと言わざるを得…

pgbench の scale オプションを知る

要約 PostgreSQL のベンチマーク試験コマンドである pgbench の scale オプションは初期化処理で重要です。ベンチマーク実行時のオプションとしては有効ではないことに注意が必要です。 $ pgbench -s 4 -c 1 -j 1 -t 10000 testdb scale option ignored, usi…

Database Concurrency Control Papadimitriou 読書会 第16回 議論メモ

勉強会について Database Concurrency Control Papadimitriou 読会 第16回 - connpass の議論メモです。自分のメモをベースにまとめています。発言の聞き間違い、解釈違いの可能性があることをご了承ください。特記の無い引用は本で議論した箇所を示していま…

Database Concurrency Control Papadimitriou 読書会 第15回 議論メモ

勉強会について Database Concurrency Control Papadimitriou 読会 第15回 - connpass の議論メモです。自分のメモをベースにまとめています。発言の聞き間違い、解釈違いの可能性があることをご了承ください。特記の無い引用は本で議論した箇所を示していま…

PostgreSQLはトランザクション内で制約を一旦外して戻すことができる

はじめに こんな tweet を拝見しました。ポスグレはDDLもtxに入れられると聞いたけど、一旦制約をはずしてなんか操作して制約を戻す、もアトミックにできるのかなー。— デヴすぴスラ (@dev_supisula) November 20, 2019遅延制約(DEFERRABLE)を使えば制約を一…

集合に含まれない組み合わせをクエリで抽出する

今回のクエリの説明例として、データベーススペシャリスト平成27年春期 午前Ⅱ 問11 の問題・解答を引用します。<問題> 庭に訪れた野鳥の数を記録する"観測"表がある。観測のたびに通番を振り、鳥名と観測数を記録している。AVG関数を用いて鳥名別に野鳥の…

SQLの外部結合の実行ステップを理解する

はじめに プログラマのためのSQL 第4版(以下、「訳書」とする)「25.3.1 外部結合の歴史」には外部結合の実行ステップ及び実行例が記述されています。プログラマのためのSQL 第4版作者: ジョー・セルコ,Joe Celko,ミック出版社/メーカー: 翔泳社発売日: 201…

NTTDATATC2019「PostgreSQL 12 は ここがスゴイ!」聴講メモ

はじめに NTTデータ テクノロジーカンファレンス 2019(NTTデータ テクノロジーカンファレンス 2019 ~ 未来を創る NTT DATA の確かな技術力 ~) 【テクノロジー】PostgreSQL 12 は ここがスゴイ!~性能改善や pluggable storage engine などの新機能を徹…

Database Concurrency Control Papadimitriou 読書会 第7回 議論メモ

勉強会について Database Concurrency Control Papadimitriou 読書会 第7回 - connpass の議論メモです。 ※第6回は休講でした。自分のメモをベースにまとめています。発言の聞き間違い、解釈違いの可能性があることをご了承ください。特記の無い引用は本で議…

Database Concurrency Control Papadimitriou 読書会 第5回 議論メモ

勉強会について Database Concurrency Control Papadimitriou 読書会 第5回 - connpass の議論メモです。自分のメモをベースにまとめています。発言の聞き間違い、解釈違いの可能性があることをご了承ください。特記の無い引用は本で議論した箇所を示してい…

Database Concurrency Control Papadimitriou 読書会 第3回 議論メモ

勉強会について Database Concurrency Control Papadimitriou 読書会 第3回 - connpass の議論メモです。自分のメモをベースにまとめています。発言の聞き間違い、解釈違いの可能性があることをご了承ください。特記の無い引用は本で議論した箇所を示してい…

Database Concurrency Control Papadimitriou 読書会 第2回 議論メモ

勉強会について Database Concurrency Control Papadimitriou 読書会 第2回 - connpass の議論メモです。自分のメモをベースにまとめています。発言の聞き間違い、解釈違いの可能性があることをご了承ください。特記の無い引用は本で議論した箇所を示してい…

Database Concurrency Control Papadimitriou 読書会 第1回 議論メモ

勉強会について Database Concurrency Control Papadimitriou 読書会 第1回 - connpass の議論メモです。自分のメモをベースにまとめています。発言の聞き間違い、解釈違いの可能性があることをご了承ください。特記の無い引用は本で議論した箇所を示してい…

Transactional Information Systems 5章 MVCC勉強会 第九回 議論メモ

勉強会について Transactional Information Systems 5章 MVCC勉強会 第九回 - connpass の議論メモです。自分のメモをベースにまとめています。発言の聞き間違い、解釈違いの可能性があることをご了承ください。本エントリのTX本とは "Transactional Informa…

Transactional Information Systems 5章 MVCC勉強会 第八回 議論メモ

勉強会について Transactional Information Systems 5章 MVCC勉強会 第八回 - connpass の議論メモです。自分のメモをベースにまとめています。発言の聞き間違い、解釈違いの可能性があることをご了承ください。特記の無い引用は本で議論した箇所を示してい…

Transactional Information Systems 5章 MVCC勉強会 第七回 議論メモ

勉強会について Transactional Information Systems 5章 MVCC勉強会 第七回 - connpass の議論メモです。自分のメモをベースにまとめています。発言の聞き間違い、解釈違いの可能性があることをご了承ください。特記の無い引用は本で議論した箇所を示してい…

データベースはレコード・フィールドではなく、行・列と表現すべき

概要 Joe Celko はデータベースにおいて、行 (row)・列 (column) という用語を使うべきであり、レコード (record)・フィールド (field) という表現は適切でないと主張しています。これは論理的存在と物理的存在を分けるべきとの考えからです。 はじめに 先日…

MCSR の conflict が r-w (read-write) だけなのはなぜなのか?

はじめに MCSR (Multiversion Conflict Serializability) を知るには以下の本及び記事を読むのが最も理解に近づきます。Transactional Information Systems: Theory, Algorithms, and the Practice of Concurrency Control and Recovery (The Morgan Kaufman…

トランザクション理論における polygraph と History の VSR 判定

目的 トランザクション理論における polygraph とは何かを説明し、それを利用して History の VSR (View Serializability) 判定に利用できることを示します。 略語 本エントリ内では以下の略語を使います。 TX本:Transactional Information Systems Transac…

Transactional Information Systems 5章 MVCC勉強会 第二回 議論メモ

勉強会について Transactional Information Systems 5章 MVCC勉強会 第二回 の議論メモです。自分のメモをベースにまとめています。発言の聞き間違い、解釈違いの可能性があることをご了承ください。特記の無い引用は本で議論した箇所を示しています。Transa…

Transactional Information Systems 5章 MVCC勉強会 第一回 議論メモ

勉強会について Transactional Information Systems 5章 MVCC勉強会 第一回 の議論メモです。自分のメモをベースにまとめています。発言の聞き間違い、解釈違いの可能性があることをご了承ください。特記の無い引用は本で議論した箇所を示しています。Transa…

PostgreSQL の実行計画に現れる One-Time Filter の読み解き方

テーマ PostgreSQLの実行計画に現れる One-Time Filter とは、クエリ―実行時に1回だけ評価すればよいフィルターのことです。例えば、次のようなクエリーで現れます。 SELECT * FROM pg_type WHERE CURRENT_DATE = '2018-12-01'::date;このWHERE句はクエリー…

PostgreSQL にてWHERE句で=演算子の左辺・右辺に同じ列名を指定すると行数推定が不正確になることがある

はじめに WHERE句で=演算子の左辺・右辺に同じ列名を指定したクエリを考えます。 SELECT count(*) FROM seq WHERE value = value;これは以下のクエリと等価です。 SELECT count(*) FROM seq WHERE value IS NOT NULL;value = value で value = NULL であれ…

PostgreSQL のシリアライザブル分離レベルにおけるスナップショットのタイミング

PostgreSQL 10 のマニュアルには以下の記載があります。 13.2.2. リピータブルリード分離レベル リピータブルリードのトランザクション内の問い合わせは、トランザクション内の現在の文の開始時点ではなく、トランザクションの最初のトランザクション制御以…

トランザクションで w-w はなぜ Lost Update ではないか?

課題 db tech showcase Tokyo 2018 (db tech showcase Tokyo 2018 | db tech showcase) でノーチラステクノロジーズ 神林さんが以下のテーマで講演されました。 MVCCにおけるw-w/w-r/r-wのあり方とcommit orderのあり方の再検討~Sundial: Harmonizing Concu…