注:本文翻译自https://docs.vmware.com/en/VMware-Greenplum/7/greenplum-database/admin_guide-perf_issues.html
确认硬件及Segment故障
Greenplum Database的性能取决于运行它的硬件和IT基础设施。Greenplum数据库由多个服务器(主机)组成,作为一个内聚系统(数组);作为诊断性能问题的第一步,确保所有Greenplum Database段都在线。Greenplum数据库的性能将与阵列中最慢的主机一样快。CPU利用率、内存管理、I/O处理或网络负载等问题都会影响性能。常见的硬件相关问题有:
- 磁盘故障—如果使用RAID,单个磁盘故障不会显著影响数据库性能,但是磁盘重新同步确实会消耗磁盘故障主机上的资源。gpcheckperf实用程序可以帮助识别有磁盘I/O问题的段主机。
- 主机故障—当主机离线时,该主机上的网段不可操作。这意味着阵列中的其他主机必须执行其通常工作负载的两倍,因为它们正在运行主段和多个镜像。如果未启用镜像,将导致业务中断。服务暂时中断以恢复故障段。gpstate实用程序帮助识别失败的段。
- 网络故障—网卡、交换机或DNS服务器故障可能导致网段中断。如果主机名或IP地址无法在Greenplum数组中解析,则会在Greenplum数据库中显示为互连错误。gpcheckperf实用程序帮助识别有网络问题的段主机。
- 磁盘容量-分段主机上的磁盘容量不应超过70%。Greenplum数据库需要一些空闲空间用于运行时处理。要回收已删除行占用的磁盘空间,请在加载或更新后运行VACUUM。gp_toolkit管理模式有许多视图,用于检查分布式数据库对象的大小。
管理工作负载
数据库系统的CPU容量、内存和磁盘I/O资源有限。当多个工作负载竞争访问这些资源时,数据库性能会下降。资源管理可以最大限度地提高系统吞吐量,同时满足不同的业务需求。Greenplum数据库提供资源队列和资源组来帮助您管理这些系统资源。
资源队列和资源组限制资源使用以及在特定队列或组中运行的并发查询的总数。通过将数据库角色分配给适当的队列或组,管理员可以控制并发用户查询并防止系统过载。有关资源队列和资源组的更多信息,包括为您的Greenplum数据库环境选择适当的模式,请参阅管理资源。
数据库管理员应该在工作时间之外运行维护工作负载,如数据加载和VACUUM ANALYZE操作。不要与数据库用户争夺系统资源;在低使用率时执行管理任务。
避免冲突
当多个用户或工作负载试图以冲突的方式使用系统时,就会出现争用;例如,当两个事务试图同时更新一个表时,就会发生争用。寻求表级或行级锁的事务将无限期地等待冲突锁被释放。应用程序不应该长时间保持事务打开,例如,在等待用户输入时。
管理数据库统计信息
Greenplum数据库使用基于成本的查询优化器,它依赖于数据库统计信息。准确的统计信息使查询优化器能够更好地估计查询检索的行数,从而选择最有效的查询计划。如果没有数据库统计信息,查询优化器就无法估计将返回多少条记录。优化器并不假设它有足够的内存来执行某些操作(如聚合),因此它采取最保守的操作,通过从磁盘读写来执行这些操作。这比在内存中执行要慢得多。ANALYZE收集查询优化器需要的数据库的统计信息。
注:在使用GPORCA运行SQL命令时,如果可以通过收集命令引用的一列或一组列的统计信息来提高命令性能,那么Greenplum Database会发出警告。在命令行上发出警告,并将信息添加到Greenplum Database日志文件中。有关收集表列统计信息的信息,请参见《Greenplum数据库参考指南》中的ANALYZE命令
确认执行计划中的统计信息问题
在使用EXPLAIN或EXPLAIN ANALYZE解释查询的查询计划之前,请先熟悉数据,以帮助识别可能的统计问题。检查计划中统计不准确的指标如下:
- 优化器的估计接近现实吗?运行EXPLAIN ANALYZE,看看优化器估计的行数是否接近查询操作返回的行数。
- 是否在计划的早期应用了选择性谓词?应该在计划的早期应用最具选择性的筛选器,以便更少的行向上移动到计划树。
- 优化器是否选择了最佳连接顺序?当您有一个连接多个表的查询时,请确保优化器选择最具选择性的连接顺序。消除最多行数的连接应该在计划的早期执行,以便较少的行向上移动到计划树。
有关读取查询计划的详细信息,请参阅查询分析。
调优统计信息收集
以下配置参数控制用于统计收集的采样数据量:
default_statistics_target
这些参数控制系统级的统计抽样。最好只对查询谓词中最常用的列的增加统计信息进行采样。您可以使用以下命令调整特定列的统计信息:
ALTER TABLE……SET STATISTICS
例如:
ALTER TABLE sales ALTER COLUMN region SET STATISTICS 50;
这相当于更改特定列的default_statistics_target。随后的ANALYZE操作将为该列收集更多统计数据,从而生成更好的查询计划。
优化数据分布
在Greenplum Database中创建表时,必须声明一个分布键,该分布键允许数据在系统中的所有段之间均匀分布。因为段并行地处理查询,所以Greenplum Database总是和最慢的段一样快。如果数据不平衡,那么拥有更多数据的段返回结果的速度会变慢,从而减慢整个系统的速度。
优化数据库设计
许多性能问题可以通过数据库设计得到改善。检查您的数据库设计并考虑以下几点:
- 模式是否反映了访问数据的方式?
- 可以将较大的表分解为多个分区吗?
- 您是否使用尽可能小的数据类型来存储列值?
- 列是否用于连接相同数据类型的表?
- 是否使用了您的索引?
数据库最大限制
维度 | 限制 |
---|---|
数据库大小 | 无限制 |
表大小 | 无限制 |
行大小 | 1.6 TB (1600列 * 1 GB) |
表大小 | 无限制 |
字段大小 | 1GB |
行表数 | 281474976710656 (2^48) |
表字段数 | 1600 |
表索引数 | 32 |
表级约束数 | 无限制 |
表名长度 | 63字节 |
被列为无限制的维度本身不受Greenplum数据库的限制。但是,它们在实践中受到可用磁盘空间和内存/交换空间的限制。当这些值过大时,性能可能会下降。
注:同时存在的对象(表、索引和视图,但不包括行)的数量是有最大限制的。这个极限是4294967296(2^32)。