虛擬表格
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
鍵空間有三個表格: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 |
記錄協調器讀取的次數、鍵空間名稱、資料表名稱、最大值、中位數和每秒次數。 |
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 enableoldprotocolversions
和nodetool 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
範例
-
若要列出鍵值空間,請輸入
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)