db
Database Management Systemsの18章。 マインドマップから再構成したまとめ 何? History of actions 。 ログの tail はオンメモりにあり定期的に disk へ。 Log Record Unique ID を振る。LSN(Log Sequence Number) prevLSN, transID, type 書かれるタイ…
Database Management Systemsの18章。 マインドマップから再構成したまとめ revercory manager は以下を維持 Atomicity コミットしないもの Undo Durability ARIES リカバリアルゴリズム 動き クラッシュ 起動 リカバリマネージャ起動 Analysis buffer pool …
独自の組み込み型定義 hige=# insert into person values(4); ERROR: column "social_no" is of type higeid but expression is of type integer HINT: You will need to rewrite or cast the expression. hige=# insert into person values(oid(4)); ERROR:…
PostgreSQL のサーバーサイドで組み込みの型を増やす方法を探る。 pg_type.h pg_type.h を見ると postgres.h contains the system type definitions とあるので postgres.h を見るべきか。 でも pg_type.h には pg_type カタログにデフォルトで存在する列が…
Database Management Systemsの17章。 マインドマップから再構成したまとめ 背景 Lock によるコントロールは悲観的 競合が少ないシステムでも Lock コストを払う必要がある 楽観的なコントロール 前提:多くのトランザクションは conflict なし Read: データ…
Auto-delete large objects when referencing row is deleted contrib/lo offers this functionality. を見てみよう。 contrib/lo にあるのは lo_manage という C 言語で書かれたトリガと lo 型。 CREATE TABLE image (title TEXT, raster lo); CREATE TRIGG…
環境は整ったので実験していく。 通常の select 1回 select * from person; リークしない 通常の insert 1回 リークしない drop table リークしない update リークしない create table リークしない CREATE TABLE person (social_no integer, name text, age…
Database Management Systemsの16章。 マインドマップから再構成したまとめ Concurrency Control in B+ Tree naive な実装ではページ単位でロックを行う root に近い場所で競合が発生する ではどうする? Search 基本は検索経路のページに Shared Lock をか…
再インストール apt-get で入れた valgrind は古かったのでソースから入れ直した。 余計なメッセージの抑制 PostgreSQL の起動時に ==27617== 32 bytes in 1 blocks are still reachable in loss record 3 of 15 ==27617== at 0x4C265AE: malloc (vg_replace…
valgrind については、C(++)言語: valgrindの使い方 を参照。 準備 % sudo apt-get install valgrind % sudo apt-get install libreadline-dev libz-dev PostgreSQL 8.3.6 のインストール。 % ./configure --prefix=/tmp/local % make % make check PostgreS…
前回紹介した cluster コマンド高速化パッチを読む。 HeapScanDesc hscan; IndexInfo *ii; ScanKey scanKeys; int i; Tuplesortstate *tuplesort; bool shouldfree; HeapScanDesc、IndexInfo, ScanKey, Tuplesortstate が初登場。 HeapScanDesc heap を読ん…
Database Management Systemsの16章。 マインドマップから再構成したまとめ デッドロックの検出 2つの方法 タイムアウト waits-for graph を維持 サイクルになったらデッドロック ロックの少ないものを abort デッドロックを防ぐ 2 つの方法 Conservative 2P…
Our CLUSTER implementation is pessimal のスレッドに cluster コマンドが遅い理由とパッチが投稿されている。 指摘されている問題点をまとめてみる。 CLUSTER コマンドの実装は遅い。とても遅い。 index を full scan して key 順に sort する random I/O …
MemoryContext とは? y-asaba日誌(2006-02-12)さんの解説が良くまとまっている。 heap のコピー copy_heap_data で heap のコピーが実行される。 入力は from Oid to Oid コピー順序を指定するための Index Oid の3 つ。 tuple descriptor を見て column 数…
Database Management Systemsの16章。 マインドマップから再構成したまとめ Lock の管理は Lock Manager が行う lock table を保持する Lock table key : Lock する Object の ID value : lock entry Lock entry そのロックを獲得しているトランザクション数…
swap_relation_files で何が swap されてテーブルの実体が入れ替わるかを見ていく。 Form_pg_class.relfilenode を swap することが何を意味するか。 Form_pg_class pg_class は system relation の relation 定義らしい。 Oid relfilenode; /* identifier o…
少し脱線してロックについて見て回る。 ロックが獲得されるのは ユーザーが明示的にロックする LOCK コマンド Query や transaction に付随して DBMS が裏でロックする の2つある。 ロックの種類とその意味は以下。 http://www.postgresql.jp/document/pg721…
Database Management Systemsの16章。 Serializablity と Recoverability が重要である事は理解できる。 また conflict equivalent conflict serializable strict でない 2PL の定義自体は理解できる。 それぞれがどう絡みあい、どのような意義があるのかが…
RelFileNode を見る RelFileNode は Relation に物理的にアクセスするために必要な情報を提供する。 RelFileNode は 3 つの Oid を保持 spcNode :テーブルスペース dbNode : データベース relNode : リレーション pg_class.relfilenode に相当 SMgrRelati…
heap とは? 結局 heap とはテーブルのデータがおかれる場所である以上の情報は見つけられなかった。heap ページと書かれているものもあるのでDatabase Management Systemsにあった通り「ファイル上の page に格納された unordered な tuple を保持するデー…
conflict equivalent と conflict serializable で落ちこぼれそうだ。ノートに描こう。
昨日の続き。 cluster_rel を見ていく。コメントから table を clster する 新しい clustered なテーブルを作り、関連する filenode を古いものと交換する このため新しいテーブルの OID は変更されない このおかげで GRANT や継承が壊れない。 効率的な bul…
Database Management Systemsの16章。 マインドマップから再構成したまとめ 背景 Serializable を実現したい Recoverable を実現したい Strict 2PL とは プロトコル 1. read/modify するなら shared/execlsive lock をリクエスト 2. トランザクション完了時…
4.ソース読みに慣れよう を参考に CLUSTER コマンドの行く末を見ていく。 おそらく goal は commands/cluster.c だと思うが、そこにいたるまで何か特別な事が起きていないかをチェックしよう。 DML 以外の SQL は ProcessUtility で処理されて、switch/case …
1000 万件のデータが入った以下の person テーブル。age は 0 - 99 まで 10 万件ずつ一様に分布。(同一ページに同一 age が固まらないように insert) test=# \d person Table "public.person" Column | Type | Modifiers -----------+---------+----------…
昨日の続き。サンプルデータをきっちり用意します。 100 万件だと少ないので 1000 万件にした。 age が 0-99 と 10万件ずつばらばらに分布するように insert した。つまり同じページに同じ age のものがあまり乗らないように。 次に SQL の Query 実行時間を…
昨日の続き。サンプルデータをきっちり用意します。 CREATE TABLE person ( social_no integer, name text, age integer, uri text, PRIMARY KEY (social_no) ); test-# \d person Table "public.person" Column | Type | Modifiers -----------+---------+-…
Database Management Systemsの16章。 マインドマップから再構成したまとめ スケジュールとは? list of actions(DBMS視点) read write commit abort concurrent interleave の動機 パフォーマンス I/O 待ちなどのスループット向上 長いトランザクションに…
CLUSTER コマンドの内部で何が起きているかソースを読んでみようと思う。 その準備段階として CLUSTER コマンドの詳細をマニュアルで読む 内部の動きを予想する 効果を調べる をやる。 マニュアル PostgreSQL: Documentation: Manuals: PostgreSQL 8.3: CLUS…
番外編。Skype の PL/Proxy の概要をまとめる。 PL/Proxy https://developer.skype.com/SkypeGarage/DbProjects/PlProxy 最新版 plproxy 2.0.8 は 2009年1月に出ている。アクティブ。BSD License。 何? PL/Proxy は組み込みの proxy 用言語。 field の hash…