🐡

TiDBユーザグループ「TiUG」TiDBソースコード輪読会 #1 アフターレポート

2024/08/20に公開

TiDBユーザグループ「TiUG」TiDBソースコード輪読会 #1 アフターレポート

はじめに

TiDBユーザグループ「TiUG」のTiDBソースコード輪読会 #1 で進行していました TiUG運営メンバーのSatoyan です。
参加していただいた方ありがとうございます。

TiDB ソースコード輪読会とは?

TiDB

私自身、MySQLは日常的に触りますが、TiDBのことは勉強中、
またアプリよりのエンジニアなので、せっかくなのでソースコードを読んでみたいなってことで企画しました。

どうなるかちょっとわからない企画に
参加人数

74名も!参加していただきました。

勉強不足だったなぁと痛感した初回だったため、
個人的にも課題が多かったのですが、どんどん改善していきます!

ご意見お待ちしております。

ちなみに各回の予定

  • 1回目: TiDBのアーキテクチャを頭に入れる会
  • 2回目: System Rモデルのプランナーを読む
  • 3回目: 論理最適化を読む
  • 4回目: 物理最適化、事後最適化を読む

まず1回目、2回目で全体の概念を眺めて、3回目、4回目でTiDBの直接的な実装に入っていくような流れになるかと思います。

#1 の内容は

まずは bohnenさんのTiDB のアーキテクチャの説明から

https://www.docswell.com/s/bohnen/K4V3E6-tidb-query-execution/1

1. TiDB のアーキテクチャ

TiDB,TiKV,TiFlash などの構成を組み合わせて、分散データベースがどうなっているのか?ざっくりとした説明をいただきました。
TiDBとTiKV でどういう役割分担をしているかは興味深かったですね。

2. SQL文の解析とコンパイル(ParserとCompiler)

Parser や Compiler についてざっくりとした説明をいただきました。
Parser はSQL の勉強にちょうど良い教材になりそうってことで、Parser も輪読会したいですね
https://github.com/pingcap/tidb/blob/master/pkg/parser/README.md

3. TiDB実行概要〜最適化

輪読会のメインパートです。TiDB で行っている、論理最適化、物理最適化のざっくりとした内容の説明をいただきました。
物理最適化は他のDBとちがい、TiKV に合わせたコスト計算がなされているという話にも触れていました。

4. 実行計画

統計情報を使ってどう、実行計画を立てるのかを説明いただきました。
質問が多い印象でした。みなさん統計情報を固定したり、加工したりして運用しているんですかね?

次にSystem R の概要

https://www.docswell.com/s/kumagi/KENNPE-selinger-optimizer?ref=rss#p1

kumagi さんの 資料を引用して概念の説明をしました。

  • Left Deep Join
  • DP(動的計画法)を用いて、網羅的に探索をすることで、最適なJoin Orderを設定している
  • 順序情報を探索空間に入れて、Sort Merge Join が効くケースを探す
  • コスト計算

TiDBではこの概念を改変して実装しているみたいです。#2 でもう少し詳しく触れます。

残りの次回で開発ガイドの内容を

残りの時間で開発ガイドをざっくりと読みました。

https://zenn.dev/bohnen/articles/8eb4bf2a50d7a3
https://pingcap.github.io/tidb-dev-guide/understand-tidb/planner.html

具体的な実装内容などが資料中には触れていますが、一つ一つ深ぼる時間はなかったので、眺める感じに

終わり

最後駆け足になってしまいましたが、いかがでしたでしょうか?
個人的には大変勉強になったんですが、

運営メンバーからは分かりにくかったという意見も出てきましたので、
次回以降改善して臨みたいと思います!

最後アンケート内容

掘り下げたいテーマ

1. TiKVのプッシュダウン周りを深掘りしたい

TiKV は今回の輪読会のカバー範囲ではありませんが、物理最適化の会で触れられそうであれば、触れてみます。調べてみます。

2. 実行計画の生成まわり

#3,#4 で触れていきます!

3. 網羅的探索をもう少し詳しく見たい

#2で触れていきます!

4. Goよくわかんないのでデバッガーツールを使いつつ変数の状況とかみてみたいなと思います(時間があればですが!)。

承知しました! 見れるように準備していきます(#2はちょっと難しいかもしれませんが、#3,#4 で触れられたら触れていきます!)

5. Raft 会も

Raft 会もやりたいですね!
TiKVと絡めて、Raft の実装を見ていくのもやってみたいです。

https://github.com/tikv/raft-engine

GitHubで編集を提案
TiDB User Group

Discussion