管理数据收集日志
启动时,Vertica 在每个节点的数据库编录目录下创建一个 DataCollector
目录。对于各个组件,此目录包含一个或多个日志。例如:
[dbadmin@doch01 DataCollector]$ pwd
/home/dbadmin/VMart/v_vmart_node0001_catalog/DataCollector
[dbadmin@doch01 DataCollector]$ ls -1 -g Lock*
-rw------- 1 verticadba 2559879 Aug 17 00:14 LockAttempts_650572441057355.log
-rw------- 1 verticadba 614579 Aug 17 05:28 LockAttempts_650952885486175.log
-rw------- 1 verticadba 2559895 Aug 14 18:31 LockReleases_650306482037650.log
-rw------- 1 verticadba 1411127 Aug 17 05:28 LockReleases_650759468041873.log
对于每个组件,DataCollector 目录还包含一对 SQL 模板文件:
-
CREATE_component_TABLE.sql
提供用于创建表的 DDL,您可以在其中加载给定组件的数据收集器日志 — 例如,LockAttempts:[dbadmin@doch01 DataCollector]$ cat CREATE_LockAttempts_TABLE.sql \set dcschema 'echo ${DCSCHEMA:-dc}' CREATE TABLE :dcschema.dc_lock_attempts( "time" TIMESTAMP WITH TIME ZONE, "node_name" VARCHAR(128), "session_id" VARCHAR(128), "user_id" INTEGER, "user_name" VARCHAR(128), "transaction_id" INTEGER, "object" INTEGER, "object_name" VARCHAR(128), "mode" VARCHAR(128), "promoted_mode" VARCHAR(128), "scope" VARCHAR(128), "start_time" TIMESTAMP WITH TIME ZONE, "timeout_in_seconds" INTEGER, "result" VARCHAR(128), "description" VARCHAR(64000) );
-
COPY_component_TABLE.sql
包含用于(通过 COPY)将数据日志文件加载到 CREATE 脚本所创建的表中的 SQL。例如:[dbadmin@doch01 DataCollector]$ cat COPY_LockAttempts_TABLE.sql \set dcpath 'echo ${DCPATH:-$PWD}' \set dcschema 'echo ${DCSCHEMA:-dc}' \set logfiles '''':dcpath'/LockAttempts_*.log''' COPY :dcschema.dc_lock_attempts( LockAttempts_start_filler FILLER VARCHAR(64) DELIMITER E'\n', "time_nfiller" FILLER VARCHAR(32) DELIMITER ':', "time" FORMAT '_internal' DELIMITER E'\n', "node_name_nfiller" FILLER VARCHAR(32) DELIMITER ':', "node_name" ESCAPE E'\001' DELIMITER E'\n', "session_id_nfiller" FILLER VARCHAR(32) DELIMITER ':', "session_id" ESCAPE E'\001' DELIMITER E'\n', "user_id_nfiller" FILLER VARCHAR(32) DELIMITER ':', "user_id" FORMAT 'd' DELIMITER E'\n', "user_name_nfiller" FILLER VARCHAR(32) DELIMITER ':', "user_name" ESCAPE E'\001' DELIMITER E'\n', "transaction_id_nfiller" FILLER VARCHAR(32) DELIMITER ':', "transaction_id" FORMAT 'd' DELIMITER E'\n', "object_nfiller" FILLER VARCHAR(32) DELIMITER ':', "object" FORMAT 'd' DELIMITER E'\n', "object_name_nfiller" FILLER VARCHAR(32) DELIMITER ':', "object_name" ESCAPE E'\001' DELIMITER E'\n', "mode_nfiller" FILLER VARCHAR(32) DELIMITER ':', "mode" ESCAPE E'\001' DELIMITER E'\n', "promoted_mode_nfiller" FILLER VARCHAR(32) DELIMITER ':', "promoted_mode" ESCAPE E'\001' DELIMITER E'\n', "scope_nfiller" FILLER VARCHAR(32) DELIMITER ':', "scope" ESCAPE E'\001' DELIMITER E'\n', "start_time_nfiller" FILLER VARCHAR(32) DELIMITER ':', "start_time" FORMAT '_internal' DELIMITER E'\n', "timeout_in_seconds_nfiller" FILLER VARCHAR(32) DELIMITER ':', "timeout_in_seconds" FORMAT 'd' DELIMITER E'\n', "result_nfiller" FILLER VARCHAR(32) DELIMITER ':', "result" ESCAPE E'\001' DELIMITER E'\n', "description_nfiller" FILLER VARCHAR(32) DELIMITER ':', "description" ESCAPE E'\001' ) FROM :logfiles RECORD TERMINATOR E'\n.\n' DELIMITER E'\n';
日志管理元函数
您可以使用 Vertica 元函数 FLUSH_DATA_COLLECTOR 和 CLEAR_DATA_COLLECTOR 管理数据收集器日志。这两个函数都可以指定单个组件,也可以对所有组件执行:
-
FLUSH_DATA_COLLECTOR 等待内存日志移至磁盘后,刷新数据收集器,同时将日志与磁盘存储同步。例如,对所有组件执行以下语句:
=> SELECT flush_data_collector(); flush_data_collector ---------------------- FLUSH (1 row)
-
CLEAR_DATA_COLLECTOR 清除数据收集器表和日志中的所有内存及磁盘记录,并重置 DATA_COLLECTOR 系统表中的收集统计信息。例如,对为 ResourceAcquisitions 组件收集的数据执行以下语句:
=> SELECT clear_data_collector('ResourceAcquisitions'); clear_data_collector ---------------------- CLEAR (1 row)