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

记录协调器读取的计数、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 虚拟表

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 虚拟表

caches 虚拟表列出有关缓存的信息。目前创建的四个缓存是 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)

如果 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)

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)