ブックマーク / rabbitfoot141.hatenablog.com (25)

  • MySQL にいい感じにコントリビュートする方法(非公式) - それが僕には楽しかったんです。

    この記事は MySQLのカレンダー | Advent Calendar 2023 - Qiita 6 日目の記事です。 はじめに 補足 コントリビュートしようぜ 登場人物 Oracle Profile の作成 OCA への署名 魂のコントリビュート 追記 2023/12/06 19:34 無事に取り込まれると… git log に名前が残る ブログで紹介してもらえる おわりに はじめに どうも、この時期になるといつかのメリークリスマスを無限ループするけんつです。 世間の MySQLer を生業とする皆さん、唐突に MySQL をビルドしたくなったり急に徹夜でデバッグしたくなることが良くあると思いますが「なんだこれは」という挙動に遭遇することも稀によくあると思います。 例えば、何故かビルドがどこかのバージョンからすんなり通らなくなったり、どこかのバージョンから急にクソデカトランザクションの

    MySQL にいい感じにコントリビュートする方法(非公式) - それが僕には楽しかったんです。
    kawasin73
    kawasin73 2023/12/07
  • Handler と SELECT と時々 WHERE 句 - それが僕には楽しかったんです。

    はじめに 環境 前提 さぁデバッグタイムだ 確実に発生している事実 いざ server レイヤーダイブ まとめ おわりに はじめに どうも、最近どうにか出費を抑えようとしているけんつです。今回は自作ストレージエンジンをやっていて気になった SELECT と WHERE が組み合わさったときの挙動について書こうかなと思います。自作ストレージエンジンを前提にしているので、InnoDB などはこの限りではない可能性が十分にあります。 環境 MySQL 8.0.33 PopOS 22.04 自作ストレージエンジン 前提 また例によって mtr を使ってクエリを実行しながらデバッグする。mtr にわせる test, result ファイルは以下の通り。やっていることは単純で2つレコードを追加して、条件にマッチするレコードが1つ返ってくるというもの。 CREATE TABLE t1(id INT)E

    Handler と SELECT と時々 WHERE 句 - それが僕には楽しかったんです。
    kawasin73
    kawasin73 2023/11/11
  • UDF と char * と時々 --binary-as-hex - それが僕には楽しかったんです。

    はじめに mysql-ulid-plugin UDF をインストールする ハマりどころ 初期化関数の戻り値問題 char * で返した値が何故か hex で表示される おわりに 読むと幸せになれる はじめに 最近 UUID に頭を悩ませまくった結果、ULID なるいいものがあると知ったので気分転換がてら MySQL の UDF (今で言うところの Loadable Function) を実装している。UDF を書くこと自体が初めてだったので、引っかかったところを後の自分のために残す。 mysql-ulid-plugin github.com 今作りかけているものがこれ。実際に動かしてみた感じでは、Timestamp の変換は恐らく上手くいっているが乱数部分が全然変わっていない雰囲気を感じるので後でどうにかする。 UDF をインストールする ビルドした前提で話す。 plugin dir 以下

    UDF と char * と時々 --binary-as-hex - それが僕には楽しかったんです。
    kawasin73
    kawasin73 2023/07/12
  • JVM における G1GC とヒープの雑な話 - それが僕には楽しかったんです。

    はじめに ヒープと GC の基 ヒープの構造 雑な GC の基 G1GC 概要 仕組み Young 領域に対する GC コンカレントサイクル 混合 GC Major GC が実行される可能性のある場合 おわりに 参考文献 はじめに どうも、けんつです。GW は特に何もせず映画とチェスに勤しんでいたら気がついた時には連休は既に過去のものとなっていました。 やるやる詐欺をしてきた JVM の G1GC について基的なことなどをまとめていこうと思い立ったので書きます。ヒープではない領域の話については以前書いたので割愛。 ヒープと GC の基 ヒープの構造 よく言われるやつだけど、ヒープは以下のような構造になっている。*1*2 雑な GC の基 この辺を雑に書くと、オブジェクトが生成された場合はまず Eden 領域に配置されて、そこから Minor GC によって Survivor 領域

    JVM における G1GC とヒープの雑な話 - それが僕には楽しかったんです。
    kawasin73
    kawasin73 2021/05/15
  • 私のコード履歴書 - それが僕には楽しかったんです。

    satoru-takeuchi.hatenablog.com ↑この記事が Twitter の TL に流れてたから読んでみたら面白かったのでコードを書き始めた7年前*1から振り返りながら書いてみる。 コードが残っていたりするものは載せていきたい。思い出せる限りなるべく時系列順で書いていく。多少前後する。 「独学でプログラミングを始めるなら C 言語から」という文言に載せられ Windows のコマンドプロンプト*2で動く簡単のプログラムをいくつか作った。ほとんど入門書の写経 + αだった。例によってポインタがわからず、もっと酷いことに return もわからなくて*3一旦距離を置く。return がわからなかったので関数を使うことを割けていたので全部 main 関数に書いていた気がする。初めて黒い画面にバババーっと文字が出てきたときはめちゃくちゃ楽しかった。 Java とかいう言語を使い

    私のコード履歴書 - それが僕には楽しかったんです。
    kawasin73
    kawasin73 2020/03/18
  • MySQL 8.0.18 の実装を読み解きながら簡単なストレージエンジンを自作する - それが僕には楽しかったんです。

    はじめに MySQL をビルドする ストレージエンジンを自作する Example エンジンをベースにする handlerton の作成とインスタンス化 テーブルを作成する 余談・気になったところ テーブルを開く INSERT の実装 ha_tina の存在 テーブルスキャン store_lock の実装 external_lock の実装 rnd_init の実装 info の実装 extra の実装 rnd_next の実装 おわりに はじめに 卒論書くのに飽きてきて何かやりたくなったので急にストレージエンジンを書くことにしてみた。 MySQL のストレージエンジンを実装していく中で、色々できるかなと思っていたけど、やってみると MySQL の内部実装について色々知らないといけないことが多くインデックスとかトランザクションとかそういうところは実装できなかった。 github.com My

    MySQL 8.0.18 の実装を読み解きながら簡単なストレージエンジンを自作する - それが僕には楽しかったんです。
    kawasin73
    kawasin73 2020/01/29
  • ファーストキャリアとしてサイボウズを選ぶ理由 - それが僕には楽しかったんです。

    はじめに 自身の背景 内定を得て承諾するまでの経緯 サイボウズとの出会い 余談 選考進めることにした理由 選考中の準備など 気がついたら内定 どうしてサイボウズを選んだか どういったキャリアを歩んで行きたいか どういうタイプか チームワークに関する経験 ここまで考えて見えてきたもの その他影響あったこと 週5で渋谷に通うことになったらどうなるんだろうか俺 みんな似てる 承諾の返事をめちゃくちゃ待ってくれた Cybozu Inside Out をもう一回みた おわりに はじめに どうも、内定者懇親会で緊張のあまりけんつと呼んでくれといい忘れたけんつ (@lrf141) | Twitterです。 昨日ついに一人アドベントカレンダーを完走しきったので、今度は卒論に追われています。 来年度からサイボウズでエンジニアとして働くことになっているが*1 20 年卒で note のマガジンができたり no

    ファーストキャリアとしてサイボウズを選ぶ理由 - それが僕には楽しかったんです。
    kawasin73
    kawasin73 2019/12/25
  • CMU Database Systems をひたすら追っていく ~10 Query Processing~ - それが僕には楽しかったんです。

    この記事は「けんつの1人 DBMS アドベントカレンダー Advent Calendar 2019 - Adventar」19日目の記事です はじめに 今日の動画 Query Processing Query Plan Processing Model Iterator Model Access Methods Sequential Scan Index Scan おわりに はじめに どうも、最近という出だしでブログ記事を 19 個も連続で書くと流石にそろそろネタがなくなってくるけんつです。 今回は SQL の実行周りに関連する話で、久々に CMU の講義に戻ってきます。 今日の動画 www.youtube.com Query Processing Query Plan Query がどのように実行されるかというと、まず SQLDBMS に投げられるとそれを構文解析に通してツリー構造

    CMU Database Systems をひたすら追っていく ~10 Query Processing~ - それが僕には楽しかったんです。
    kawasin73
    kawasin73 2019/12/21
  • SystemPage の実装 - それが僕には楽しかったんです。

    この記事は「けんつの1人 DBMS アドベントカレンダー Advent Calendar 2019 - Adventar」 18 日目の記事です。 はじめに 実装 おわりに はじめに どうも、最近ダクソリマスタードで RTA をやりはじめたけんつです。黒騎士斧槍めちゃ強いですね。 今回もめちゃくちゃ短いが、SystemPageの実装についてです。 SystemPage と言っているけどおそらく catalog といったほうがよくてテーブルの情報を持っているやつです 実装 import "encoding/json" type SystemPage struct { MaxPageId uint64 `json:"MaxPageId"` TableName string `json:"TableName"` ColumnTypes []string `json:"ColumnType"` C

    SystemPage の実装 - それが僕には楽しかったんです。
    kawasin73
    kawasin73 2019/12/21
  • Disk Manager の実装について - それが僕には楽しかったんです。

    この記事は「けんつの1人 DBMS アドベントカレンダー Advent Calendar 2019 - Adventar」17 日目の記事です。 はじめに データの永続化 ディレクトリ構成 何故こうなったか Page System Page 実装 おわりに はじめに どうも、最近そろそろ DBMS 作るのでなく MySQL とかの勉強をしたいなと思い始めたけんつです。 今日はディスク周りの話です。 といってもすることがあまりないのでめちゃくちゃ短くなりそうです。 データの永続化 ディレクトリ構成 .toybox ├── hello │   └── page_0 ├── sys │   └── hello.json └── world └── page_0 ディスク周りの永続化は↑のようなディレクトリ構成のもと実行される。 カタログと言われるテーブル情報を保持するデータは sys ディレクト

    Disk Manager の実装について - それが僕には楽しかったんです。
    kawasin73
    kawasin73 2019/12/21
    ページごとにファイルを分けてるけどファイルの読み書きで都度 open close が起きるし、ファイルディスクリプタたくさん使いそう。1つのファイルにまとめて各ページをオフセットで管理して pread pwrite すれば効率的になる
  • Buffer Pool を実装する。 - それが僕には楽しかったんです。

    この記事は「けんつの1人 DBMS アドベントカレンダー Advent Calendar 2019 - Adventar」 16 日目の記事です。 はじめに Buffer Pool の実装 Buffer Pool が持つべき責務を考える Buffer Pool 全体の仕様 Buffer Pool で持つ他の情報 構造体 Buffer Pool の操作 おわりに はじめに どうも、最近 co shu nie*1 にめちゃくちゃハマっているけんつです。 「asphyxia piano ver」 がめっちゃいいので聴いてください。壊れそうなぐらい綺麗な透き通った声がめちゃくちゃ好きです。 www.youtube.com 今回はくそがつくほど苦戦した Buffer Pool の実装についてです。 もう解説するのが非常に厳しいので単純に紹介していきます。 普段は MySQL に寄せようと頑張って来ま

    Buffer Pool を実装する。 - それが僕には楽しかったんです。
    kawasin73
    kawasin73 2019/12/21
    Buffer Pool って初期化時に全てのメモリを Page の配列として確保して使い回すものだと思ってたけど、AppendPage でどこかでメモリ確保された Page を渡すのか。ちょっとモヤモヤ。後でコードを読む
  • B Tree Index を実装する - それが僕には楽しかったんです。

    この記事は「けんつの1人 DBMS アドベントカレンダー Advent Calendar 2019 - Adventar」 15 日目の記事です。 はじめに B Tree を実装する インデックスの色々 クラスタインデックス セカンダリインデックス B Tree アルゴリズム 実装方針 実装するにあたっての知見・感想 アイテムの閾値 ラッチの実装 Golang の interface を上手く使う B Tree の実装 終わりに はじめに どうも、最近眼精疲労がひどすぎるけど眼球ってどうやって休めたらいいかわからないけんつです。 今日明日は現状最も苦戦した B Tree Index と Buffer Pool の実装話になります。 B Tree を実装する 今回は B+ Tree でなく B Tree を実装する。また削除は考慮しない。 完全に考慮しない訳ではなくて一応削除を実装することを

    B Tree Index を実装する - それが僕には楽しかったんです。
    kawasin73
    kawasin73 2019/12/21
  • Clock Sweep と LRU Cache を実装する - それが僕には楽しかったんです。

    この記事は「けんつの1人 DBMS アドベントカレンダー Advent Calendar 2019 - Adventar」の 14 日目の記事です。 はじめに DBMSのキャッシュ MySQL の LRU キャッシュ PostgreSQL の Clock Sweep 実装 LRU Clock Sweep おわりに はじめに どうも、最近遊戯王netflix で配信されていてめちゃくちゃ幼少期を思い出しているけんつです。 今回は Buffer Pool に関連して、キャッシュ周りの実装を進めていく。 DBMSのキャッシュ これは MySQL と PostgreSQL でかなり違いがある。 少し前に記事でもまとめたが、MySQL は LRU で PostgreSQL はクロックスイープを使っている。 MySQL の LRU キャッシュ MySQL では List 構造を2つ持っていて、LR

    Clock Sweep と LRU Cache を実装する - それが僕には楽しかったんです。
    kawasin73
    kawasin73 2019/12/20
  • Page を実装する - それが僕には楽しかったんです。

    この記事は「けんつの1人 DBMS アドベントカレンダー Advent Calendar 2019 - Adventar」 13 日目の記事です。 はじめに Page の実装 削除を考慮しない 番外 おわりに はじめに どうも、なんかブログ記事を書きまくってたら右手親指の付け根が痛くてたまらないけんつです。 今日は Page の実装に関する話です。 BufferPool あたりの実装が完了した段階で思ったことなどなど書いていきます。 Page の実装 基的に Page Header と Tuple の塊となっている。 先頭 4byte を Page Header として、残りの領域で Tuple を追加された順番で保持する単純な構造になっている。 全体の容量は約 16 KB で固定。mmap は使用しない。 バイナリへのシリアライズなどなどは、前回実装したタプルのシリアライズをそのまま使

    Page を実装する - それが僕には楽しかったんです。
    kawasin73
    kawasin73 2019/12/20
    Go は配列をスライスとして使う(スライスの実体が配列になる)方法を用意しています。 var hoge [10]byte を hoge2 := hoge[:] とするとスライスとして使えます。
  • Tuple を実装する - それが僕には楽しかったんです。

    この記事は「けんつの1人 DBMS アドベントカレンダー Advent Calendar 2019 - Adventar」 12 日目の記事です。 はじめに 実装 タプルの構成 データ型の扱い タプルサイズ問題 おわりに はじめに どうも、最近バイトに卒研にアドカレと目を酷使しまくっていつも目が充血しているけんつです。眼球ってどうやって休ませたらいいんでしょうか。 そろそろ結構勉強だけという状況に飽きてきたので、ストレージから実装していきます。 まずは Tuple です。 行を表現するため来であれば色々考慮する必要がありますが、比較的妥協を重ねてシンプルにしています。 実装 といっても、github で Pull Request を作りながら開発しているのでそちらを見ると全体像が見えてきます。 なのでここでは実装していて色々と考えたこと、妥協したことなどまとめます。 タプルの構成 Tup

    Tuple を実装する - それが僕には楽しかったんです。
    kawasin73
    kawasin73 2019/12/20
  • ストレージ周りの設計を考える - それが僕には楽しかったんです。

    この記事は「 けんつの1人 DBMS アドベントカレンダー Advent Calendar 2019 - Adventar 」 11日目の記事です。 はじめに ストレージの設計を考える 実装する DBMS の仕様 ストレージの全体像を考える メモリ上の処理 ディスク上の処理 おわりに はじめに どうも、最近書き溜めた記事がなくなってきてエクストリーム開発になりそうであせっているけんつです。 今日はとりあえず、雑にストレージの全体構造を考えてみようかなと思っています。 詳細は、それぞれ実装した記事で書くのでかなり短くなりそう。 ストレージの設計を考える ひとまずデータベースストレージから作っていくことにしたのでザッと設計を考えていく。 ただあくまでもこうやって実装したいなという目安なので今後変更する部分はありそう。 実装する DBMS の仕様 まず先に大まかな仕様から考える。 今回は次のよう

    ストレージ周りの設計を考える - それが僕には楽しかったんです。
    kawasin73
    kawasin73 2019/12/15
    Direct I/O はメモリをページサイズ境界に合わせないといけないから Go だとメモリ管理が不自由で大変そう。一応、試している人はいた。https://qiita.com/satoru_takeuchi/items/d4c838d04e8bd0c6cd04
  • BufferPool の実例を調べる - それが僕には楽しかったんです。

    この記事は「 けんつの1人 DBMS アドベントカレンダー Advent Calendar 2019 - Adventar 」 10日目の記事です。 はじめに Buffer Pool Buffer Pool Manager の構成 バックエンドプロセスによるバッファプールの操作 バッファプールマネージャの構造 Buffer Table Buffer Descriptor 番外編 MySQL の Buffer Pools まとめ はじめに どうも、最近 B Tree Index を実装しても、重複ありで範囲検索するのめっちゃ難しくない?って思い始めたけんつです。 インデックスにとりつかれている気がする。 今日は、 Buffer Pools を実装しているなかでどうやって設計すると良いのか迷ったので PostgreSQL の Buffer Pool の仕組みを追うことでもうちょい理解を深めてい

    BufferPool の実例を調べる - それが僕には楽しかったんです。
    kawasin73
    kawasin73 2019/12/10
  • InnoDB におけるページとインデックスの物理的な構成について - それが僕には楽しかったんです。

    この記事は「 けんつの1人 DBMS アドベントカレンダー Advent Calendar 2019 - Adventar 」 9日目の記事です。 はじめに 参考にしたサイト InnoDB のスペースファイルレイアウト ページ構成 FIL Header FIL Trailer Header, Trailer の構造的特徴 スペースファイル テーブル毎のスペース おわりに はじめに どうも、最近このアドカレが当に終わるのかどうなのか心配になってきているけんつです。 今回は DBMS のストレージ構造を考えていたらインデックスを物理的に保存する場合の構造ってどうなってるんだろうなぁと思ったので InnoDB の内部構造とその物理的な形式を追っていく。 あんまり深く追ってしまうと当にキリが無いので自分の理解が足りない部分をメモしていく感じになる 参考にしたサイト blog.jcole.us

    InnoDB におけるページとインデックスの物理的な構成について - それが僕には楽しかったんです。
    kawasin73
    kawasin73 2019/12/10
  • 既存の RDBMS のストレージがどのような仕組みになっているのか調べてみる - それが僕には楽しかったんです。

    この記事は「 けんつの1人 DBMS アドベントカレンダー Advent Calendar 2019 - Adventar 」 8日目の記事です。 はじめに ここまで勉強してみて InnoDB を追っていく。 InnoDB のアーキテクチャ Adaptive Hash Index Buffer Pool Table Space OS Cache と Database Storage おわりに はじめに どうも、最近ずっと DBMS について勉強していたら全然コードを書く暇がなくて先にストレージ部分から作ってしまおうと思ったけんつです。 最近は鬼滅の刃をみて号泣するオタクをやってます。 ここまで勉強してみて ここまで CMU Database Systems を追ってきて、ストレージ周りという意味では一段落したのかなと思っている。 ただここで気になったのが既存の RDBMS のストレージ周り

    既存の RDBMS のストレージがどのような仕組みになっているのか調べてみる - それが僕には楽しかったんです。
    kawasin73
    kawasin73 2019/12/10
  • CMU Database Systems をひたすら追っていく ~05 Buffer Pools~ - それが僕には楽しかったんです。

    はじめに 今日の動画 Buffer Pools Buffer Pools Organization Buffer Pools Meta Data Lock vs Latches Lock Latches Page Table vs Page Directory ここまでのメモ Buffer Pools Optimization Multiple Buffer Pools Pre-Fetching Scan Sharing Replacement Policies CLOCK その他のアルゴリズム Allocation Policies おわりに この記事は「 けんつの1人 DBMS アドベントカレンダー Advent Calendar 2019 - Adventar 」 4日目の記事です。 はじめに どうも、最近「これ1人アドカレめちゃくちゃキツイな」とにわかに思い始めたけんつです。 最近

    CMU Database Systems をひたすら追っていく ~05 Buffer Pools~ - それが僕には楽しかったんです。
    kawasin73
    kawasin73 2019/12/04