检修性能问题

    这一主题列出了可以帮助用户确定性能问题原因的步骤。如果问题影响了一种特定的负载或查询,用户可以聚焦于调节该特定负载。如果性能问题是系统范围的,那么硬件问题、系统失效或者资源竞争可能是原因。

    上级主题: 管理性能

    使用gpstate工具来确定失效的Segment。当Segment实例宕机时,Greenplum数据库系统将会引发性能退化,因为其他主机必须负担起宕掉的Segment的责任。

    失效的Segment可能表明有硬件失效,例如一个失效的磁盘驱动器或者网卡。Greenplum数据库提供了硬件验证工具gpcheckperf来确定有硬件问题的Segment主机。

    pg_stat_activity系统目录视图为每个服务器进程展示了一行,它显示数据库OID、数据库名、进程ID、用户OID、用户名、当前查询、当前查询开始执行的时间、进程开始时间、客户端地址和端口号。要获得大部分有关当前系统负载的信息,可以作为数据库超级用户查询这个视图。例如:

    pg_locks系统目录视图允许用户查看有关未解除的锁的信息。如果一个事务在一个对象上持有一个锁,任何其他查询在能够继续之前都必须等待该锁被释放。这对于用户来说可能就好像一个查询悬而不决。

    pg_locks中检查未授予的锁,以便帮助确定数据库客户端会话之间的竞争。pg_locks提供了数据库系统中所有锁的一个全局视图,而不只是那些与当前数据库相关的锁。用户可以把它的relation列与pg_class.oid连接在一起以确定被锁住的关系(例如表),但这只对当前数据库中的关系能正确地工作。用户可以把pid列连接到pg_stat_activity.procpid以查看更多会话持有或者等待持有锁的信息。例如:

    1. FROM pg_locks l, pg_class c, pg_stat_activity a
    2. ORDER BY c.relname;

    如果用户把资源队列用于负载管理,在一个队列中等候的查询也会显示在pg_locks中。要查看一个资源队列中有多少查询正在等待运行,可使用 gp_resqueue_status 系统目录视图。例如:

    用户可以使用ps、top、iostat、vmstat、netstat之类的系统监控工具监控Greenplum数据库阵列中主机上的数据库活动。这些工具能够帮助确定当前运行在系统上的Greenplum数据库进程(postgres进程)以及资源占用最多(CPU、内存、磁盘I/O或者网络活动)的任务。查看这些统计信息以确定降低数据库性能的查询,它们会让系统超载并且消耗极多的资源。Greenplum数据库的管理工具gpssh允许用户在多个主机上同时运行这些系统监控命令。

    用户可以创建并使用Greenplum数据库的session_level_memory_consumption视图,它为在Greenplum数据库上运行查询的会话提供有关当前内存利用和闲置时间的信息。有关该视图的信息请见查看会话内存使用信息

    如果一个查询执行得很糟糕,查看它的查询计划以帮助确定问题。EXPLAIN命令展示一个给定查询的查询计划。更多有关阅读查询计划并且确定问题的信息请见。

    当查询执行期间发生内存不足事件时,Greenplum数据库内存核算框架会报告事件发生时运行的每一个查询的详细内存消耗。这些信息被写入到Greenplum数据库的Segment日志中。

    Greenplum数据库的日志消息被写入到Master或Segment的数据目录中pg_log子目录下的文件中。由于Master的日志文件包含了大部分的信息,用户应该总是先检查它。日志文件会每日滚动并且使用下面的命名习惯: gpdb-YYYY-MM-DD_hhmmss.csv. 要在Master主机上定位日志文件:

    日志行的格式:

    用户可能想把搜索聚焦在WARNING、ERROR、FATAL或者PANIC日志级别的消息上。用户可以使用Greenplum的工具gplogfilter在Greenplum数据库的日志文件中搜索。例如,在Master主机上运行下列命令时,它会在标准日志位置检查有问题的日志消息: