Block Cache のウォームアップ
データレイク分析や共有データクラスタのシナリオでは、BIレポートや概念実証 (PoC) のパフォーマンステストなど、クエリに対する高いパフォーマンス要件があります。リモートデータをローカルBlock Cacheにロードすることで、同じデータを何度も取得する必要がなくなり、クエリの実行が大幅に高速化され、リソースの使用が最小限に抑 えられます。
StarRocks v3.3 は、Block Cache の強化機能として、Block Cache Warmup 機能を導入しました。Block Cache は、データクエリ中にデータがキャッシュに書き込まれる、キャッシュを受動的に埋めるプロセスです。一方、Block Cache Warmup はキャッシュを能動的に埋めるプロセスであり、リモートストレージから必要なデータを事前に積極的に取得します。
シナリオ
- Block Cacheに使用されるディスクのストレージ容量が、ウォームアップするデータ量よりもはるかに大きい場合。ディスク容量がウォームアップするデータ量より少ない場合、期待されるウォームアップ効果は得られません。例えば、100 GB のデータをウォームアップする必要があるが、ディスクに 50 GB のスペースしかない場合、50 GB のデータしかキャッシュにロードできず、以前にロードされた 50 GB のデータは後でロードされた 50 GB のデータによって置き換えられます。
- Block Cacheに使用されるディスクへのデータアクセスが比較的安定している場合。アクセス量が急増すると、期待されるウォームアップ効果は得られません。例えば、100 GB のデータをウォームアップする必要があり、ディスクに 200 GB のスペースがある場合、最初の条件は満たされます。しかし、ウォームアッププロセス中に大量の新しいデータ (150 GB) がキャッシュに書き込まれたり、予期しない大規模なコールドクエリが 150 GB のデータをキャッシュにロードする必要がある場合、ウォームアップされたデータが追い出される可能性があります。
動作の仕組み
StarRocks は、Block Cache Warmup を実装するために CACHE SELECT 構文を提供します。CACHE SELECT を使用する前に、Block Cache 機能が有効になっていることを確認してください。
CACHE SELECT の構文:
CACHE SELECT <column_name> [, ...]
FROM [<catalog_name>.][<db_name>.]<table_name> [WHERE <boolean_expression>]
[PROPERTIES("verbose"="true")]
パラメータ:
column_name: 取得する列。外部テーブルのすべての列を 取得するには*を使用できます。catalog_name: カタログの名前。デフォルト値はDEFAULT_CATALOGです。SET CATALOG を使用して外部カタログに切り替えた場合、指定する必要はありません。db_name: データベースの名前。そのデータベースに切り替えた場合、指定する必要はありません。table_name: データを取得するテーブルの名前。boolean_expression: フィルター条件。PROPERTIES: 現在、verboseプロパティのみがサポートされています。詳細なウォームアップメトリクスを返すために使用されます。
CACHE SELECT は同期プロセスであり、一度に 1 つのテーブルのみをウォームアップできます。実行が成功すると、ウォームアップ関連のメトリクスが返されます。
外部テーブルのすべてのデータをウォームアップする
次の例では、外部テーブル lineitem からすべてのデータをロードします:
mysql> cache select * from hive_catalog.test_db.lineitem;
+-----------------+------------------+----------------------+-------------------+
| READ_CACHE_SIZE | WRITE_CACHE_SIZE | AVG_WRITE_CACHE_TIME | TOTAL_CACHE_USAGE |
+-----------------+------------------+----------------------+-------------------+
| 48.2MB | 3.7GB | 59ms | 96.83% |
+-----------------+------------------+----------------------+-------------------+
1 row in set (19.56 sec)
返されるフィールド:
READ_CACHE_SIZE: すべてのノードによってBlock Cacheから読み取られたデータの合計サイズ。WRITE_CACHE_SIZE: すべてのノードによってBlock Cacheに書き込まれたデータの合計サイズ。AVG_WRITE_CACHE_TIME: 各ノードがBlock Cacheにデータを書き込むのにかかる平均時間。TOTAL_CACHE_USAGE: ウォームアップタスク完了後のクラスタ全体の Block Cache のディスク使用量。このメトリクスは、Block Cacheに十分なスペースがあるかどうかを評価するために使用できます。