ぱと隊長日誌

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

データベース

PostgreSQL は "soft edge" によるデッドロックを回避することがある

PostgreSQL は "soft edge" があるときに、ロック取得順序を入れ替えてデッドロックの解消を試みます。

pg_hba.conf の変更は確立済みのコネクションに影響しない

pg_hba.conf の設定は接続を試みるタイミングで検査されます。確立済みの接続には影響しません。

PostgreSQL 内部での effective_cache_size の活用方法

PostgreSQL 内部で effective_cache_size をどのように活用しているのか(もしくは活用していないのか)を確認します。

PostgreSQL の ANALYZE は pg_class 更新でトランザクション・セマンティクスに従わない

PostgreSQL の ANALYZE は pg_class 更新でトランザクション・セマンティクスに従いません。今回の記事ではこれを実験で検証します。

PostgreSQL インデックス肥大化とインデックスコストへの影響(再モデル化)

PostgreSQL インデックス肥大化によるインデックスコストへの影響をモデル化しました。また、実装の調査も行っています。

VS Code と GDB で PostgreSQL をデバッグする

VS Code + GDB でリモートデバッグする手順について PostgreSQL を題材に解説します。

PostgreSQL のビルドで configure オプション変更時は make distclean を実行すべき

PostgreSQL の configure オプションを変更して再ビルドする際には make distclean を実行すべきです。

Hyper-V のルートスケジューラでは複数 CPU 動作時に大きく性能劣化することがあるのかも

Windows 10 の Hyper-V でベンチマークを測定していると、複数 CPU 動作時に大きく性能劣化しました。これは「ルートスケジューラ」に原因があるのかもしれません。

SQL の COUNT(*) と COUNT(1) の結果は同じ

SQL の COUNT(*) と COUNT(1) は同じ結果が得られます。また、COUNT() 内の定数が何であっても結果は同じです。

PostgreSQL のボトルネック調査に待機イベントを活用する

PostgreSQL の pg_stat_activity ビューで待機イベントの情報を収集すると、ボトルネック調査に役立つかもしれません。

PostgreSQL の結合テーブル数と計画時間の関係

PostgreSQL の結合テーブル数と計画時間の関係を調べました。計画時間は join_collapse_limit, geqo_threshold といったパラメータの影響を受けることが分かりました。

PostgreSQL の join_collapse_limit がプランナに与える影響

PostgreSQL の join_collapse_limit がプランナに与える影響を実験から推測しました。平坦化の概念をつかむことができます。

PostgreSQL の deadlock_timeout を見直す優先度はどの程度か?

PostgreSQL のデッドロック検出待機時間パラメータである deadlock_timeout の見直しに、どれほどの優先度で取組むべきなのかを、デッドロック検出処理の仕組みの観点から調査しました。

OSS-DB Gold 合格までの道のり (2022/08/20)

OSS-DB Gold Ver.2.0 を合格することができました。教材・勉強方法・振り返りなどをまとめました。

PostgreSQL 高度技術者育成テキスト 摸擬問題集 OSS-DB Gold Ver.2.0 差分と誤記まとめ

「PostgreSQL 高度技術者育成テキスト」内の摸擬問題集に対し、OSS-DB Gold Ver.2.0 をベースとした差分と誤記の修正をまとめました。

PostgreSQL の式インデックスも統計情報の収集対象となる

PostgreSQL の式インデックス(関数インデックス)もテーブルと同様に統計情報の収集対象です。よって、式インデックス作成後に ANALYZE を実行しないと、正しく活用されません。また、pg_stats ビューは式インデックスの統計情報も参照できます。

OSS-DB Silver 合格までの道のり (2022/06/11)

OSS-DB Silver Ver.2.0 を受験し、無事に合格することができました。今回の挑戦に向けて、どのような準備を行ったかまとめます。

PostgreSQL のプリペアド文で汎用的な実行計画を選択するタイミング

PostgreSQL ではプリペアド文を繰り返し実行していると、汎用的な実行計画を作成することがあります。この実行計画の切り替えがいつ行われるのかを調べました。

DEIM2022 「近代的トランザクション処理技法」聴講メモ

DEIM2022 「近代的トランザクション処理技法」の聴講メモです。メモは口頭説明を中心にまとめています。資料を併せてご参照ください。

PostgreSQL の一時バッファはセッションを終了するまで解放されない

PostgreSQL の一時バッファの開放はセッション終了時となります。一時テーブルの削除タイミングやトランザクションの終了タイミングではありません。

PostgreSQL は統計情報の度数分布と実際の最小値・最大値との乖離を補正して行数推定することがある

PostgreSQL には統計情報の度数分布と実際の最小値・最大値が乖離した場合の影響を抑える機能があります。この機能によって実行計画の推定行数がどのように変化するかを検証しました。

PostgreSQL で指数表記の暗黙的キャストが意図しない型になることがある

PostgreSQL でも指数表記を解釈してくれます。ですが、指数表記の暗黙的キャストが意図した型になるとは限らないことに注意が必要です。

PostgreSQL のエクゼキュータによるノードの処理順

PostgreSQL のエクゼキュータによるノードの処理順はマニュアルに解説されています。この説明をかみ砕いて説明します。

PostgreSQL の auto_explain のパフォーマンスへの影響

PostgreSQL の auto_explain モジュールを有効化することでパフォーマンスにどの程度影響を与えるのか、検証を行いました。

PostgreSQL の EXPLAIN コマンドの TIMING パラメータのオーバーヘッド

本記事では PostgreSQL の EXPLAIN コマンドの TIMING パラメータのオーバーヘッドがどこから生じているかを解説します。

SELECT-INSERT で SELECT に ORDER BY を指定するとソートが実行される

リレーショナルモデルは集合を扱い、行の順序を意識しないはずです。なのになぜ SELECT-INSERT の SELECT で ORDER BY できるのか…という疑問と検証を書き留めています。

PostgreSQL のオブジェクト識別子データ型(OID 別名型)と使い方

オブジェクト識別子データ型と使い方を中心に解説します。最後にその実装にも踏み込んで解説をします。

PostgreSQL の TEMPORARY TABLE と UNLOGGED TABLE にパフォーマンスの差異はあるか?

PostgreSQL にはテーブルの種類として TEMPORARY と UNLOGGED があります。この2つはワークテーブルとしてしばしば使われます。シンプルな条件下では UNLOGGED より TEMPORARY のほうがパフォーマンスが良い結果となりました。

PostgreSQL の実行計画で Hash のコストは Hash Join に含まれる

PostgreSQL の実行計画で Hash ノードはコストが 0 として計算されていますが、ハッシュ処理のコストは Hash Join ノードに含まれています。

PostgreSQL のインデックス肥大化と実行計画のコストへの影響

PostgreSQL のインデックスが肥大化した状況では実行計画のコスト計算に影響することがあります。これは適切な実行計画を選択する妨げとなるかもしれません。