タグ

ブックマーク / www.nminoru.jp/~nminoru (6)

  • PostgreSQL のトランザクション & MVCC & スナップショットの仕組み

    このページでは PostgreSQL のトランザクション(Transaction)、Multi Version Concurrency Control(MVCC)、スナップショット(Snapshot)の仕組みを説明する。 PostgreSQL の他の記事へのインデックスはここ。 更新履歴 (2016.04.30) 作成。 (2016.09.16) データ定義言語(DDL)のトランザクションを追加。 (2016.09.28) データ定義言語(DDL)の MVCC アンセーフ動作を追加。 (2017.04.07) Combo Command ID の説明が間違っているのを修正。 目次 1. はじめに 2. トランザクション分離レベル(Transaction Isolation Level) 3. Serializable 以外の分離レベルの実現方法 3.1 トランザクションとと可視性(Visi

  • PostgreSQL の覚え書きのインデックス

    PostgreSQL の内部構造の解説 基データ型とタプルの扱い テーブルとブロックのデータ構造 メモリ管理関数の解説 排他制御の概要 プランツリーの概要 プラン最適化の解説 クエリー実行の解説 トランザクション & MVCC & スナップショットの仕組み エクステンションの開発方法 エクステンションの作成方法(Makefile、テスト、リグレッション) 集合を返すユーザー定義関数の書き方 バックグラウンドワーカー(Background Worker)の使い方 外部データラッパー(Foreign Data Wrapper)を作成する カスタムスキャン(Custom Scan)を作成する 独自の手続き言語を作成する 独自のインデックスを作成する コーディングスタイル

  • PostgreSQL のメモリ管理関数の解説

    このページでは PostgreSQL のエクステンション(extension)を開発する人向けに、プログラム中で用いるメモリ管理関数を紹介する。 PostgreSQL の他の記事へのインデックスはここ。 更新履歴 (2017.03.26) 作成。 (2017.04.02) 共有メモリの利用方法を追加。 目次 1. はじめに 2. MemoryContext を使ったメモリ・アロケーター 2.1 Memory Context API 2.1.1 AllocSetContextCreate 2.1.2 MemoryContext からのメモリ割り当て・解放 2.1.3 MemoryContext の解放・削除 2.2 Out-of-memory エラーの捕捉 2.3 既定のメモリ・コンテキスト 3. 共有メモリの利用方法 コメント 1. はじめに PostgreSQL の C 言語で記述するユ

  • PostgreSQL のテーブルとブロックのデータ構造

    このページでは PostgreSQL のエクステンション(extension)を開発する人向けに、PostgreSQL のテーブルやインデックスを構成するブロックまたはページの内部構造について紹介する。 PostgreSQL の他の記事へのインデックスはここ。 更新履歴 (2017.03.01) 作成。 (2017.03.04) ヒープ操作、システムカタログ、Relation cache entry の説明を追加。 目次 1. はじめに 1.1 PostgreSQL データの構成要素 1.2 Object Identifier (OID) 1.3 データディレクトリ 2. リレーション(Relation) 2.1 リレーションの概要 2.2 データディレクトリ中のリレーションの実体 2.3 リレーションの構造 2.4 API を使った操作 2.4.1 Relation Cache Entr

  • PostgreSQL プラン・ツリーの概要

    このページでは PostgreSQL のプラン情報を保持するノード・ツリーの概略を解説する。 また PostgreSQL の生成するプランのノード・ツリー情報を可視化するために、Graphviz の dot ファイルとして書き出すエクステンション pg_plan_tree_dot を紹介する。 PostgreSQL 体の改造やエクステンションを作成するために、プランを変更しようとする人向けの記事である。 現在は pg_plan_tree_dot は Linux の PostgreSQL 9.x 上でだけ動作する。 PostgreSQL の他の記事へのインデックスはここ。 更新履歴 (2014.11.30) 作成。 (2015.12.13) エクスプレッション・ノードとプラン・ノードを追加 (2016.09.24) Join と TargetEntry の説明を追加 (2017.01.07

  • ビットを数える・探すアルゴリズム

    作成日:2004.05.04 修正日:2012.09.01 このページは 2003年の9/11、9/28 の日記をまとめて作成。 はじめに PowerPC 系や Alpha などには population count と呼ばれるレジスタ中の立っているビット数を数える命令が実装されている。 集合演算を行うライブラリを実装したい場合などに重宝しそうな命令である。 職場でこの population count 命令について話をしているうちにビットカウント操作をハードウェアで実装するのは得なのか?という点が議論になった。 CPU の設計をできるだけシンプルにするためには、複雑で使用頻度の低い命令は極力減らした方がよい。 例えば SPARC は命令セット中にビットカウント演算があるが、CPU 内には実装しないという方針をとっている(population 命令を実行すると不正命令例外が発生し、それを

    y_uuki
    y_uuki 2014/05/27
    POPCNT命令
  • 1