介绍
Trafodion资料库(Repository)实例是一个数据仓库,用于从Trafodion数据库实例收集可管理数据。在Trafodion集群中的每个数据库实例都包含一个资料库(Repository)schema("_REPOS_"),它用来承载资料库(Repository)的表。为了从资料库(Repository)检索数据,DBA或者终端用户可以使用Trafodion命令接口(TrafCI)或者任何第三方工具(如DbVisualizer或者SQuirreL SQL用户端)来直接查询资料库(Repository)中的表。与性能指标相关的,如查询的基本信息、统计信息和会话信息都存储在资料库(Repository)的表中。
参见总体流程架构图, 来获取发布到资料库(Repository)表中的数据和通过log4ccp或者log4j写入日志文件的事件的相关知识。
资料库(Repository)的结构与特点
Trafodion平台上的组件将生成针对数据库对象的性能数据、事件数据(如错误消息或状态变化),以及各种统计数据。组件使用消息(publications)来传输数据,这种消息是一种数据结构,它能定义域,用以中止传输或者发布的数据。这些通过消息(publication)传输的数据会被写入资料库(Repository)各表相应的列中。参见下图。
资料库(Repository)中的Schema和Table的定义
在资料库(Repository)中的所有的表都在"_REPOS_" schema下。目前,该库包含如下表:
表名 | 描述 |
---|---|
METRIC_QUERY_AGGR_TABLE | 该表包含短查询的统计信息,这些统计信息已被聚合成一条记录,并在每次聚合时间间隔结束时写入到资料库(Repository)中。表中字段的描述,请参见METRIC_QUERY_AGGR_TABLE (Release 1.1)。 如果你使用的是 Trafodion Release 1.0版, 请参见 METRIC_QUERY_AGGR_TABLE (Release 1.0)。 |
METRIC_QUERY_TABLE | 该表存储执行时间超过配置时间间隔的查询的统计信息,这些信息在查询编译和执行过程中收集。表中字段的描述,请参见METRIC_QUERY_TABLE (Release 1.1)。 如果你使用的是 Trafodion Release 1.0版, 请参见 METRIC_QUERY_TABLE (Release 1.0)。 |
METRIC_SESSION_TABLE | 该表提供访问ODBC和JDBC的会话的统计信息。这些信息是在客户端连接Trafodion数据库实例时收集的。会话统计信息包括每一个客户端会话的开始和结束数据。表中字段的描述,请参见 METRIC_SESSION_TABLE (Release 1.1)。 如果你使用的是 Trafodion Release 1.0版, 请参见 METRIC_SESSION_TABLE (Release 1.0)。 |
METRIC_TEXT_TABLE | 该表作为保留,供未来使用。 表中字段的描述,请参见 METRIC_TEXT_TABLE (Release 1.1)。 该表在Trafodion Release 1.0版中不存在。 |
有关更多资料库(Repository)中字段的描述,请参阅:
- 共用列, 这里出现在每张资料库(Repository)表中的列。 如果你使用的是Trafodion Release 1.0版,请参见 共用列 (Release 1.0)。
- STATEMENT_TYPE,这是在 METRIC_QUERY_TABLE中的一个字段。 如果你使用的是Trafodion Release 1.0版,请参见STATEMENT_TYPE (Release 1.0)。
资料库(Repository)入门
安装
资料库(Repository)在Trafodion安装完成后便已被自动安装。
字符集支持
所有资料库(Repository)字符数据均使用UTF8编码。
启用/禁用向资料库(Repository)发布消息
在默认的情况下,是启用发布消息的。你可以通过设置DCS服务器属性来禁用发布统计消息:在dcs-site.xml
文件中,设置dcs.server.user.program.statistics.enabled
, 为'false'
,然后重新启动DCS服务器。更多信息,请参阅Trafodion 数据库连接服务参考指南。
配置资料库(Repository)
发布到资料库(Repository)的统计信息可以是:
- 会话统计信息, 在会话结束时发布。
- 聚合统计信息, 在会话过程中,根据预先设置的聚合时间间隔进行聚合和发布。默认的时间间隔是60秒。
- 查询统计信息, 在查询开始时发布,并在查询结束时更新。默认情况下,仅针对执行时间超过60秒的查询发布统计信息。
你可以通过设置属性来配置写入到资料库(Repository)中的统计信息的类型。在dcs-site.xml
文件中,设置dcs.server.user.program.statistics.type
值为下表类型之一,然后重新启动DCS服务器:
统计信息类型 | 描述 |
---|---|
'aggregated' (默认) | 此设置会导致所有查询语句的会话统计信息和聚合统计信息发布到资料库(Repository)中。只有在执行的查询语句时长超过预先设置的时间限制(默认情况下为60秒)的,其统计信息才会被发布。这个时间间隔可以在dcs-site.xml 文件中配置。 |
'session' | 此设置会导致仅会话统计信息发布到资料库(Repository)中。聚合和查询语句的统计信息将不会被发布。 |
关于设置上述以及其他统计信息属性的更多信息,请参阅Trafodion数据库连接服务参考指南。
注: Trafodion Release 1.0 版支持 'query'
的设置, 这将导致所有 查询语句的会话统计信息和查询统计信息都被发布到资料库(Repository),但聚合统计信息却不能被发布。此设置在 Trafodion Release 1.1版和后续版本不再支持。
资料库(Repository)升级
资料库(Repository)中表的重建可以通过Trafodion安装或者执行'initialize trafodion, upgrade'
命令来实现。
资料库(Repository)数据的时效
作为系统管理的一部分,应该包括维护资料库中的表以清理过期的数据。这种类型的操作是资源密集型,所以应该将资料库定期维护的日程表整合进你的企业级操作中,这样会优化进程。
注: 使资料库(Repository)中老数据过期暂不支持,但会是未来版本的一部分。
创建资料库(Repository)查询的范例和准则
参见 创建资料库(Repository)查询的范例和准则,对现有的资料库(Repository)表执行一些简单的查询。该页面还提供了编写信息库查询语句的一些建议。
记录事件
Trafodion组件使用log4cpp和log4j来记录错误或者事件信息。默认情况下,所有信息都被记录到日志文件中。日志文件包括:
- 来自SQL子组件和主执行进程的消息。
- 从事务管理器(TMs)收集的信息。
- 关于系统潜在问题的综合信息。如,SQL错误、从某一组件得到的配置文件错误。
- 专门针对SQL错误的信息。如,查询ID生成的错误、描述的错误、或者catalog、schema和table的名字生成的错误。
配置文件的位置
Trafodion配置文件位于$MY_SQROOT/conf文件夹。 从Trafodion Release 1.1版开始,针对Trafodion的每个子组件都有对应的配置文件,用来记录事件。
配置文件名称 | 组件 |
---|---|
log4cpp.trafodion.masterexe.config | SQL master executor/compiler/ESPs |
log4cpp.trafodion.ssmp.config | SQL ssmp |
log4cpp.trafodion.sscp.config | SQL sscp |
log4cpp.trafodion.lob.config | SQL lobserver |
log4cpp.trafodion.udr.config | SQL udr |
log4cpp.monitor.mon.config | Monitor |
log4cpp.monitor.mon.snmp.config | Monitor Critical |
log4cpp.monitor.pstartd.config | Process Starup Daemon |
log4cpp.monitor.wdg.config | Watchdog process messages |
log4cpp.monitor.wdg.snmp.config | Watchdog process critical |
log4cpp.tm.config | Transaction Manager Client |
log4j.dtm.config | Transactional Server |
log4j.hdfs.config | Hadoop/HDFS/Hbase layer |
注: 在Trafodion Release 1.0版,所有配置文件使用默认的日志级别 'ERROR'。
日志文件的位置
Trafodion日志文件位于$MY_SQROOT/logs 文件夹。每个主执行进程都会生成一个日志文件。日志文件的格式和信息如下:
master_exec_<node number>_<Process Id>.log:<Timestamp>, <Log Level>, <Component>, <Node Number>, <CPU>, <Process Id>, <Process Name>, <SQL Error code>, <Query Id>, <Message Text>
检索日志文件
每一个主执行进程的日志文件都被放置在当前执行的进程的节点上。因此,在该集群的每个节点上将有一组不同的master_exec_*.log文件。排查可能发生在该集群上任何地方的问题,你将需要每个节点上的所有日志文件。为了达成这个目的,Trafodion实现了一个表-值函数,它提供了一个访问这些日志文件目录的SQL接口。它会读取该集群中所有日志文件并生成一个可被看作是SQL表的输出。每个事件都是一个独立的行。该表的列取决于所提供的选项。 调用该函数的SQL语法如下:
select * from udf(event_log_reader( [options] ));
可选参数 [options] 是一个字符常量。它可被设置为:
f:添加文件名称到输出列(参考下文)
返回列:
log_ts timestamp(6), severity char(10 bytes) character set utf8, component char(24 bytes) character set utf8, node_number integer, cpu integer, pin integer, process_name char(12 bytes) character set utf8, sql_code integer, query_id varchar(200 bytes) character set utf8, message varchar(4000 bytes) character set utf8 如果指定选项 "f",我们会得到额外的4列: log_file_node integer not null, log_file_name varchar(200 bytes) character set utf8 not null, log_file_line integer not null, parse_status char(2 bytes) character set utf8 not null (log_file_node, log_file_name, log_file_line) 在结果表中形成唯一键值。parse_status表示在读取信息中,是否含有任何错误: ' ' (两个空格): 没有错误 'E' (作为第一或第二个字符): 解析错误 'T' (作为第一或第二个字符): 发生截断或溢出 'C' (作为第一或第二个字符): 字符转换错误
捕获事件信息的查询样本
要查看按照时间顺序,在指定时间间隔中,发生的唯一约束冲突的事件,可以使用如下查询语句:
select log_ts, process_name, cast(message as char(100)) from udf(event_log_reader()) where sql_code = 8102 and log_ts between timestamp '2015-01-04 12:00:00' and timestamp '2015-01-04 13:00:00' order by log_ts;
这个查询报告在指定的一天汇总执行错误的数量(sql_code的值在8000~9000之间):
select sql_code, count(*) from udf(event_log_reader()) where log_ts between timestamp '2015-01-04 00:00:00' and timestamp '2015-01-04 23:59:59' and sql_code between 8000 and 9000 group by sql_code order by sql_code;
这个查询报告每个主执行进程启动的编译进程的数量:
select process_name, count(*) from udf(event_log_reader()) where message like '%A compiler process is launched%' and severity = 'INFO' group by process_name ;
这个查询报告在指定时间间隔中生成的所有丢失统计信息的警告。这个输出可以通过执行UPDATE STATISTICS命令来改善未来运行相同工作负载的计划的质量。
select message from udf(event_log_reader()) where log_ts between timestamp '2015-01-27 00:00:00' and timestamp '2015-01-27 23:59:59' and sql_code in (6007, 6008) ;