共有データ
このトピックでは、共有データクラスタに関するよくある質問への回答を提供します。
なぜテーブル作成が失敗するのですか?
BE ログ (be.INFO) を確認して、正確な原因を特定してください。一般的な原因には以下が含まれます:
- オブジェクトストレージ設定の誤設定(例:
aws_s3_path、endpoint、authentication)。 - オブジェクトストレージサービスの不安定性や例外。
その他のエラー:
エラーメッセージ: "Error 1064 (HY000): Unexpected exception: Failed to create shards. INVALID_ARGUMENT: shard info cannot be empty"
原因: 自動バケット推論が使用されている際に、CN または BE ノードが稼働していない場合に発生します。この問題は v3.2 で修正されています。
なぜテーブル作成に時間がかかるのですか?
バケット数が多すぎる(特にパーティション化されたテーブルの場合)と、StarRocks は多くのタブレットを作成します。システムはオブジェクトストレージ内の各タブレットに対してタブレットメタデータファイルを書き込む必要があり、その高いレイテンシーが総作成時間を大幅に増加させる可能性があります。以下を検討してください:
- バケット数を減らす。
- BE 設定
create_tablet_worker_countを通じてタブレット作成スレッドプールサイズを増やす。 - オブジェクトスト レージでの高い書き込みレイテンシーを確認し、トラブルシューティングする。
なぜテーブルを削除した後もオブジェクトストレージ内のデータがクリーンアップされないのですか?
StarRocks は 2 つの DROP TABLE モードをサポートしています:
DROP TABLE xxx: テーブルメタデータを FE のリサイクルビンに移動します(データは削除されません)。DROP TABLE xxx FORCE: テーブルメタデータとデータを即座に削除します。
クリーンアップが失敗した場合、以下を確認してください:
DROP TABLE xxx FORCEが使用されたかどうか。- リサイクルビンの保持パラメータが高すぎるかどうか。パラメータには以下が含まれます:
- FE 設定
catalog_trash_expire_second - BE 設定
trash_file_expire_time_sec
- FE 設定
- 削除エラーのための FE ログ(例:RPC タイムアウト)。必要に応じて RPC タイムアウトを増やします。
オブジェクトストレージ内のテーブルデータのストレージパスをどのように見つけることができますか?
以下のコマンドを実行してストレージパスを取得します。
SHOW PROC '/dbs/<database_name>';
例:
mysql> SHOW PROC '/dbs/load_benchmark';
+---------+-------------+----------+---------------------+--------------+--------+--------------+--------------------------+--------------+---------------+--------------------------------------------------------------------------------------------------------------+
| TableId | TableName | IndexNum | PartitionColumnName | PartitionNum | State | Type | LastConsistencyCheckTime | ReplicaCount | PartitionType | StoragePath |
+---------+-------------+----------+---------------------+--------------+--------+--------------+--------------------------+--------------+---------------+--------------------------------------------------------------------------------------------------------------+
| 17152 | store_sales | 1 | NULL | 1 | NORMAL | CLOUD_NATIVE | NULL | 64 | UNPARTITIONED | s3://starrocks-common/xxxxxxxxx-xxxx_load_benchmark-1699408425544/5ce4ee2c-98ba-470c-afb3-8d0bf4795e48/17152 |
+---------+-------------+----------+---------------------+--------------+--------+--------------+--------------------------+--------------+---------------+--------------------------------------------------------------------------------------------------------------+
1 row in set (0.18 sec)
v3.1.4 より前のバージョンでは、テーブルデータは単一のディレクトリに散在しています。
v3.1.4 以降、データはパーティションごとに整理されます。同じコマンドがテーブルのルートパスを表示し、そこにはパーティション ID にちなんで名付けられたサブディレクトリが含まれ、各パーティションディレクトリには data/(セグメントデータファイル)と meta/(タブレットメタデータファイル)のサブディレクトリが含まれます。
なぜ共有データクラスタでクエリが遅いのですか?
一般的な原因には以下が含まれます:
- キャッシュミス。
- コンパクション不足により、小さなセグメントファイルが多すぎて過剰な I/O が発生する。
- 並行性の問題(例:タブレットが少なすぎる)。
- 不適切な
datacache.partition_duration設定により、キャッシュが失敗する。
まず、Query Profile を分析して根本原因を特定する必要があります。
キャッシュミス
共有データクラスタでは、データがリモートに保存されるため、Data Cache が重要です。クエリが予期せず遅くなった場合、CompressedBytesReadRemote や IOTimeRemote などの Query Profile メトリクスを確認してください。
キャッシュミスの原因には以下が含まれます:
- テーブル作成時に Data Cache が無効化されている。
- ローカルキャッシュスペースが不足している。
- 弾力的スケーリングによるタブレットの移動。
- 不適切な
datacache.partition_duration設定によりキャッシュが妨げられる。
コンパクション不足
適切なコンパクションが行われないと、多くの履歴データバージョンが残り、クエリ中にアクセスされるセグメントファイルの数が増加します。これにより I/O が増加し、クエリが遅くなります。
コンパクション不足を診断するには:
-
関連するパーティションの Compaction Score を確認します。
Compaction Score は約 10 以下に保たれるべきです。過度に高い Compaction Score はコンパクションの失敗を示すことがよくあります。
-
SegmentsReadCountなどの Query Profile メトリクスを確認します。セグメント数が多い場合、コンパクションが遅れているか、停止している可能性があります。
不適切なタブレット設定
タブレットはデータをコンピュートノードに分散します。バケットの選択が悪いか、バケットキーが偏っていると、クエリが一部のノードでのみ実行されることがあります。
推奨事項:
- バランスの取れた分散を確保するバケット列を選択する。
- 適切なバケット数を設定する(式:
total data size / (1–5 GB))。
不適切な datacache.partition_duration 設定
この値が小さすぎると、「コールド」パーティションからのデータがキャッシュされず、リモート読み取りが繰り返される可能性があります。Query Profile で CompressedBytesReadRemote または IOCountRemote がゼロでない場合、これが原因かもしれません。datacache.partition_duration を適切に調整してください。
なぜ「Timeout was reached」や「Deadline Exceeded」などのエラーでウェアハウス内のすべてのクエリがタイムアウトするのですか?
ウェアハウス内のコンピュートノードがオブジェクトストレージのエンドポイントにアクセスできるかどうかを確認してください。
共有データクラスタでタブレットメタデータを取得するにはどうすればよいですか?
-
以下を実行して可視バージョンを取得します:
SHOW PARTITIONS FROM <table_name>` -
以下のステートメントを実行してタブレットメタデータを取得します:
admin execute on <backend_id>
'System.print(StorageEngine.get_lake_tablet_metadata_json(<tablet_id>, <version>))'