ブログ@nnaka2992

データベースってなんだよ

YugabyteDBのドキュメントを全部読む Day3

YugabyteDBのドキュメントを全部読む Day3

前回からつづいてYugabyteDBのドキュメントを読んでいきます。

前回はArchitecture > Key Concepts > Universeを読みました。 今回はArchitecture > Key Concepts > YB-TServer serviceを読みます。

ドキュメントのバージョンは最新のv2.19 previewです。 また画像は同ドキュメントより引用しています。

それはそれとして技術系の単語をカタカナ表記で誤魔化していて、体系的に学んでいないことがバレてしまう。特にストレージまわりが分からない……

YB-TServer service

YB-TServer(YugabyteDB Tablet Servcer)はユーザからの受けつけたYugabyteDBクラスタへのリクエストのI/Oの 処理をする。

テーブルのデータは一つ以上のTablet peerに分割(シャーディング)される。peerの数はレプリケーションファクターによって決定される。

YB-TServerは一つ以上のTablet peerをホストする。 tserver_overview

Tablet peerはRaftグループを形成してグループ間でデータの複製を行ない、タブレットはYB-TServer上で最大の効率になるように管理される。

Server-global block cache

ブロックキャッシュは一つTB-TServer上の異なるタブレット間で共有される。

YB-TServerのメモリ効率は一つのテーブルからの読み込みが多いほど最適化される。

Space Amplification

YugabyteDBではSize-tired Compactionというライトアンプリフィケーション1が小さい圧縮方式を利用している。

Size-tired Compactionはスペースアンプリフィケーション2が大きいという問題があるが、 YugabyteDBではテーブルは複数のタブレットに分割され、タブレット間でのConcurrent Compactionは特定の最大値まで絞られるため問題になりにくい。

YugabyteDBでは凡そ10-20%のスペースアンプリフィケーションにおさまる。

つまりSize-tired Compaction一単位が扱うデータ量を小さく(タブレット化)して、 同時に実行される圧縮処理数を絞ることで特定のタイミングで圧縮に使用されるストレージ容量を抑えているということ?

Throttled compactions

YB-TServerではタブレット間で実行される圧縮処理の同時実行数を制限することで、圧縮処理が多量のリソースを占有することを防いでいる。

この機能は圧縮されるファイル同士のサイズを比べ、実行される圧縮処理が妥当であることを確認することで実現されている。

Small and large compaction queues

YB-TServerでは圧縮処理を大きい圧縮処理と小さい圧縮処理に分けて優先度を決めることで、I/Oが大きな場合でもシステムの機能を保っている。

YugabyteDBでは圧縮処理数を制限することに加え、様々な最適化を実行することで圧縮処理の影響を最小化している。

Manual compaction

YugabyteDBではyb-admin utilitycompact_tableコマンドにより、 任意のタイミングでテーブルに対して圧縮を実行することが出来る。

この方法はデータが新しく書き込まれない場合や、DDLTTLの超過によるデータ削除時によりデータが断片化したときに有効である。

Statistics-based full compactions to improve read performance

YugabyteDBでは読み込まれたkey-valueペアをDocDBレベルで監視している。監視対象となる時間軸はauto-compact-stat-window-secondsで管理されている。

YugabyteDBがデータ読み込み時に多量の廃棄されたデータのスキップを検知した場合、full compactionがトリガーされ不要なキーの削除が行なわれる。

Full compactionがトリガーされる詳細な条件は対象の時間軸で以下が満された時である。

この機能はTTLを設定したテーブルと互換性があり、TTL file expirationが有効なテーブルではスケジュールされた圧縮を実行しない。

Scheduled full compactions

YugabyteDBでは全てのデータに対するデータ圧縮をスケジュール実行することが出来る。 スケジュール実行はscheduled-full-compaction-frequency-hoursscheduled-full-compaction-jitter-factor-percentageのフラグで管理される。

この機能は大量のDELETEUPDATEを定常的に実行するワークロードでのパフォーマンスとディスクスペースの再割り当てに有効である。

スケジュール化したデータ圧縮はTTLと互換しているが、TTL file expirationとは互換していない。 つまりスケジュールされた圧縮は実行されない。

Server-global memstore limit

Server-global memstore limitは一つのYB-TServer上のタブレット間でシェアされるメモリサイズを追跡し、強制する。

この機能はタブレット間の書き込みに偏りがある場合に有効である。

一つのテーブルに書き込みが集中しているばあい、メモリ制限以上のメモリを割り当てることでパフォーマンスを向上させることが出来る。

Auto-sizing of block cache and memstore

Block Cacheとmemstoreは何れも多量のメモリを使用している。

これらはtablet-peer間で共有されるリソースのため、メモリ管理とこれらのコンポーネントの様々な環境に合せたサイジングを容易にしている。

YB-TServerでは自動で特定の割合のメモリをBlock CacheとMemstoreに割り当てる。

Distributing tablet load uniformly across data disks

複数のSSDを利用するハードウェアでは、テーブルのデータ(SSTable)とWALはテーブル毎に利用可能なディスクに均等に分散される。 このストライピングと呼ばれる負荷分散は、それぞれのディスクがそれぞれのテーブルの負荷を均等に処理することを保証する。


  1. SSDで実際に書き込んだデータより書き込み量が増幅する現象。もちろんライトアンプリフィケーションが小さいほうが望ましい。
  2. データの断片化やデータの重複などにより、ディスクに保存されるデータが実際より大きくなる現象。もちろんスペースアンプリフィケーションが小さいほうが望ましい。