Cassandra 文件

版本

您正在檢視預發行版本的說明文件。

虛擬表格

Apache Cassandra 4.0 實作虛擬表格 (CASSANDRA-7622)。虛擬表格是表格,由 API 支援,而不是明確管理和儲存為 SSTable 的資料。Apache Cassandra 4.0 為虛擬表格實作虛擬鍵空間介面。虛擬表格特定於每個節點。

虛擬表格的一些功能包括

  • 透過 CQL 公開指標

  • 公開 YAML 設定資訊

虛擬鍵空間和表格與一般表格和鍵空間非常不同

  • 虛擬表格建立在特殊鍵空間中,而不在任何鍵空間中。

  • 虛擬表格由 Cassandra 管理。使用者無法執行 DDL 來建立新的虛擬表格或 DML 來修改現有的虛擬表格。

  • 虛擬表格目前是唯讀的,儘管這可能會在後續版本中變更。

  • 虛擬表格僅限於本機,不分散,因此不會複製。

  • 虛擬表格沒有關聯的 SSTable。

  • 傳送至虛擬表格的查詢一致性層級會被忽略。

  • 所有現有的虛擬表格都使用 LocalPartitioner。由於虛擬表格未複製,因此分割器會按分割鍵順序排序,而不是按其雜湊排序。

  • 即使在一般表格中不建議使用,也可以在虛擬表格中執行使用 ALLOW FILTERING 和聚合函數的高階查詢。

虛擬鍵空間

Apache Cassandra 4.0 已為虛擬表格新增兩個新的鍵空間

  • system_virtual_schema

  • system_views.

system_virtual_schema 鍵空間有三個表格:keyspacescolumnstables,分別用於虛擬鍵空間、表格和欄位定義。這些表格包含虛擬表格的架構資訊。它由 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

記錄協調器讀取的次數、鍵空間名稱、資料表名稱、最大值、中位數和每秒次數。

coordinator_scan

記錄協調器掃描的次數、鍵空間名稱、資料表名稱、最大值、中位數和每秒次數。

coordinator_write_latency

記錄協調器寫入的次數、鍵空間名稱、資料表名稱、最大值、中位數和每秒次數。

disk_usage

記錄磁碟使用量,包括磁碟空間、鍵空間名稱和資料表名稱,並依系統鍵空間排序。

internode_inbound

列出內部節點傳入訊息相關資訊。

internode_outbound

內部節點傳出訊息相關資訊。

local_read_latency

記錄本地讀取的次數、鍵空間名稱、資料表名稱、最大值、中位數和每秒次數。

local_scan

記錄本地掃描的次數、鍵空間名稱、資料表名稱、最大值、中位數和每秒次數。

local_write_latency

記錄本地寫入的次數、鍵空間名稱、資料表名稱、最大值、中位數和每秒次數。

max_partition_size

資料表指標,用於最大區段大小。

rows_per_read

記錄讀取列的次數、鍵空間名稱、資料表名稱、最大值和中位數。

settings

顯示 cassandra.yaml 中的組態設定。

sstable_tasks

列出目前執行的任務和 SSTable 的進度,例如壓縮和升級等作業。

system_logs

如果透過 logback.xml 中的 CQLLOG 附加程式記錄,則顯示 Cassandra 記錄。

system_properties

顯示節點上設定的環境系統屬性。

thread_pools

列出各執行緒池的指標。

tombstones_per_read

記錄墓碑的次數、鍵空間名稱、資料表名稱、最大值和中位數。

為了提升可用性,從 CASSANDRA-18238 開始,當 CQL 規格需要時,會將 ALLOW FILTERING 隱含地新增至 system_logs 以外的所有資料表查詢。

接下來我們將更詳細地討論一些虛擬資料表。

Clients 虛擬資料表

clients 虛擬資料表列出所有活動連線(已連線客戶端),包括其 IP 位址、連接埠、客戶端選項、連線階段、驅動程式名稱、驅動程式版本、主機名稱、通訊協定版本、要求次數、已啟用 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。

虛擬表格可以使用 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 虛擬表格列出有關快取的資訊。目前建立的四個快取為區塊、計數器、金鑰和列。對 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)

如果 yaml 檔案自啟動以來已變更,而且不知道執行中的組態,或者要找出它們是否已透過 jmx/nodetool 或虛擬表格修改,則 settings 表格會非常有用。

執行緒池虛擬表格

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)

SSTable 工作虛擬表

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

找出讀取延遲最長的表格/s 上的查詢

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)