2019-01-01から1年間の記事一覧

CMU 15-445 Multi-Version Concurrency Control

MVCC は複数バージョンを持つことで、writer は reader をブロックせず、reader は writer をブロックしない writer がロックを取っていても reader は前のバージョンを読めば良いのでブロックされない 逆に read していても writer は新しいバージョンを作…

CMU 15-445 Timestamp Ordering Concurrency Control

Timestamp Ordering Concurrency Control optimistic な方法 2PL がロックを使ってserializableになるのに対して、serializableでないならアボートしてリトライする トランザクションの実行時にタイムスタンプをふって、自分が触ったオブジェクトが、より新…

EFI system partition を拡張する

EFI system partition(ESP) の容量が足りなくて、ファームウェアアップデートが失敗したので拡張した。 今回は、ESP の後ろに別のパーティションが存在し、そのままではパーティションのサイズ変更ができなかった。 そのため、ESP を空き領域に作り直して内…

CMU 15-445 Two-Phase Locking Concurrency Control

dependency graph はスケジュールを与えられたときにserializeかどうかを判定する方法 クエリをserializeに実行するにはどうするか? lock を使う 2 Phase Locking grow phaseとshrink phaseがある 前者ではロックを取ること、後者は開放することしかできな…

CMU 15-445 Concurrency Control Theory

トランザクションの性質としてACIDがある 一番簡単な方法はシングルスレッドで実行して、データベースファイルをコピーして、書き換えてスワップすること Aを守る方法としては shadow paging と logging がある schedule について serial schedule とはトラ…

The Ubiquitous B-Treeを読んだ

B+-Treeのデリート時のロジックがいまいちわからなかったので、B+-Treeに最初にフォーマルに言及したというこの論文を読んだ。 この論文自体はサーベイみたいな感じで、B-Treeのアルゴリズムやそのバリエーションなどを記載している。 複数ユーザーが平行に…

CMU 15-445 Query Optimization

query rewrite rule based optimizer 一般に可能なクエリの書き換えを行う selection は可能な限り先に行うと上で扱うデータ量が減る cost based optimizer 実データをもとにクエリプランを考える データの分布を一様分布として扱うと楽だけど実際はそんなこ…

CMU 15-445 Joins

特にequal joinを扱う N =num of outer table blocks, M = inner nested loop join simple nested loop join outer table のタプルごとにinterのblockを舐める block nested loop join outer tableのblockごとにinterのblockを舐める 仮にouterを保持してお…

CMU 15-445 Sorting + Aggregationsのメモ

データがメモリに収まらない場合を想定する Sorting 結果セットをページ内でソートしてディスクに書く 2つのソート済みページを取り出して比較してページを埋めて、溢れたらディスクに書く 利用するページは入力2つ、出力1つで3ページしか使わない Aggregati…

CMU 15-445 Query Processingのメモ

processing model iterator/volcano model タプルを一つ一つ返すモデル materialization model 一気にデータを返すモデル vectorized model バッチでデータを返すモデル optimization zone map page内のタプルにアグリゲーションを予め行ったページを記録し…

CMU 15-445 Hash Tablesのメモ

ここ最近のRDBはhashに次のものを使っている murmurhash cityhash farmhash clhash static hashing linear probe hashing コリジョンがあればその後ろの空きスロットを使う robin hood hashing 自分が入りたかったところからいくつ追い出されたかの値を持っ…

CMU 15-445 Buffer Poolsのメモ

buffer poolの要素をframeという in memory heap file の page がそのままメモリに乗ったもの page table は in memory データ構造で page id から frame を参照するもの 複数スレッドから触るので適切に pin する コンテンションになりやすいのでよく分割さ…

CMU 15-445 Database Storage Iのメモ

ハードウェアページは典型的には4kb この単位で書き込む場合、all or nothingで書ける DBのファイルはheap fileをよく使う ページ単位で読み書きできるAPI heap fileの実装はpage dictionaryをよく使う link listだと効率が悪い page layoutはslotted pageを…