Cassandra ドキュメント

バージョン

プレリリース版のドキュメントを表示しています。

仮想テーブル

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 つのテーブル (keyspacescolumns、および 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 enableoldprotocolversionsnodetool 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

  1. キースペースを一覧表示するには、cqlshを入力し、CQLコマンドDESCRIBE KEYSPACESを実行します。

    cqlsh> DESC KEYSPACES;
    system_schema  system          system_distributed  system_virtual_schema
    system_auth    system_traces   system_views
  2. 仮想テーブルスキーマを表示するには、CQLコマンドUSE system_virtual_schemaSELECT * 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)
  3. 仮想テーブルを表示するには、CQLコマンドUSE system_viewDESCRIBE 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
  4. テーブルデータを見るには、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)