HAWQ技术解析(十六) —— 运维监控

        与任何IT系统一样,为了保证HAWQ集群的高可用和高性能,需要进行一系列监控与维护活动。本篇讨论HAWQ推荐的运维与监控活动。

一、推荐的监控与维护任务

        表1至表5是HAWQ向系统管理员推荐定期执行的活动,包括系统与数据库监控、数据与数据库的维护、补丁与升级等,目的是要确认系统的所有组件都可以正常工作。监控工作有助于在早期发现和诊断问题。维护任务帮助用户保持系统是最新的,应用了所有错误修复和功能性改进,并且避免性能衰减。例如,解决由于臃肿的系统表或逐渐减少的剩余磁盘空间引发的问题。

        最好但不是必须在每个集群中实施所有的建议。可以根据自身的服务需求,参考执行频率和严重性级别建议,将其作为实施运维监控的指南。

1. 数据库状态监控活动

表1为推荐的数据库监控活动。

活动

过程

改进措施

列出当前down的段。如果返回任何行,这应该生成一个警告。 推荐频率:每5到10分钟运行一次。 重要性:重要

在‘postgres’数据库中运行下面的查询: SELECT * FROM gp_segment_configuration WHERE status <> 'u';

如果查询返回任何行,执行下面的步骤修正问题: 1.  验证down段所在主机有响应。 2.  如果主机OK,为down段检查pg_log文件,寻找段down掉的根本原因。

运行一个分布式查询检测它在所有段上运行。每个段应该返回一行。 推荐频率:每5到10分钟运行一次。 重要性:极为重要

在‘postgres’数据库中执行下面的查询:SELECT gp_segment_id, count(*) FROM gp_dist_random('pg_class') GROUP BY 1;

如果查询失败,说明对集群中某些段的任务分发有问题。这是很少见的情况。检查不能被分派任务的主机,确认没有硬件或网络问题。

执行一个基本的检查,看主节点是否启动并工作。 推荐频率:每5到10分钟运行一次。 重要性:极为重要

在‘postgres’数据库中执行下面的查询: SELECT count(*) FROM gp_segment_configuration;

如果此查询失败,主节点可能down了。重试几次并手工检查主节点的活动。如果主节点down,重启或在主主节点没有遗留进程时激活从主节点。

表1

2. 硬件与操作系统监控

表2为推荐的硬件与系统监控活动。

活动

过程

改进措施

底层平台检查,维护需求或硬件的系统停机。 推荐频率:如果可能,实时,或者每15分钟。 重要性:极为重要

设置硬件和OS错误检查。

如果需要,从HAWQ集群中移除存在硬件或OS问题的主机,解决后在添加回来。

检查HAWQ数据存储和OS的磁盘空间使用情况。 推荐频率:5到30分钟。 重要性:极为重要

设置磁盘空间检查。 . 设置阈值,当磁盘达到使用的百分比产生警告。推荐阈值为全部空间的75%。 . 不推荐空间使用接近100%时运行系统。

删除数据或文件,释放系统空间。

检查网卡错误或删除包 推荐频率:每小时。 重要性:重要

设置网卡检查。

与网络或系统团队一起解决问题。

检查RAID错误或RAID性能衰减。 推荐频率:每5分钟。 重要性:极为重要

设置RAID检查。

. 尽快替换失败的磁盘。 . 与系统管理团队一起尽快解决其它RAID或控制器问题。

检查是否有足够的I/O带宽,或I/O倾斜。 推荐频率:创建集群或怀疑硬件问题时。

运行‘hawq checkperf’应用

如果数据传输率与以下不相似,集群带宽可能不足。 . 每秒2GB的磁盘读 . 每秒1GB的磁盘写 . 每秒10GB的网络读写 如果传输率慢于期望,考虑期望的性能咨询你的架构顾问。 如果集群的机器显示出参差不齐的剖析,与系统管理团队一起解决机器错误。

表2

3. 数据维护

表3为推荐的数据维护活动。

活动

过程

改进措施

检查缺少统计信息的表。

检查每个数据库中的‘hawq_stats_missing’视图:SELECT * FROM hawq_toolkit.hawq_stats_missing;

在缺少统计信息的表上运行ANALYZE。

表3

4. 数据库维护

表4为推荐的数据库维护活动。

活动

过程

改进措施

标记HAWQ系统目录中被删除的行(‘pg_catalog’表模式中的表)以重用它们占用的空间。推荐频率:每天重要性:极为重要

清空每个系统目录:VACUUM <table>;

定期清空系统目录,避免膨胀。

清空所有接近vacuum_freeze_min_age值的系统目录,(‘pg_catalog’模式中的表)推荐频率:每天重要性:极为重要

清空单个系统目录表:VACUUM <table>;

在到达vacuum_freeze_min_age值后,VACUUM扫描表时,不再用FrozenXID替换事务ID。对这些表到达限制之前上执行vacuum。

修改表的统计信息。推荐频率:装载数据后,执行查询前。重要性:极为重要

分析用户表:analyzedb -d <database> -a

定期分析更新的表,使得查询优化器能够产生高效的执行计划。

备份数据库数据。推荐频率:每天或依照备份计划的需求重要性:极为重要

使用PXF

最佳实践是,当数据库必须还原时,有一个当前数据库的备份。

清空系统目录(‘pg_catalog’模式中的表),维护高效目录。推荐频率:每周,如果经常创建或删除数据库对象,可以更频繁。

VACUUM每个数据库的系统表。

优化器从系统表查询信息创建查询计划。如果系统表和索引被允许随着时间膨胀,扫描系统表会增加查询时间。

表4

5. 补丁与升级

表5为推荐的补丁与升级活动。

活动

过程

改进措施

保证任何修复的bug和提升被应用到核心。推荐频率:至少每六个月 重要性:重要

按照厂商的指导更新Linux核心。

保持当前核心包含修复的bug和安全性问题,避免将来困难的升级。

安装HAWQ次要版本 Recommended 推荐频率:每季度 重要性:重要

总是升级到最新的系列。

保持当前的HAWQ软件包含修复的bug,性能提升,以及HAWQ集群的提升特性。

表5

        为保持HAWQ系统高效运行,必须执行这些例行系统维护任务。如数据库必须定期清理过期数据,并且更新表的统计,让查询优化器能够获得精确的信息。HAWQ DBA可以使用标准的类UNIX工具,如cron脚本,自动执行这些任务。脚本至少应该能够提供任务是否执行成功和执行时间等信息,比如使用最简单的输出日志方式实现。

除了系统级的运维,还有一项重要的工作是维护HAWQ日志文件。HAWQ中的每个数据库实例,包括master和segment,都会运行一个PostgreSQL数据库服务器,例如下面ps命令所示的master和segment数据库服务器进程:

gpadmin  655225      1  0 Apr24 ?        00:01:52 /usr/local/hawq_2_1_1_0/bin/postgres -D /data/hawq/master -i -M master -p 5432 --silent-mode=true
gpadmin  655753      1  0 Apr24 ?        00:04:28 /usr/local/hawq_2_1_1_0/bin/postgres -D /data/hawq/segment -i -M segment -p 40000 --silent-mode=true

        每个postgres都有自己的服务器日志文件。HAWQ管理应用程序,例如hawq start和gpfdist,也会生成相应的日志文件。后面会讨论这些日志文件的信息和维护策略。

二、监控HAWQ系统

        观察HAWQ系统的日常性能帮助管理员理解系统行为,计划工作流程,或排查系统问题。可以使用多种工具监控HAWQ,包括系统工具或附加组件。本节讨论监控数据库性能与行为的监控方法。可以脚本化这些监控活动,快速检查系统中存在的问题。

1. hawq_toolkit模式

        hawq_toolkit是HAWQ的一个管理模式,使用与下面类似的命令在模式的查询路径中增加hawq_toolkit模式:

db1=# set role 'gpadmin' ;
SET
db1=# set search_path to public, hawq_toolkit ;
SET
db1=#

        该模式中包含若干可以使用SQL命令访问的视图。

db1=# \dv
                                 List of relations
    Schema    |                   Name                   | Type |  Owner  | Storage 
--------------+------------------------------------------+------+---------+---------
 hawq_toolkit | __hawq_fullname                          | view | gpadmin | none
 hawq_toolkit | __hawq_is_append_only                    | view | gpadmin | none
 hawq_toolkit | __hawq_user_data_tables                  | view | gpadmin | none
 hawq_toolkit | __hawq_user_data_tables_readable         | view | gpadmin | none
 hawq_toolkit | __hawq_user_namespaces                   | view | gpadmin | none
 hawq_toolkit | __hawq_user_tables                       | view | gpadmin | none
 hawq_toolkit | hawq_log_command_timings                 | view | gpadmin | none
 hawq_toolkit | hawq_log_master_concise                  | view | gpadmin | none
 hawq_toolkit | hawq_size_of_all_table_indexes           | view | gpadmin | none
 hawq_toolkit | hawq_size_of_database                    | view | gpadmin | none
 hawq_toolkit | hawq_size_of_index                       | view | gpadmin | none
 hawq_toolkit | hawq_size_of_partition_and_indexes_disk  | view | gpadmin | none
 hawq_toolkit | hawq_size_of_schema_disk                 | view | gpadmin | none
 hawq_toolkit | hawq_size_of_table_and_indexes_disk      | view | gpadmin | none
 hawq_toolkit | hawq_size_of_table_and_indexes_licensing | view | gpadmin | none
 hawq_toolkit | hawq_size_of_table_disk                  | view | gpadmin | none
 hawq_toolkit | hawq_size_of_table_uncompressed          | view | gpadmin | none
 hawq_toolkit | hawq_stats_missing                       | view | gpadmin | none
 hawq_toolkit | hawq_table_indexes                       | view | gpadmin | none
(19 rows)

        可以使用hawq_toolkit模式中的视图查询系统目录表、日志文件、操作环境,以及获取系统状态信息。hawq_toolkit可被所有数据库用户访问,hawq_log_command_timings、hawq_log_master_concise、hawq_size_of_table_and_indexes_licensing、hawq_size_of_table_uncompressed视图的查询需要超级用户权限。

2. 监控系统状态

        HAWQ管理员必须监控系统事件,尤其是如段宕机或段主机磁盘空间不足等严重问题。下面描述如何监控HAWQ系统的健康状况,并检查HAWQ系统的状态信息。

(1)检查系统状态

        一个HAWQ系统由分布于多台机器的多个PostgreSQL实例(master和segment)构成。监控一个HAWQ系统,需要知道系统的整体信息,也要知道单个实例的状态信息。hawq state应用程序提供HAWQ系统的状态信息。

        查看master和segment的状态与配置:hawq state缺省检查segment实例,显示可用segment的和失效segment的简要状态。例如,查看HAWQ系统的状态:

[gpadmin@hdp3 ~]$ hawq state -b
20170427:10:56:54:403768 hawq_state:hdp3:gpadmin-[INFO]:--HAWQ instance status summary
20170427:10:56:54:403768 hawq_state:hdp3:gpadmin-[INFO]:------------------------------------------------------
20170427:10:56:54:403768 hawq_state:hdp3:gpadmin-[INFO]:--   Master instance                                = Active
20170427:10:56:54:403768 hawq_state:hdp3:gpadmin-[INFO]:--   Master standby                                 = hdp2
20170427:10:56:54:403768 hawq_state:hdp3:gpadmin-[INFO]:--   Standby master state                           = Standby host passive
20170427:10:56:54:403768 hawq_state:hdp3:gpadmin-[INFO]:--   Total segment instance count from config file  = 4
20170427:10:56:54:403768 hawq_state:hdp3:gpadmin-[INFO]:------------------------------------------------------ 
20170427:10:56:54:403768 hawq_state:hdp3:gpadmin-[INFO]:--   Segment Status                                    
20170427:10:56:54:403768 hawq_state:hdp3:gpadmin-[INFO]:------------------------------------------------------ 
20170427:10:56:54:403768 hawq_state:hdp3:gpadmin-[INFO]:--   Total segments count from catalog      = 4
20170427:10:56:54:403768 hawq_state:hdp3:gpadmin-[INFO]:--   Total segment valid (at master)        = 4
20170427:10:56:54:403768 hawq_state:hdp3:gpadmin-[INFO]:--   Total segment failures (at master)     = 0
20170427:10:56:54:403768 hawq_state:hdp3:gpadmin-[INFO]:--   Total number of postmaster.pid files missing   = 0
20170427:10:56:54:403768 hawq_state:hdp3:gpadmin-[INFO]:--   Total number of postmaster.pid files found     = 4
[gpadmin@hdp3 ~]$

        -b选项表示简要显示集群状态。也可以使用hawq state的-d选项,显示HAWQ master数据目录的信息:

[gpadmin@hdp3 ~]$ hawq state -d /data/hawq/master/

        该命令的输出与hawq state -b相同。

(2)检查磁盘空间使用

        查看分布式数据库和表的大小:hawq_toolkit管理模式包含几个分别用来确认的HAWQ数据库、模式、表和索引的磁盘空间使用的视图。

        查看数据库的磁盘空间使用:为了查看数据库的总大小(以字节表示),使用hawq_toolkit管理模式中的hawq_size_of_database视图,例如:

db1=# select * from hawq_toolkit.hawq_size_of_database
db1-#  order by sodddatname;
 sodddatname | sodddatsize 
-------------+-------------
 db1         |    16129012
 gpadmin     |    10394524
(2 rows)

        查看一个表使用的磁盘空间:hawq_toolkit管理模式包含几个视图用以查看表大小。表大小视图列出表的对象ID(不是表名)。为了通过表名检查其大小,必须与pg_class表中的关系名(relname)关联查询。例如:

db1=# select relname as name, sotdsize as size, sotdtoastsize as toast, sotdadditionalsize as other
db1-#   from hawq_toolkit.hawq_size_of_table_disk as sotd, pg_class
db1-#  where sotd.sotdoid=pg_class.oid order by relname;
        name         | size | toast | other 
---------------------+------+-------+-------
 sales               |    0 |     0 | 32768
 sales_1_prt_p201701 |   40 |     0 | 98304
 sales_1_prt_p201702 |    0 |     0 | 32768
 sales_1_prt_p201703 |    0 |     0 | 32768
 sales_1_prt_p201704 |    0 |     0 | 32768
 sales_1_prt_p201705 |    0 |     0 | 32768
 sales_1_prt_p201706 |    0 |     0 | 32768
 sales_1_prt_p201707 |    0 |     0 | 32768
 sales_1_prt_p201708 |    0 |     0 | 32768
 sales_1_prt_p201709 |    0 |     0 | 32768
 sales_1_prt_p201710 |    0 |     0 | 32768
 sales_1_prt_p201711 |    0 |     0 | 32768
 sales_1_prt_p201712 |    0 |     0 | 32768
 t                   |   48 |     0 | 98304
(14 rows)

        查看索引使用空间(HAWQ目前不支持索引):hawq_toolkit管理模式包含一些视图用以查看索引大小。查看一个表中所有索引的大小,使用hawq_size_of_all_table_indexes视图。查看一个特定索引的大小,使用hawq_size_of_index视图。索引大小视图通过对象ID列出表和索引(不是通过名字)。为了通过索引名检查其大小,必须与pg_class表中的关系名(relname)关联查询。例如:

db1=# select soisize, relname as indexname
db1-#   from pg_class, hawq_toolkit.hawq_size_of_index
db1-#  where pg_class.oid=hawq_size_of_index.soioid
db1-#    and pg_class.relkind='i';
 soisize | indexname 
---------+-----------
(0 rows)

(3)查看数据库对象的元数据信息

        HAWQ使用它的系统目录跟踪数据库中存储的不同对象(表、视图、索引等等)的元数据信息,还包括角色、表空间等全局对象。

        查看最后执行的操作:可以使用pg_stat_operations和pg_stat_partition_operations系统视图查找一个数据库对象上执行的操作。例如,查看t表何时创建,何时做的最后的分析:

db1=# select schemaname as schema, objname as table,
db1-#      usename as role, actionname as action,
db1-#      subtype as type, statime as time
db1-#    from pg_stat_operations
db1-#    where objname='t';
 schema | table |  role   | action  | type  |             time              
--------+-------+---------+---------+-------+-------------------------------
 public | t     | gpadmin | CREATE  | TABLE | 2017-04-18 15:39:38.858007+08
 public | t     | gpadmin | ANALYZE |       | 2017-04-21 10:16:32.42202+08
(2 rows)

        查看对象定义:可以使用\d元命令显示一个对象的定义,如表或视图。例如,查看一个名为t的表的定义:

db1=# \d t
 Append-Only Table "public.t"
 Column |  Type   | Modifiers 
--------+---------+-----------
 i      | integer | 
Compression Type: None
Compression Level: 0
Block Size: 32768
Checksum: f
Distributed randomly

(4)查看查询工作文件使用信息(文档中提到,但HAWQ 2.1.1的hawq_toolkit中没有找到)

        HAWQ的hawq_toolkit管理模式包含有关HAWQ工作文件信息的视图。当没有足够的内存在内存中执行查询时,HAWQ在磁盘上创建工作文件。工作文件信息常被用于查询的调优和排错。视图中的信息还可以用于为HAWQ配置参数hawq_workfile_limit_per_query和hawq_workfile_limit_per_segment赋值。

        hawq_toolkit模式中的视图包括:

  • hawq_workfile_entries - 当前在段上每个在磁盘上创建工作文件的运算符一行
  • hawq_workfile_usage_per_query - 当前段上每个使用磁盘空间运行的查询一行
  • hawq_workfile_usage_per_segment - 每个段一行,显示当前段上用于工作文件的磁盘空间总计。

3. HAWQ错误代码

        下面讨论描述特定数据库事件的SQL错误代码。

(1)SQL标准错误代码

HAWQ Error Codes列出了所有错误码的定义及其所属的错误分类。有一些没有使用,但是由SQL标准定义。对于每一类错误,有一个包含最后三位字符000的标准错误码。该编码表示错误情况应列入此分类,但没有分配任何特定编码的情况。

        每个错误码的PL/pgSQL条件名与表中描述的相同,只是用下划线代替了空格。例如,错误码22012,DIVISION BY ZERO,条件名是DIVISION_BY_ZERO。条件名可能是大写或小写。

        注意:与错误不同,PL/pgSQL条件名不识别警告,这些分类是00、01和02。

三、HAWQ日志文件管理

        日志文件中包含HAWQ数据库和应用程序部署的相关信息。HAWQ的管理性日志文件保存在预定义或配置的HAWQ节点的本地文件系统上。这些日志文件有各自的位置和格式,被分别配置和管理。

        前面提到,HAWQ中的每个数据库实例(主master、从master、segment)运行一个PostgreSQL数据库进程,该进程有它自己的服务器日志文件。当用户直接运行HAWQ管理应用程序时,或者通过Ambari间接进行管理操作时,会生成相应的日志文件。另外,HAWQ集群中的其它组件(如PXF、HDFS等)也会生成它们自己的日志文件。

        可配的日志参数影响何时、在哪里记录什么消息。可以通过HAWQ服务器配置参数或者命令行选项配置HAWQ管理性日志。

        日志文件能以预定义或配置的时间间隔创建或轮换。注意,管理性日志文件不会自动截断或删除。管理员应该实施定期运行的脚本清除这些日志文件。

1. HAWQ服务器日志文件

(1)HAWQ日志文件位置

        日常日志文件分别在master和segment节点数据目录的pg_log子目录中被创建。可以从$GPHOME/etc/hawq-site.xml配置文件中的hawq_master_directory和hawq_segment_directory属性值获得master与segment数据目录的位置。

        HAWQ数据库服务器日志文件的命名习惯是hawq-<date>_<time>.[csv|log]。例如hawq-2017-01-02_061611.csv或hawq-2017-01-03_001704.log。目前,一个给定日期的日志文件的数量和大小,依赖于HAWQ服务器相关配置参数的值。

(2)HAWQ日志格式

        HAWQ服务器日志文件是文本或是逗号分隔值(CSV)格式,日志条目可能包括表6中所示的字段。

#

字段名

数据类型

描述

1

event_time

timestamp with time zone

日志条目写入时间

2

user_name

varchar(100)

数据库用户名

3

database_name

varchar(100)

数据库名

4

process_id

varchar(10)

系统进程ID(以“p”为前缀)

5

thread_id

varchar(50)

线程ID(以“th-”为前缀)

6

remote_host

varchar(100)

客户端机器的主机名/IP(如果在主节点上)。或主节点的主机名/IP(如果在段节点上)。

7

remote_port

varchar(10)

段或主节点的端口号

8

session_start_time

timestamp with time zone

会话连接打开的时间

9

transaction_id

int

主节点上的最上级的事务ID;是任何子事务的父ID。

10

gp_session_id

text

会话标识号(以“con”为前缀)

11

gp_command_count

text

一个会话中的命令数(以“cmd”为前缀)

12

gp_segment

text

段内容标识符。主节点的内容标识符恒为-1。

13

slice_id

text

片段ID(查询计划中被执行的部分)

14

distr_tranx_id

text

分布式事务标识符

15

local_tranx_id

text

本地事务标识符

16

sub_tranx_id

text

子事务标识符

17

event_severity

varchar(10)

时间重要性,值包括:LOG、ERROR、FATAL、PANIC、DEBUG1、DEBUG2

18

sql_state_code

varchar(10)

SQL状态代码

19

event_message

text

日志或错误消息文本

20

event_detail

text

错误或警告消息相关的详细消息文本

21

event_hint

text

错误或警告消息相关的提示消息文本

22

internal_query

text

内部生成的查询文本

23

internal_query_pos

int

内部生成的查询文本的游标索引

24

event_context

text

此消息生成的上下文

25

debug_query_string

text

用于debug的用户提供的查询字符串。此字符串在内部使用时可能会被修改。

26

error_cursor_pos

int

查询字符串的游标索引

27

func_name

text

生成此消息的函数

28

file_name

text

原始消息所在的源文件名称

29

file_line

int

原始消息所在源文件中的行号

30

stack_trace

Text

消息相关的堆栈跟踪文本

表6

        注意:日志条目可能不包括所有日志字段的值。例如,slice_id字段只存在于查询工作进程相关的日志条目中。

(3)检查HAWQ日志文件

        在诊断问题或获取HAWQ部署信息时都可能需要检查HAWQ日志文件。

        使用transaction_id识别事务相关的日志条目。通过查询的会话标识符gp_session_id和命令标识符gp_command_count,可以识别特定查询相关的日志条目。或者,当gp_log_format服务器配置参数值配置为csv格式的日志文件时,可以使用hawq_toolkit管理模式查询HAWQ日志文件例如,下面的hawq_toolkit查询显示所有名为mytest数据库的ERROE日志相关的时间和消息:

select logtime, logmessage from hawq_toolkit.hawq_log_master_concise 
 where logdatabase='mytest' and logseverity='error';

(4)在HAWQ日志文件查找

        使用HAWQ的gplogfilter应用查找一个HAWQ日志文件中与特性条件匹配的条目。缺省时,这个应用查找缺省位置的HAWQ主节点日志文件。例如,显示2017年3月1日14点之后的主节点日志文件条目:

[gpadmin@hdp3 ~]$ gplogfilter -b '2017-03-01 14:00'

        使用hawq ssh应用运行gplogfilter,能同时查找所有segment日志文件。例如,创建一个<seg_hosts>文件,包含所有感兴趣的segment主机,然后执行gplogfilter显示每个segment主机的每个日志文件的最后三行。

[gpadmin@hdp1 ~]$ echo -e "hdp1\nhdp2\nhdp3\nhdp4\n" > seg_hosts
[gpadmin@hdp1 ~]$ hawq ssh -f seg_hosts
=> source /usr/local/hawq/greenplum_path.sh
=> gplogfilter -n 3 /data/hawq/segment/pg_log/hawq*.csv

(5)配置HAWQ日志

        可以使用HAWQ服务器日志参数配置HAWQ服务器对日志的操作。这些配置参数相互协调,一起决定何时哪些信息被记录的HAWQ的服务器日志文件中。如果启用了日志轮转,可以通过HAWQ服务器配置参数控制轮转操作。HAWQ还提供了一系列服务器配置参数专门处理GPORCA查询执行器和优化器日志。

        表7-9汇总了服务器日志、日志轮转、查询执行器和查询优化器日志相关的配置参数。

服务器配置参数

描述

client_min_messages

标识客户端消息的日志级别。

debug_pretty_print

Debug输出的缩进格式,增强可读性。

gp_log_format

定义服务器日志文件格式。

gp_max_csv_line_length

设置csv文件的最大行长。

log_autostats

记录自动统计生成信息。

log_connections

记录客户端连接。

log_disconnections

记录客户端终止连接。

log_dispatch_stats

与语句调度相关的日志信息。

log_duration

记录语句执行时间。

log_error_verbosity

定义日志细节程度。

log_hostname

记录连接的主机名。

log_min_duration_statement

配置最小执行时间,小于该时间的语句不记日志。

log_min_error_statement

记录引发错误的SQL语句。

log_min_messages

日志文件的日志级别。

log_statement

控制日志中记录哪些SQL语句。

log_timezone

设置日志文件时间戳的时区。

表7 日志相关参数

服务器配置参数

描述

log_rotation_age

配置日志文件生命周期。

log_rotation_size

配置日志文件最大尺寸。

log_truncate_on_rotation

表示日志轮转时是否清空。

表8 日志轮转参数

服务器配置参数

描述

debug_print_parse

记录查询解析树。

debug_print_plan

记录查询计划。

debug_print_prelim_plan

记录初步查询计划。

debug_print_rewritten

记录查询重写输出。

debug_print_slice_table

记录查询计划分片。

log_executor_stats

记录查询执行器性能统计。

log_parser_stats

记录查询编译器性能统计。

log_planner_stats

记录遗留老优化器(planner)的性能统计。

log_statement_stats

记录编译器、执行器、优化器总的性能统计。

表9 查询执行器和查询优化器日志相关参数

(6)管理HAWQ日志文件

        HAWQ日志的输出往往很庞大,尤其是debug级别高时。因此不应该无限期地保存这些信息。通常HAWQ管理员会配置HAWQ定期轮转日志文件,创建新的日志文件。

日常的日志文件被创建在master和segment数据目录下的pg_log子目录中。尽管日志文件日常轮转,但它们不会自动截断或删除。管理员必须实现并运行脚本,定期清理主master、从master和每个segment实例上老的日志文件。例如以下命令删除master节点30天前的日志文件。

find /data/hawq/master/pg_log/ -mtime +30 -name "*.csv" -exec rm -rf {} \;

2. 应用程序的日志文件

        从命令行或使用Ambari用户界面执行集群管理动作时,会调用HAWQ应用程序。无论从哪里执行管理动作,这些应用都会记录命令执行状态及结果的日志信息。消息输出到标准输出,同时被记录到日志文件中。

        一个应用被调用时,创建并维护一个“每天”日志文件。特定应用的执行日志,在应用每次运行时追加到它当天的日志文件中。

        注意:某些应用调用其它一个或多个应用。例如,hawq restart调用hawq stop和hawq start。此时日志被写入到调用的两个应用的日志文件中。

(1)应用程序日志文件的位置

        HAWQ应用日志文件的缺省位置是/home/gpadmin/hawqAdminLogs/。可以选择指定一个其它的日志文件目录。

        HAWQ应用日志文件的命名习惯是<cmdname>_<date>.log。例如,hawq_state_20170102.log或hawq_start_20161228.log。

(2)应用程序日志文件的格式

        HAWQ应用日志文件以文本格式写入,日志条目构成如下:<date>:<time>:<pid> <cmdname>:<host>:<user>-[<loglevel>]:-<message>

        日志条目字段描述如表10所示。

日志条目字段

描述

date

条目被记录的日期(月、日、年)

time

条目被记录的时间

pid

与命令相关的进程号

cmdname

HAWQ管理应用名

host

命令执行所在主机

user

调用命令的用户名

loglevel

日志级别,是DEBUG、INFO、WARN、FATAL之一。缺省的日志级别是INFO,有更多的重要消息。

message

日志消息

表10

        注意:某些特殊管理应用命令的日志文件,例如hawq init,格式与惯例不同。

(3)检查应用程序日志条目

        可以从HAWQ应用日志文件获得更多关于命令执行的细节信息。另外,特定命令最近的日志文件提供了命令被最后调用的日期/时间及其状态信息。

(4)配置应用程序日志

        所有应用都支持详细输出和文件目录日志选项:

  • -l | –logdir <dir>:指定日志所在目录
  • -v | –verbose:输出中包括DEBUG日志消息。

        执行应用命令的--help选项,确认命令是否支持改变日志目录和输出内容的详细程度。

(5)管理应用程序日志文件

        与服务器日志一样,尽管日志文件日常轮转,但它们不会自动截断或删除。管理员必须实现并运行脚本或程序,定期清理老的管理应用日志文件。

3. 查询Minidump日志文件

        可以配置HAWQ GPORCA查询优化器生成minidump导出文件,描述给定查询的优化上下文。(minidump里的信息不是一种能够轻易理解的格式。它主要的使用场景是生成并提供minidump文件给HAWQ开发或支持团队。)

        GPORCA minidump包括以下与查询相关的信息:

  • GPORCA所需要的包含数据类型、表、操作符和统计信息的目录对象。
  • 一个查询的内部表示。
  • 一个GPORCA生成的查询计划的内部表示。
  • 传给GPORCA的系统配置信息,包括服务器配置参数,成本与统计配置,段的数量等。
  • 查询优化时生成的错误跟踪堆栈。

        在HAWQ主节点数据目录的minidumps子目录中生成查询的minidump文件。minidump文件命名习惯是Minidump_<date>_<time>_<gp_session_id>_<gp_command_count>.mdp,例如Minidump_20170102_213701_904_12.mdp。

        使用HAWQ的optimizer_minidump服务器配置参数配置生成minidump。缺省只在产生错误时生成minidump文件。

4. PXF日志文件

        PXF提供了服务和数据库两种级别的日志。PXF日志的配置于管理信息参见PXF Logging

5. Ambari日志文件

        Ambari日志文件可以用于帮助诊断一般的集群问题。Ambari服务器日志文件位于/var/log/ambari-server/目录下。Ambari代理日志文件位于/var/log/ambari-agent/。更多信息参见Ambari Troubleshooting Guide

6. Hadoop日志文件

        Hadoop日志文件由Hadoop管理。如果从源码编译生成的Hadoop,日志文件位置和配置由编译时指定的编译或安装选项所确定。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Spark学习技巧

HBase的region管理

HBase 内置的处理拆分和合并的机制一般是合理的,并且它们按照预期处理任务,但在有些情况下,还是需娶按照应用需求对这部分功能进行优化以获得额外的性能改善。 ...

3977
来自专栏技术之路

[个人翻译]Redis 集群教程(中)

官方原文地址:https://redis.io/topics/cluster-tutorial 水平有限,如果您在阅读过程中发现有翻译的不合理的地方,请留言,我...

1998
来自专栏云计算D1net

x86与x64的区别,云服务器如何选择操作系统?

云服务器中windows系列系统通常都有x86与x64两个版本。x86与x64有什么区别?云服务器用户该如何选择操作系统? ? x86与x64的区别: 1、x...

38610
来自专栏简单聊聊Spark

Spark内核分析之Worker原理分析

        接着上篇的Schedule调度内容,本篇我们来看看Driver,Application向Worker发送launch以后到底发生了什么。先来看看...

733
来自专栏开源优测

Linux下常用的监控工具和命令

如果性能测试的目标服务器是linux系统,在如何使用linux自带的命令来实现性能测试过程的监控分析呢?

942
来自专栏数据和云

Oracle公共云中的MySQL InnoDB集群(2)

在本系列的第一部分 Oracle公共云中的MySQL InnoDB集群,我们学习了如何使用Oracle Cloud配置InnoDB集群。 本文我们将了解如何以及...

3254
来自专栏吴柯的运维笔记

如何部署缓存数据库Redis ?

Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings)...

2967
来自专栏决胜机器学习

《Redis设计与实现》读书笔记(二十九) ——Redis集群执行命令与重新分片

《Redis设计与实现》读书笔记(二十九) ——Redis集群执行命令与重新分片 (原创内容,转载请注明来源,谢谢) 一、集群中执行命令 1、节点对命令的判断 ...

2936
来自专栏北京马哥教育

SQLite这么娇小可爱,不多了解点都不行啊

简介 SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统。它的设计目标是嵌入式的,目前Android和iOS的设备内置的都是SQLite数...

3298
来自专栏散尽浮华

Nginx+upstream针对后端服务器容错的运维笔记

熟练掌握Nginx负载均衡的使用对运维人员来说是极其重要的!下面针对Nignx负载均衡upstream容错机制的使用做一梳理性说明: 一、nginx的upstr...

5859

扫码关注云+社区