複数のアナリストが同一の OSS データセットに対して同時にクエリを実行する場合、各クエリは常に OSS から直接データをフェッチします。このため、待ち時間が長くなり、OSS の帯域幅が混雑する可能性があります。Lake Cache は、頻繁にアクセスされるオブジェクトを専用の NVMe SSD 上にキャッシュすることで、OSS からの重複フェッチを排除し、ミリ秒単位の読み取り待ち時間と、キャッシュサイズに比例して線形に拡張可能な帯域幅を実現します。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
AnalyticDB for MySQL Enterprise Edition、Basic Edition、または Data Lakehouse Edition のクラスターが存在すること
仕組み
Spark ジョブで Lake Cache を有効化した状態で OSS からデータを読み取る際の処理フローは以下のとおりです。
Lake Cache クライアントが、オブジェクトのメタデータを取得するために、読み取りリクエストをマスターノードに転送します。
マスターノードがメタデータをクライアントに返します。
クライアントは受信したメタデータをもとに、ワーカーノードから実際のオブジェクトを要求します。
該当オブジェクトがワーカーノード上に既にキャッシュ済みの場合、即座に返されます。
キャッシュされていない場合は、OSS からオブジェクトをフェッチし、クライアントに返すと同時に、今後の読み取りのためにキャッシュに格納されます。
データの一貫性は自動的に維持されます。OSS のオブジェクトが更新されると、Lake Cache が変更を検出し、キャッシュをリフレッシュします。クエリは常に最新のデータを読み取ります。
パフォーマンス
帯域幅および待ち時間
| メトリック | 詳細 |
|---|---|
| 読み取り待ち時間 | ミリ秒レベル(NVMe SSD) |
| キャッシュ帯域幅 | キャッシュサイズ 1 TB あたり 5 Gbit/s |
| 最大バーストスループット | 数百 Gbit/s |
| キャッシュサイズ範囲 | 10 GB~200,000 GB |
帯域幅の例:キャッシュサイズが 10 TB の場合、読み取り帯域幅は 5 × 10 = 50 Gbit/s(約 6.25 GB/s)となります。20 TB の場合、読み取り帯域幅は 100 Gbit/s と倍増します。キャッシュサイズを増加させることで、帯域幅は線形に拡張され、標準的な OSS 帯域幅制限による制約を受けません。
高スループット密度:Lake Cache は、少量のホットデータに対するバースト読み取り要件を満たすために、少量のデータに対しても高いスループットを提供できます。
キャッシュサイズを 200,000 GB を超えて設定する必要がある場合は、チケットを送信してください。
キャッシュ立ち退きポリシー
キャッシュがサイズ上限に達した場合、Lake Cache は「最も最近使用されていない(LRU)」立ち退きポリシーを適用します。すなわち、アクセス頻度の低いオブジェクトが優先的に削除され、アクセス頻度の高いオブジェクトが保持されます。保持したいオブジェクトが削除されないようにするには、キャッシュサイズを増加させてください。
TPC-H ベンチマーク結果
以下のテストでは、TPC-H クエリ を使用して、レイクキャッシュが OSS 読み取りパフォーマンスに与える影響を測定します。レイクキャッシュにより、クエリ実行速度は直接の OSS アクセスと比較して 2.7 倍 向上しました。
| 構成 | キャッシュサイズ | データセットサイズ | Spark リソース仕様 | 実行時間 |
|---|---|---|---|---|
| Lake Cache 有効化 | 12 TB | 10 TB | 2 コア、8 GB(中) | 7,219 秒 |
| OSS への直接アクセス | なし | 10 TB | 2 コア、8 GB(中) | 19,578 秒 |
課金
Lake Cache を有効化すると、使用したキャッシュ容量に対して従量課金方式で課金されます。料金の詳細については、「Enterprise Edition および Basic Edition の料金」および「Data Lakehouse Edition の料金」をご参照ください。
制限事項
Lake Cache は、以下のリージョンでのみご利用いただけます:中国 (杭州)、中国 (上海)、中国 (北京)、中国 (張家口)、中国 (深セン)、シンガポール、米国 (バージニア)、インドネシア (ジャカルタ)。その他のリージョンで Lake Cache をご利用になりたい場合は、チケットを送信してください。
キャッシュノードでハードウェア障害が発生した場合、クエリは引き続き実行されますが、OSS からデータを再フェッチする間、一時的にパフォーマンスが低下する可能性があります。キャッシュが再構築されると、パフォーマンスは自動的に回復します。
キャッシュがサイズ上限に達した場合、アクセス頻度の低いオブジェクトが、よりアクセス頻度の高いオブジェクトに置き換えられます。置き換えを防ぐには、キャッシュサイズを増加させてください。
Lake Cache の有効化
AnalyticDB for MySQL コンソール にログインします。左上隅でリージョンを選択し、左側のナビゲーションウィンドウから クラスター をクリックします。
Enterprise Edition、Basic Edition、または Data Lakehouse Edition タブで対象のクラスターを見つけ、クラスター ID をクリックします。
クラスター情報 ページで、構成情報 セクションに移動し、Lake Cache の横にある 構成 をクリックします。
Lake Cache ダイアログボックスで、Lake Cache を有効化し、キャッシュサイズを指定します。キャッシュサイズの指定時にエラーが発生した場合は、チケットを送信してください。
OK をクリックします。
Lake Cache を有効化した後は、Lake Cache ダイアログボックスを再度開き、設定されたキャッシュサイズを確認してください。
Spark ジョブにおける Lake Cache の利用
Lake Cache を有効化した後、Spark ジョブ内で OSS 読み取りの高速化を有効にするには、spark.adb.lakecache.enabled パラメーターを true に設定します。
Spark SQL
-- このセッションで Lake Cache を有効化
SET spark.adb.lakecache.enabled=true;
-- クエリを実行
SHOW databases;Spark JAR
ジョブ構成でパラメーターを渡します。
{
"comments": [
"OSS 読み取りの高速化のために Lake Cache を有効化します。"
],
"args": ["oss://testBucketName/data/readme.txt"],
"name": "spark-oss-test",
"file": "oss://testBucketName/data/example.py",
"conf": {
"spark.adb.lakecache.enabled": "true"
}
}XIHE エンジンで Lake Cache をご利用になる場合は、チケットを送信してください。
クエリが高速化されないケース
以下のいずれかの条件に該当する場合、Lake Cache はクエリの高速化を行いません。
Spark ジョブで
spark.adb.lakecache.enabled=trueが設定されていない場合クラスターが Lake Cache がサポートされていないリージョンにある場合
データが初めて読み込まれる場合(まだキャッシュされていない)。以降の読み取りでパフォーマンスが向上します。
キャッシュノードでハードウェア障害が発生し、OSS からデータを再フェッチしている場合(一時的。自動的に回復)
キャッシュ領域が満杯であり、クエリで必要なオブジェクトがすでに立ち退き済みの場合。ホットデータをより多く保持するには、キャッシュサイズを増加させてください。
Lake Cache のモニタリング
Lake Cache を有効化した後は、Spark ジョブがキャッシュを利用しているかどうかを確認し、CloudMonitor で使用状況のメトリックを確認できます。
CloudMonitor コンソール にログインします。
左側のナビゲーションウィンドウで、クラウドリソース監視 > クラウドサービス監視 を選択します。
AnalyticDB for MySQL カードにカーソルを合わせ、AnalyticDB for mysql 3.0 - Data Lakehouse Edition をクリックします。
対象のクラスターを見つけ、操作 列の モニタリングチャート をクリックします。
LakeCache メトリック タブをクリックして、キャッシュの詳細を表示します。
以下のようなメトリックが利用可能です。
| メトリック | 説明 |
|---|---|
| LakeCache キャッシュヒット率(%) | キャッシュから応答された読み取りリクエストの割合。計算式:キャッシュからの読み取り数 ÷ 全読み取り数。値が高いほど、OSS へのトラフィックが回避されていることを意味します。 |
| LakeCache キャッシュ使用量(B) | 現在使用中のキャッシュ容量(バイト単位) |
| LakeCache の累積読み取りデータ総量(B) | キャッシュから有効化されてからの合計読み取りデータ量(バイト単位) |
同一データに対する繰り返しクエリにもかかわらずキャッシュヒット率が低い場合は、読み取り間でより多くのオブジェクトを保持できるよう、キャッシュサイズを増加させてください。