[db tech showcase Tokyo 2017] E14: 進化を続けるPostgreSQL ~Linuxの成功からみるPostgreSQLの将...
大分たってしまったけど、ようやく時間が空いたので、db tech showcase Tokyo 2016 http://enterprisezine.jp/dbonline/detail/8466 で話した内容を記録的に書いておく。あとはSILOの解説を特に自分用に論文の4章を中心に整理しておく。あとはついでに自分の思うところも記す。 ・SILO 元論文はこちら、執筆陣はMITのLiskov一派とEddie Kohler 現在のDB研究の第一線のメンバー。 http://people.csail.mit.edu/stephentu/papers/silo.pdf SILO以降、大きくDBベースのアーキテクチャの考え方は変わりました。ほとんど全ての分散系OLTPはSILOを程度の大小はあるとはいえ、意識していると言っても過言ではないでしょう。前世代ではほぼ「空想か?」ぐらいの扱いだった分散t
1.目的 今後の分散DBでは、前提が分散ノードから分散コアに主体が移る。ムーアの法則の限界は、メニーコア化とノードの高密度化を推し進める。分散のノードではリードロックの問題とノード分散の相性の良さでSnapshot Isolation(以下SI)がほぼ前提であったが、RDMA等のハードウェアの技術革新でレイテンシーが改善されるのであれば、SILOのような(表面上は)単ノードのS2PLの改良版も有りになってくる。 そうなってくると理論的な背景も、SIを前提という話ではなくて、通常のConflict Serializability (以下CSR)も頭に置きながら話をおっていかないと理解が厳しい。 SI「だけ」であれば、なんとなくまぁセオリーでr-w依存での循環グラフだよね、ということを前提において議論を追いかけて、r-w依存はあとで復習して調べとけばなんとかやり過ごせる。が、通常のCSRも混線
なかったらINSERTしたいし、あるならロック取りたいやん? from ichirin2501 www.slideshare.net 出来事 @ichirin2501 とりあえず何も考えずこの前のロックの話をSlideshareにあげてくれ!!— 柴崎優季 (@shiba_yu36) 2015, 8月 22 はじめに これは先日の社内勉強会で発表したもので、MySQLで特定の問題を解決したいときのノウハウ話です。特定の問題とは、アプリを書いてると「データがなかったINSERTしたい、あるなら排他ロックしつつ取得したい」という要望があったりします。例えば、あるユーザーアクションで初期値もパラメーターで渡されるケースで、データがないならそのままINSERT、既にデータがあるなら取得して状態に依存して更新処理を行いたい場合などです。見かけのロジックは単純に見えますが、MySQLでこれを実現しよう
[2015/08/10 12:47 追記]なんか一部のOS Xで動かないので調査中です…… [2015/08/11 10:15 追記]v1.1.0で直っています setlock は daemontools に同梱されているコマンドラインツールで,非常に便利かつ強力なツールであることが知られています.この件については以下の記事などが参考になります. Kazuho@Cybozu Labs: setlock を使って cron をぶんまわす方法 Linux - setlockを使って簡単に多重起動防止機能を実装する - Qiita そしてこの度,その setlock を golang で移植した go-setlock というものをこさえました. go-setlock は setlock と同等の機能を持っており,かつ以下の様なメリットが挙げられます. daemontools から独立しているので
MySQLで整合性のあるバックアップを取得するのに、 "FLUSH TABLES WITH READ LOCK"でテーブルロック バックアップ処理(mysqldumpやスナップショット) "UNLOCK TABLES"でロック解除 みたいなスクリプトを実行していたが、"FLUSH TABLES WITH READ LOCK"って必ず数ミリ秒みたいなレベルでロックできるのかなと疑問に思った。 結構時間のかかるクエリが処理されていたりすると、すぐにロックできないんではないかと思った。 ちょっと調べてみると、やはりすぐにロックされない可能性もあるようだ。*1 FLUSH TABLES WITH READ LOCKの速度について ということで、"FLUSH TABLES WITH READ LOCK"後に、以下のような確認処理を追加した。 "SHOW PROCESSLIST"を実行して、"FLUS
MySQLのロックについて JPOUG> SET EVENTS 20140907 2014/09/07 平塚 貞夫 1 Revision 2 自己紹介 • DBエンジニアをやっています。専門はOracle DatabaseとMySQL。 • オープンソースソフトウェアの導入支援をしています。 • 仕事の割合はOracle:MySQL:PostgreSQL=1:2:7くらいです。 • Twitter:@sh2nd • はてな:sh2 • • 写真は実家で飼っているミニチュアダックスのオス、アトムです。 2 本日のお題 3 想定外のデッドロック • MySQLのInnoDBストレージエンジンに対して、2つのトランザクション を以下の順番で実行するとデッドロックが発生します。 • このデッドロックの発生メカニズムを理解するために、InnoDBのロック アーキテクチャについて確認していきます。 4
スナップショットを使えばとある瞬間のディスクやファイルシステムのデータをいつでも後から参照することができる。しかもスナップショットの作成は一瞬だ。スナップショット機能を活用すれば最強のオンラインバックアップソリューションが出来るだろう。 しかし、スナップショットでバックアップを取るなんて危険な操作じゃないのか?!と不安に思われる方もいらっしゃるかも知れない。MySQL Serverが稼働中にいきなりデータだけをとってくるのだから、そのような疑問を持たれるのは頷ける。しかし仕組みさえ分かればスナップショットによるバックアップは怖くないということが分かるはずだ。そこで、まずはスナップショットによるバックアップの仕組みについて説明する。スナップショットを取る際の要件は次の通りである。 全てのデータを単一のボリュームに置くこと。つまり、一回のスナップショット操作でバックアップが取れることだ。 ディ
しばらく前に作って書きそびれていましたが、Yokohama.pm #10 でLTしたのでエントリもあげます。 Perl版 https://metacpan.org/release/Redis-Setlock Go版 http://fujiwara.github.io/go-redis-setlock/ LTのスライドはこちら ⇒ Redis-Setlockを書いたはなし なにをするもの? 「setlockコマンドのロック処理をRedisサーバで行うもの」です。 setlockはflockを使ってロックを獲得したら引数に渡されたコマンドをexecする、daemontools付属のwrapperコマンドで、cronでコマンド実行するときなど多重実行を制御する場合に重宝します。 flockだとホストをまたいだロック処理が行えないため、その部分をRedisを使った排他制御に置き換えたものを書いてみ
Linux のシステムコールである write(2) の ドキュメントを読むと Atomic/non-atomic: A write is atomic if the whole amount written in one operation is not interleaved with data from any other process. This is useful when there are multiple writers sending data to a single reader. Applications need to know how large a write request can be expected to be performed atomically. This maximum is called {PIPE_BUF}. This volume of
追記 2013-03-04 [twitter:@dankogai] さんにも言及されてました>< 404 Blog Not Found:perl - soloで任意のコマンドを期限付きで排他実行する 追記 2013-03-01 つづきを書きました。 続・プロセス間の期限付き排他ロック - (ひ)メモ 追記 2013-02-27 コメント欄でのやりとりの通り、穴がある(クリティカルセクションに複数プロセスが突入する可能性がある)のでちょっと出直してきます!! やりたいこと プロセス間の排他的実行を制御したい 一定時間経過したら実行できるようにしたい 例えば、フェイルオーバーを実行するスクリプトは、何度も実行できるとフェイルオーバー/バックを繰り返してフラップするので、一度フェイルオーバーしたら一定時間は実行できないようにしたい 実装 シンボリックリンクを使って排他制御する 期限切れは、シンボ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く