仮想テーブル
Apache Cassandra 4.0 では、仮想テーブル (CASSANDRA-7622) が実装されています。仮想テーブルは、明示的に管理および SSTable として保存されたデータではなく、API によってバックアップされたテーブルです。Apache Cassandra 4.0 では、仮想テーブル用の仮想キースペースインターフェースが実装されています。仮想テーブルは各ノードに固有です。
仮想テーブルの機能には、以下のようなものがあります。
-
CQL を介したメトリクスの公開
-
YAML 設定情報の公開
仮想キースペースとテーブルは、通常のテーブルやキースペースとは大きく異なります。
-
仮想テーブルは、特別なキースペースに作成され、単なるキースペースには作成されません。
-
仮想テーブルは Cassandra によって管理されます。ユーザーは、新しい仮想テーブルを作成するために DDL を実行したり、既存の仮想テーブルを変更するために DML を実行したりすることはできません。
-
仮想テーブルは現在読み取り専用ですが、後のバージョンで変更される可能性があります。
-
仮想テーブルはローカルのみであり、分散されておらず、したがってレプリケートされません。
-
仮想テーブルには、関連する SSTable がありません。
-
仮想テーブルに送信されたクエリの一貫性レベルは無視されます。
-
既存のすべての仮想テーブルは
LocalPartitioner
を使用します。仮想テーブルはレプリケートされないため、パーティショナーはハッシュ順ではなく、パーティションキーの順にソートします。 -
ALLOW FILTERING
および集計関数を使用した高度なクエリは、通常のテーブルでは推奨されない場合でも、仮想テーブルで実行できます。
仮想キースペース
Apache Cassandra 4.0 では、仮想テーブル用に 2 つの新しいキースペースが追加されました。
-
system_virtual_schema
-
system_views
.
system_virtual_schema
キースペースには、仮想キースペース、テーブル、および列の定義について、それぞれ 3 つのテーブル (keyspaces
、columns
、および tables
) があります。これらのテーブルには、仮想テーブルのスキーマ情報が含まれています。これは Cassandra 内部で使用され、ユーザーが直接アクセスすべきではありません。
system_views
キースペースには、実際の仮想テーブルが含まれています。
仮想テーブルの制限事項
仮想キースペースとテーブルについて説明する前に、仮想キースペースとテーブルにはいくつかの制限事項があることに注意してください。これらの制限事項は変更される可能性があります。仮想キースペースは変更または削除できません。実際、仮想キースペースに対して操作を実行することはできません。
仮想テーブルは、仮想キースペースに作成できません。仮想テーブルは変更、削除、または切り捨てることができません。仮想テーブルに対して、セカンダリインデックス、型、関数、集計、マテリアライズドビュー、およびトリガーを作成することはできません。有効期限 (TTL) 列を作成することはできません。仮想テーブルは、条件付き更新または削除をサポートしていません。集計は、SELECT ステートメントで実行できます。
条件付きバッチステートメントには、仮想テーブルの変更を含めることはできません。また、ログ記録されたバッチに仮想テーブルステートメントを含めることはできません。実際、仮想テーブルと通常のテーブルの変更を同じバッチテーブルで実行することはできません。
仮想テーブル
system_views
仮想キースペースの各仮想テーブルには、異なる情報が含まれています。
次の表は、仮想テーブルについて説明しています。
仮想テーブル | 説明 |
---|---|
caches |
キャッシュ名、capacity_bytes、entry_count、hit_count、hit_ratio (double)、recent_hit_rate_per_second、recent_request_rate_per_second、request_count、および size_bytes を含む、一般的なキャッシュ情報を表示します。 |
cidr_filtering_metrics_counts |
CIDR フィルタリングに固有のメトリクスをカウントします。 |
cidr_filtering_metrics_latencies |
CIDR フィルタリングに固有のレイテンシメトリクス。 |
clients |
接続されているすべてのクライアントに関する情報をリストします。 |
coordinator_read_latency |
コーディネーターの読み取りのカウント、keyspace_name、table_name、max、median、および per_second を記録します。 |
coordinator_scan |
コーディネーターのスキャンのカウント、keyspace_name、table_name、max、median、および per_second を記録します。 |
coordinator_write_latency |
コーディネーターの書き込みのカウント、keyspace_name、table_name、max、median、および per_second を記録します。 |
disk_usage |
システムキースペースでソートされた、disk_space、keyspace_name、および table_name を含むディスク使用量を記録します。 |
internode_inbound |
インバウンドのノード間メッセージングに関する情報をリストします。 |
internode_outbound |
アウトバウンドのノード間メッセージングに関する情報。 |
local_read_latency |
ローカルの読み取りのカウント、keyspace_name、table_name、max、median、および per_second を記録します。 |
local_scan |
ローカルスキャンのカウント、keyspace_name、table_name、max、median、および per_second を記録します。 |
local_write_latency |
ローカル書き込みのカウント、keyspace_name、table_name、max、median、および per_second を記録します。 |
max_partition_size |
最大パーティションサイズのテーブルメトリクス。 |
rows_per_read |
読み取られた行のカウント、keyspace_name、tablek_name、max、および median を記録します。 |
settings |
cassandra.yaml の設定を表示します。 |
sstable_tasks |
コンパクションやアップグレードなどの操作について、現在実行中のタスクと SSTable の進捗状況をリストします。 |
system_logs |
logback.xml の CQLLOG アペンダーを使用してログに記録された場合、Cassandra ログを表示します。 |
system_properties |
ノードに設定された環境システムプロパティを表示します。 |
thread_pools |
各スレッドプールのメトリクスをリストします。 |
tombstones_per_read |
トゥームストーンのカウント、keyspace_name、tablek_name、max、および median を記録します。 |
使いやすさを向上させるため、CASSANDRA-18238 から、system_logs
を除くすべてのテーブルには、CQL 仕様で必要な場合に、クエリに ALLOW FILTERING
が暗黙的に追加されます。
次に、仮想テーブルの一部について詳しく説明します。
クライアント仮想テーブル
clients
仮想テーブルには、IP アドレス、ポート、client_options、接続ステージ、ドライバ名、ドライババージョン、ホスト名、プロトコルバージョン、リクエスト数、SSL 有効、SSL プロトコル、およびユーザー名を含む、すべてのアクティブな接続 (接続されたクライアント) がリストされます。
cqlsh> SELECT * FROM system_views.clients;
@ Row 1
------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
address | 127.0.0.1
port | 50687
client_options | {'CQL_VERSION': '3.4.7', 'DRIVER_NAME': 'DataStax Python Driver', 'DRIVER_VERSION': '3.25.0'}
connection_stage | ready
driver_name | DataStax Python Driver
driver_version | 3.25.0
hostname | localhost
protocol_version | 5
request_count | 16
ssl_cipher_suite | null
ssl_enabled | False
ssl_protocol | null
username | anonymous
@ Row 2
------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
address | 127.0.0.1
port | 50688
client_options | {'CQL_VERSION': '3.4.7', 'DRIVER_NAME': 'DataStax Python Driver', 'DRIVER_VERSION': '3.25.0'}
connection_stage | ready
driver_name | DataStax Python Driver
driver_version | 3.25.0
hostname | localhost
protocol_version | 5
request_count | 4
ssl_cipher_suite | null
ssl_enabled | False
ssl_protocol | null
username | anonymous
@ Row 3
------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
address | 127.0.0.1
port | 50753
client_options | {'APPLICATION_NAME': 'TestApp', 'APPLICATION_VERSION': '1.0.0', 'CLIENT_ID': '55b3efbd-c56b-469d-8cca-016b860b2f03', 'CQL_VERSION': '3.0.0', 'DRIVER_NAME': 'DataStax Java driver for Apache Cassandra(R)', 'DRIVER_VERSION': '4.13.0'}
connection_stage | ready
driver_name | DataStax Java driver for Apache Cassandra(R)
driver_version | 4.13.0
hostname | localhost
protocol_version | 5
request_count | 18
ssl_cipher_suite | null
ssl_enabled | False
ssl_protocol | null
username | anonymous
@ Row 4
------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
address | 127.0.0.1
port | 50755
client_options | {'APPLICATION_NAME': 'TestApp', 'APPLICATION_VERSION': '1.0.0', 'CLIENT_ID': '55b3efbd-c56b-469d-8cca-016b860b2f03', 'CQL_VERSION': '3.0.0', 'DRIVER_NAME': 'DataStax Java driver for Apache Cassandra(R)', 'DRIVER_VERSION': '4.13.0'}
connection_stage | ready
driver_name | DataStax Java driver for Apache Cassandra(R)
driver_version | 4.13.0
hostname | localhost
protocol_version | 5
request_count | 7
ssl_cipher_suite | null
ssl_enabled | False
ssl_protocol | null
username | anonymous
(4 rows)
clients
の使用方法の例を次に示します。
-
アップグレード前、およびアップグレード中の
nodetool enableoldprotocolversions
とnodetool disableoldprotocolversions
を使用して、古い非互換バージョンのドライバを使用しているアプリケーションを検索します。 -
過剰なリクエストを送信しているクライアントを特定します。
-
SSL から SSL への移行中に SSL が有効になっているかどうかを確認します。
仮想テーブルは、DESCRIBE
ステートメントで記述できます。ただし、リストされた DDL を実行して仮想テーブルを作成することはできません。例として、system_views.clients
仮想テーブルを記述します。
cqlsh> DESCRIBE TABLE system_views.clients;
/*
Warning: Table system_views.clients is a virtual table and cannot be recreated with CQL.
Structure, for reference:
VIRTUAL TABLE system_views.clients (
address inet,
port int,
client_options frozen<map<text, text>>,
connection_stage text,
driver_name text,
driver_version text,
hostname text,
protocol_version int,
request_count bigint,
ssl_cipher_suite text,
ssl_enabled boolean,
ssl_protocol text,
username text,
PRIMARY KEY (address, port)
) WITH CLUSTERING ORDER BY (port ASC)
AND comment = 'currently connected clients';
*/
キャッシュ仮想テーブル
caches
仮想テーブルには、キャッシュに関する情報がリストされます。現在作成されている 4 つのキャッシュは、chunks、counters、keys、および rows です。caches
仮想テーブルに対するクエリは、次の詳細を返します。
cqlsh:system_views> SELECT * FROM system_views.caches;
name | capacity_bytes | entry_count | hit_count | hit_ratio | recent_hit_rate_per_second | recent_request_rate_per_second | request_count | size_bytes
---------+----------------+-------------+-----------+-----------+----------------------------+--------------------------------+---------------+------------
chunks | 229638144 | 29 | 166 | 0.83 | 5 | 6 | 200 | 475136
counters | 26214400 | 0 | 0 | NaN | 0 | 0 | 0 | 0
keys | 52428800 | 14 | 124 | 0.873239 | 4 | 4 | 142 | 1248
rows | 0 | 0 | 0 | NaN | 0 | 0 | 0 | 0
(4 rows)
CIDR フィルタリングメトリクス仮想テーブル
cidr_filtering_metrics_counts
仮想テーブルには、CIDR フィルタリングに固有のカウントメトリクスがリストされます。cidr_filtering_metrics_counts
仮想テーブルに対するクエリは、以下のようなメトリクスをリストします。
cqlsh> select * from system_views.cidr_filtering_metrics_counts;
name | value
--------------------------------------------------------+-------
CIDR groups cache reload count | 2
Number of CIDR accesses accepted from CIDR group - aws | 15
Number of CIDR accesses accepted from CIDR group - gcp | 30
Number of CIDR accesses rejected from CIDR group - gcp | 6
cidr_filtering_metrics_latencies
仮想テーブルには、CIDR フィルタリングに固有のレイテンシメトリクスがリストされます。cidr_filtering_metrics_latencies
仮想テーブルに対するクエリは、以下のメトリクスをリストします。
cqlsh> select * from system_views.cidr_filtering_metrics_latencies;
name | max | p50th | p95th | p999th | p99th
---------------------------------------------+-------+-------+-------+--------+-------
CIDR checks latency (ns) | 24601 | 1 | 11864 | 24601 | 24601
CIDR groups cache reload latency (ns) | 42510 | 42510 | 42510 | 42510 | 42510
Lookup IP in CIDR groups cache latency (ns) | 1 | 1 | 1 | 1 | 1
CQL メトリクス仮想テーブル
cql_metrics
仮想テーブルには、CQL プリペアドステートメントキャッシュに固有のメトリクスがリストされます。cql_metrics
仮想テーブルに対するクエリは、以下のメトリクスをリストします。
cqlsh> select * from system_views.cql_metrics ;
name | value
------------------------------+-------
prepared_statements_count | 0
prepared_statements_evicted | 0
prepared_statements_executed | 0
prepared_statements_ratio | 0
regular_statements_executed | 17
CIDR フィルタリングメトリクス仮想テーブル
cidr_filtering_metrics_counts
仮想テーブルには、CIDR フィルタリングに固有のカウントメトリクスがリストされます。cidr_filtering_metrics_counts
仮想テーブルに対するクエリは、以下のようなメトリクスをリストします。
cqlsh> select * from system_views.cidr_filtering_metrics_counts;
name | value
--------------------------------------------------------+-------
CIDR groups cache reload count | 2
Number of CIDR accesses accepted from CIDR group - aws | 15
Number of CIDR accesses accepted from CIDR group - gcp | 30
Number of CIDR accesses rejected from CIDR group - gcp | 6
cidr_filtering_metrics_latencies
仮想テーブルには、CIDR フィルタリングに固有のレイテンシメトリクスがリストされます。cidr_filtering_metrics_latencies
仮想テーブルに対するクエリは、以下のメトリクスをリストします。
cqlsh> select * from system_views.cidr_filtering_metrics_latencies;
name | max | p50th | p95th | p999th | p99th
---------------------------------------------+-------+-------+-------+--------+-------
CIDR checks latency (ns) | 24601 | 1 | 11864 | 24601 | 24601
CIDR groups cache reload latency (ns) | 42510 | 42510 | 42510 | 42510 | 42510
Lookup IP in CIDR groups cache latency (ns) | 1 | 1 | 1 | 1 | 1
CQL メトリクス仮想テーブル
cql_metrics
仮想テーブルには、CQL プリペアドステートメントキャッシュに固有のメトリクスがリストされます。cql_metrics
仮想テーブルに対するクエリは、以下のメトリクスをリストします。
cqlsh> select * from system_views.cql_metrics ;
name | value
------------------------------+-------
prepared_statements_count | 0
prepared_statements_evicted | 0
prepared_statements_executed | 0
prepared_statements_ratio | 0
regular_statements_executed | 17
設定仮想テーブル
settings
テーブルは非常に便利であり、cassandra.yaml
の現在のすべての構成設定をリストします。暗号化オプションは、機密性の高いトラストストア情報またはパスワードを隠すためにオーバーライドされます。ただし、現在、仮想テーブルの DML を使用して構成設定を行うことはできません。
cqlsh:system_views> SELECT * FROM system_views.settings;
name | value
-------------------------------------+--------------------
allocate_tokens_for_keyspace | null
audit_logging_options_enabled | false
auto_snapshot | true
automatic_sstable_upgrade | false
cluster_name | Test Cluster
enable_transient_replication | false
hinted_handoff_enabled | true
hints_directory | /home/ec2-user/cassandra/data/hints
incremental_backups | false
initial_token | null
...
...
...
rpc_address | localhost
ssl_storage_port | 7001
start_native_transport | true
storage_port | 7000
stream_entire_sstables | true
(224 rows)
settings
テーブルは、起動後にyamlファイルが変更された場合や、実行中の構成が不明な場合、またはjmx/nodetoolや仮想テーブルを通じて変更されたかどうかを確認する場合に非常に役立ちます。
スレッドプール仮想テーブル
thread_pools
テーブルは、すべてのスレッドプールに関する情報をリストします。スレッドプール情報には、アクティブなタスク、アクティブなタスクの制限、ブロックされたタスク、ブロックされたタスクの総時間、完了したタスク、および保留中のタスクが含まれます。thread_pools
に対するクエリは、以下の詳細を返します。
cqlsh:system_views> select * from system_views.thread_pools;
name | active_tasks | active_tasks_limit | blocked_tasks | blocked_tasks_all_time | completed_tasks | pending_tasks
------------------------------+--------------+--------------------+---------------+------------------------+-----------------+---------------
AntiEntropyStage | 0 | 1 | 0 | 0 | 0 | 0
CacheCleanupExecutor | 0 | 1 | 0 | 0 | 0 | 0
CompactionExecutor | 0 | 2 | 0 | 0 | 881 | 0
CounterMutationStage | 0 | 32 | 0 | 0 | 0 | 0
GossipStage | 0 | 1 | 0 | 0 | 0 | 0
HintsDispatcher | 0 | 2 | 0 | 0 | 0 | 0
InternalResponseStage | 0 | 2 | 0 | 0 | 0 | 0
MemtableFlushWriter | 0 | 2 | 0 | 0 | 1 | 0
MemtablePostFlush | 0 | 1 | 0 | 0 | 2 | 0
MemtableReclaimMemory | 0 | 1 | 0 | 0 | 1 | 0
MigrationStage | 0 | 1 | 0 | 0 | 0 | 0
MiscStage | 0 | 1 | 0 | 0 | 0 | 0
MutationStage | 0 | 32 | 0 | 0 | 0 | 0
Native-Transport-Requests | 1 | 128 | 0 | 0 | 130 | 0
PendingRangeCalculator | 0 | 1 | 0 | 0 | 1 | 0
PerDiskMemtableFlushWriter_0 | 0 | 2 | 0 | 0 | 1 | 0
ReadStage | 0 | 32 | 0 | 0 | 13 | 0
Repair-Task | 0 | 2147483647 | 0 | 0 | 0 | 0
RequestResponseStage | 0 | 2 | 0 | 0 | 0 | 0
Sampler | 0 | 1 | 0 | 0 | 0 | 0
SecondaryIndexManagement | 0 | 1 | 0 | 0 | 0 | 0
ValidationExecutor | 0 | 2147483647 | 0 | 0 | 0 | 0
ViewBuildExecutor | 0 | 1 | 0 | 0 | 0 | 0
ViewMutationStage | 0 | 32 | 0 | 0 | 0 | 0
(24 rows)
ノード間インバウンドメッセージング仮想テーブル
internode_inbound
仮想テーブルは、ノード間のインバウンドメッセージング用です。最初は、ノード間インバウンドメッセージングはリストされない可能性があります。アドレス、ポート、データセンター、ラック情報に加えて、復旧した破損フレーム、復旧されなかった破損フレーム、エラーバイト数、エラーカウント、期限切れバイト数、期限切れカウント、処理済みバイト数、処理済みカウント、受信バイト数、受信カウント、スケジュールされたバイト数、スケジュールされたカウント、スロットルされたカウント、スロットルされたナノ秒、使用中バイト数、使用予約バイト数が含まれます。internode_inbound
に対するクエリは、以下の詳細を返します。
cqlsh:system_views> SELECT * FROM system_views.internode_inbound;
address | port | dc | rack | corrupt_frames_recovered | corrupt_frames_unrecovered |
error_bytes | error_count | expired_bytes | expired_count | processed_bytes |
processed_count | received_bytes | received_count | scheduled_bytes | scheduled_count | throttled_count | throttled_nanos | using_bytes | using_reserve_bytes
---------+------+----+------+--------------------------+----------------------------+-
(0 rows)
SSTablesタスク仮想テーブル
sstable_tasks
は、実行中のタスクに関する情報を取得するために使用できます。次の列をリストします。
cqlsh:system_views> SELECT * FROM sstable_tasks;
keyspace_name | table_name | task_id | kind | progress | total | unit
---------------+------------+--------------------------------------+------------+----------+----------+-------
basic | wide2 | c3909740-cdf7-11e9-a8ed-0f03de2d9ae1 | compaction | 60418761 | 70882110 | bytes
basic | wide2 | c7556770-cdf7-11e9-a8ed-0f03de2d9ae1 | compaction | 2995623 | 40314679 | bytes
別の例として、SSTableタスクの残り時間を調べるには、次のクエリを使用します。
SELECT total - progress AS remaining
FROM system_views.sstable_tasks;
その他の仮想テーブル
その他の仮想テーブルの使用例を以下に示します。
最もディスク使用量が多いテーブルを見つける
cqlsh> SELECT * FROM disk_usage WHERE mebibytes > 1 ALLOW FILTERING;
keyspace_name | table_name | mebibytes
---------------+------------+-----------
keyspace1 | standard1 | 288
tlp_stress | keyvalue | 3211
読み取りレイテンシーが最も大きいテーブルに対するクエリを見つける
cqlsh> SELECT * FROM local_read_latency WHERE per_second > 1 ALLOW FILTERING;
keyspace_name | table_name | p50th_ms | p99th_ms | count | max_ms | per_second
---------------+------------+----------+----------+----------+---------+------------
tlp_stress | keyvalue | 0.043 | 0.152 | 49785158 | 186.563 | 11418.356
例
-
キースペースを一覧表示するには、
cqlsh
を入力し、CQLコマンドDESCRIBE KEYSPACES
を実行します。cqlsh> DESC KEYSPACES; system_schema system system_distributed system_virtual_schema system_auth system_traces system_views
-
仮想テーブルスキーマを表示するには、CQLコマンド
USE system_virtual_schema
とSELECT * FROM tables
を実行します。cqlsh> USE system_virtual_schema; cqlsh> SELECT * FROM tables;
結果は以下のようになります。
keyspace_name | table_name | comment -----------------------+---------------------------+-------------------------------------- system_views | caches | system caches system_views | clients | currently connected clients system_views | coordinator_read_latency | system_views | coordinator_scan_latency | system_views | coordinator_write_latency | system_views | disk_usage | system_views | internode_inbound | system_views | internode_outbound | system_views | local_read_latency | system_views | local_scan_latency | system_views | local_write_latency | system_views | max_partition_size | system_views | rows_per_read | system_views | settings | current settings system_views | sstable_tasks | current sstable tasks system_views | system_properties | Cassandra relevant system properties system_views | thread_pools | system_views | tombstones_per_read | system_virtual_schema | columns | virtual column definitions system_virtual_schema | keyspaces | virtual keyspace definitions system_virtual_schema | tables | virtual table definitions (21 rows)
-
仮想テーブルを表示するには、CQLコマンド
USE system_view
とDESCRIBE tables
を実行します。cqlsh> USE system_view;; cqlsh> DESCRIBE tables;
結果は以下のようになります。
sstable_tasks clients coordinator_write_latency disk_usage local_write_latency tombstones_per_read thread_pools internode_outbound settings local_scan_latency coordinator_scan_latency system_properties internode_inbound coordinator_read_latency max_partition_size local_read_latency rows_per_read caches
-
テーブルデータを見るには、CQLコマンド
SELECT
を実行します。cqlsh> USE system_view;; cqlsh> SELECT * FROM clients LIMIT 2;
結果は以下のようになります。
address | port | connection_stage | driver_name | driver_version | hostname | protocol_version | request_count | ssl_cipher_suite | ssl_enabled | ssl_protocol | username -----------+-------+------------------+------------------------+----------------+-----------|||+------------------+---------------+------------------+-------------+--------------+----------- 127.0.0.1 | 37308 | ready | DataStax Python Driver | 3.21.0.post0 | localhost | 4 | 17 | null | False | null | anonymous 127.0.0.1 | 37310 | ready | DataStax Python Driver | 3.21.0.post0 | localhost | 4 | 8 | null | False | null | anonymous (2 rows)