db

Log - crash recovery - Database Management Systems

Database Management Systemsの18章。 マインドマップから再構成したまとめ 何? History of actions 。 ログの tail はオンメモりにあり定期的に disk へ。 Log Record Unique ID を振る。LSN(Log Sequence Number) prevLSN, transID, type 書かれるタイ…

ARIES - crash recovery - Database Management Systems

Database Management Systemsの18章。 マインドマップから再構成したまとめ revercory manager は以下を維持 Atomicity コミットしないもの Undo Durability ARIES リカバリアルゴリズム 動き クラッシュ 起動 リカバリマネージャ起動 Analysis buffer pool …

23. large object の auto-delete を考える2 - PostgreSQL のソースコードを読む

db

独自の組み込み型定義 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:…

22. large object の auto-delete を考える - PostgreSQL のソースコードを読む

db

PostgreSQL のサーバーサイドで組み込みの型を増やす方法を探る。 pg_type.h pg_type.h を見ると postgres.h contains the system type definitions とあるので postgres.h を見るべきか。 でも pg_type.h には pg_type カタログにデフォルトで存在する列が…

Concurrency Control Without Locking - Database Management Systems

Database Management Systemsの17章。 マインドマップから再構成したまとめ 背景 Lock によるコントロールは悲観的 競合が少ないシステムでも Lock コストを払う必要がある 楽観的なコントロール 前提:多くのトランザクションは conflict なし Read: データ…

21. large object の auto-delete を考える - PostgreSQL のソースコードを読む

db

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…

20. valgrind で PostgreSQL のメモリリークをみつけよう - PostgreSQL のソースコードを読む

db

環境は整ったので実験していく。 通常の select 1回 select * from person; リークしない 通常の insert 1回 リークしない drop table リークしない update リークしない create table リークしない CREATE TABLE person (social_no integer, name text, age…

Concurrency Control in B+ Tree - Database Management Systems

Database Management Systemsの16章。 マインドマップから再構成したまとめ Concurrency Control in B+ Tree naive な実装ではページ単位でロックを行う root に近い場所で競合が発生する ではどうする? Search 基本は検索経路のページに Shared Lock をか…

19. valgrind で PostgreSQL のメモリリークをみつけよう - PostgreSQL のソースコードを読む

db

再インストール 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…

18. valgrind で PostgreSQL のメモリリークをみつけよう - PostgreSQL のソースコードを読む

db

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…

17. clustered のコードを読む9 - PostgreSQL のソースコードを読む

db

前回紹介した cluster コマンド高速化パッチを読む。 HeapScanDesc hscan; IndexInfo *ii; ScanKey scanKeys; int i; Tuplesortstate *tuplesort; bool shouldfree; HeapScanDesc、IndexInfo, ScanKey, Tuplesortstate が初登場。 HeapScanDesc heap を読ん…

Dealing with Deadlocks - Database Management Systems

Database Management Systemsの16章。 マインドマップから再構成したまとめ デッドロックの検出 2つの方法 タイムアウト waits-for graph を維持 サイクルになったらデッドロック ロックの少ないものを abort デッドロックを防ぐ 2 つの方法 Conservative 2P…

16. clustered のコードを読む8 - PostgreSQL のソースコードを読む

db

Our CLUSTER implementation is pessimal のスレッドに cluster コマンドが遅い理由とパッチが投稿されている。 指摘されている問題点をまとめてみる。 CLUSTER コマンドの実装は遅い。とても遅い。 index を full scan して key 順に sort する random I/O …

15. clustered のコードを読む7 - PostgreSQL のソースコードを読む

db

MemoryContext とは? y-asaba日誌(2006-02-12)さんの解説が良くまとまっている。 heap のコピー copy_heap_data で heap のコピーが実行される。 入力は from Oid to Oid コピー順序を指定するための Index Oid の3 つ。 tuple descriptor を見て column 数…

Introduction to Lock Management and Lock Conversions - Database Management Systems

Database Management Systemsの16章。 マインドマップから再構成したまとめ Lock の管理は Lock Manager が行う lock table を保持する Lock table key : Lock する Object の ID value : lock entry Lock entry そのロックを獲得しているトランザクション数…

14. clustered のコードを読む6 - PostgreSQL のソースコードを読む

db

swap_relation_files で何が swap されてテーブルの実体が入れ替わるかを見ていく。 Form_pg_class.relfilenode を swap することが何を意味するか。 Form_pg_class pg_class は system relation の relation 定義らしい。 Oid relfilenode; /* identifier o…

13. clustered のコードを読む5 - PostgreSQL のソースコードを読む

db

少し脱線してロックについて見て回る。 ロックが獲得されるのは ユーザーが明示的にロックする LOCK コマンド Query や transaction に付随して DBMS が裏でロックする の2つある。 ロックの種類とその意味は以下。 http://www.postgresql.jp/document/pg721…

2PL, Serializablity, and Recoverability - Database Management Systems

Database Management Systemsの16章。 Serializablity と Recoverability が重要である事は理解できる。 また conflict equivalent conflict serializable strict でない 2PL の定義自体は理解できる。 それぞれがどう絡みあい、どのような意義があるのかが…

12. clustered のコードを読む4 - PostgreSQL のソースコードを読む

db

RelFileNode を見る RelFileNode は Relation に物理的にアクセスするために必要な情報を提供する。 RelFileNode は 3 つの Oid を保持 spcNode :テーブルスペース dbNode : データベース relNode : リレーション pg_class.relfilenode に相当 SMgrRelati…

11. clustered のコードを読む3 - PostgreSQL のソースコードを読む

db

heap とは? 結局 heap とはテーブルのデータがおかれる場所である以上の情報は見つけられなかった。heap ページと書かれているものもあるのでDatabase Management Systemsにあった通り「ファイル上の page に格納された unordered な tuple を保持するデー…

落ちこぼれる

db

conflict equivalent と conflict serializable で落ちこぼれそうだ。ノートに描こう。

10. clustered のコードを読む2 - PostgreSQL のソースコードを読む

db

昨日の続き。 cluster_rel を見ていく。コメントから table を clster する 新しい clustered なテーブルを作り、関連する filenode を古いものと交換する このため新しいテーブルの OID は変更されない このおかげで GRANT や継承が壊れない。 効率的な bul…

Lock-Based Concurrency Control - Database Management Systems

Database Management Systemsの16章。 マインドマップから再構成したまとめ 背景 Serializable を実現したい Recoverable を実現したい Strict 2PL とは プロトコル 1. read/modify するなら shared/execlsive lock をリクエスト 2. トランザクション完了時…

9. clustered のコードを読む - PostgreSQL のソースコードを読む

db

4.ソース読みに慣れよう を参考に CLUSTER コマンドの行く末を見ていく。 おそらく goal は commands/cluster.c だと思うが、そこにいたるまで何か特別な事が起きていないかをチェックしよう。 DML 以外の SQL は ProcessUtility で処理されて、switch/case …

8. clustered index を作って比較 - PostgreSQL のソースコードを読む

db

1000 万件のデータが入った以下の person テーブル。age は 0 - 99 まで 10 万件ずつ一様に分布。(同一ページに同一 age が固まらないように insert) test=# \d person Table "public.person" Column | Type | Modifiers -----------+---------+----------…

7. clustered index の威力を知るための準備2 - PostgreSQL のソースコードを読む

db

昨日の続き。サンプルデータをきっちり用意します。 100 万件だと少ないので 1000 万件にした。 age が 0-99 と 10万件ずつばらばらに分布するように insert した。つまり同じページに同じ age のものがあまり乗らないように。 次に SQL の Query 実行時間を…

6. clustered index の威力を知るための準備 - PostgreSQL のソースコードを読む

db

昨日の続き。サンプルデータをきっちり用意します。 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 -----------+---------+-…

Transactions and Schedules - Database Management Systems

Database Management Systemsの16章。 マインドマップから再構成したまとめ スケジュールとは? list of actions(DBMS視点) read write commit abort concurrent interleave の動機 パフォーマンス I/O 待ちなどのスループット向上 長いトランザクションに…

5.次の課題は CLUSTER コマンド - PostgreSQL のソースコードを読む

db

CLUSTER コマンドの内部で何が起きているかソースを読んでみようと思う。 その準備段階として CLUSTER コマンドの詳細をマニュアルで読む 内部の動きを予想する 効果を調べる をやる。 マニュアル PostgreSQL: Documentation: Manuals: PostgreSQL 8.3: CLUS…

5.PL/Proxy- PostgreSQL のソースコードを読む

db

番外編。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…