Greenplum数据库

一、Greenplum数据库

是业界最快最高性价比的关系型分布式数据库,它在开源的PostgreSQL的基础上采用MPP架构(Massive Parallel Processing,海量并行处理),具有强大的大规模数据分析任务处理能力。

GreenPlum作为大数据融合存储平台中众多数据库之一,与其他数据库系统和文件系统一起,为OceanMind提供完整的OceanStorage大数据融合存储解决方案。

GreenPlum的特点:

1) 完善的标准:

GreenPlum数据库支持ANSI SQL 2008和SQL OLAP 2003扩展;支持ODBC和JDBC应用编程接口。完善的标准支持使得系统开发、维护和管理都大为方便。(而现在的 NoSQL和Hadoop 对 SQL 的支持都不完善,不同的系统需要单独开发和管理,且移植性不好。)

2) 数据的强一致性:

GreenPlum数据库支持分布式事务,支持ACID,保证数据库中数据的强一致性。

3)良好的线性扩展能力:

GreenPlum数据库采用MPP架构,其基本特征是有多台SMP(Symmetric Multi-Processor,对称多处理器)服务器通过节点互联网络连接而成,是一种Share Nothing(完全无共享)结构,因而扩展能力最强,理论上可以无限扩展。目前的技术可以实现512个节点互联,包含数千个CPU。

二、系统监控和维护

监控

Greenplum数据库提供了一些对监控系统非常有用的工具。

gp_toolkit模式包含多个可以用SQL命令访问的视图,通过它们可以查询系统目录、日志 文件以及操作环境来获得系统状态信息。

gp_stats_missing视图展示没有统计信息且要求运行ANALYZE的表。

更多gpstate和gpcheckperf工具的信息请参考Greenplum数据库工具指南。 有关gp_toolkit模式的信息,请见Greenplum数据库参考指南

gpstate

gpstate工具显示Greenplum系统的状态,包括哪些segment宕掉了、saster和segment 的配置信息(hosts、数据目录等)、系统使用的端口以及主segment与它们对应的镜像segment之间的映射。

运行gpstate -Q可以得到一个segment的列表,这个列表列出了那些在master的系统目录 中被标记为"down"的segment。

要得到Greenplum系统的详细状态信息,可运行gpstate -s。

gpcheckperf

gpcheckperf工具能用来测试主机硬件的基线性能。其结果可以帮助发现硬件问题。它会 执行下列检查:

  • 磁盘I/O测试 – 通过使用操作系统命令dd读写一个大型文件来测量I/O性能。 它报告以兆字节每秒为单位的读写速率。
  • 内存带宽测试 – 使用STREAM基准测量以兆字节每秒为单位的可持续的内存带宽。
  • 网络性能测试 – 运行gpnetbench网络基准程序(也可以选netperf) 来测试网络性能。这种测试可以运行在三种模式中:并行结对测试(-r N)、 串行结对测试(-r n)或者全矩阵测试(-r M)。报告 的最小、最大、平均和中值传输率将以兆字节每秒为单位。

为了从gpcheckperf获得有效的数字,数据库系统必须被停止。即使系统仍在 运行且没有运行查询活动,从gpcheckperf得到的数字可能也不准确。

gpcheckperf要求在参与性能测试的主机之间提前进行访问互信设置。因为工具会调用 gpssh以及gpscp,因此这些工具必须也位于用户的PATH 中。可以个别指定要检查的主机(-h host1 -h host2 ...)或者使用 -f hosts_file,其中hosts_file是一个包含要 检查的主机列表的文本文件。如果用户有多个子网,为每个子网都创建一个单独的主机文件,这样用户可以单独测试 子网。

gpcheckperf默认会运行磁盘I/O测试、内存测试和串行结对网络性能测试。对于磁盘I/O 测试,用户必须使用-d选项指定要测试的文件系统。下面的命令在subnet_1_hosts 文件中列出的主机上测试磁盘I/O和内存带宽:

$ gpcheckperf -f subnet_1_hosts -d /data1 -d /data2 -r ds

-r选项选择要运行的测试:磁盘I/O(d)、内存带宽(s)、 网络并行结对(N)、网络串行结对测试(n)、网络全矩阵测试(M)。 每次执行只能选择一种网络模式。详细的gpcheckperf参考信息请见Greenplum数据库 参考指南

用ANALYZE更新统计信息

ANALYZE 命令会扫描表的内容,并计算诸如列值的频率、数据分布等统计信息。这些统计信息对于查询优化器来说至关重要,因为它们允许优化器估算不同查询计划的成本,并选择成本最低的计划来执行查询。

何时运行ANALYZE

在下列时机运行ANALYZE:

  • 装载数据后;
  • CREATE INDEX操作后;
  • 在显著更改底层数据的INSERT、UPDATE以及DELETE 操作之后。

ANALYZE仅在表上要求一个读锁,因此它可以与其他数据库活动并行运行。但不要在执行 装载、INSERT、UPDATE、DELETE以及CREATE INDEX 操作期间运行ANALYZE。

SELECT partitiontablename from pg_partitions WHERE tablename='parent_table;

  analyze table_name

管理数据库膨胀

Greenplum数据库的堆表使用PostgreSQL的多版本并发控制(MVCC)存储实现。被删除或更新的行被从数据库逻辑 删除,但是该行的一个不可见映像保留在表中。这些被删除的行(也被称为过期行)被存储在一个空闲空间映射文件中。 运行VACUUM会把过期行标记为可以被后续插入重用的空闲空间。

在PostgreSQL中,VACUUM是一个非常重要的命令,用于执行多种维护任务,包括但不限于:

  1. 回收空间:当在PostgreSQL中删除或更新行时,这些行占用的空间并不会立即被返回给操作系统,而是被标记为“空闲”以供后续使用。VACUUM操作会识别这些空闲空间,并尝试将其用于新的数据,从而减少了数据库文件大小的增长。
  2. 压缩数据VACUUM操作还可以对表中的数据进行一定程度的重新组织,减少行间的碎片化,这可以提高后续的I/O效率。
  3. 更新统计信息VACUUM还会更新数据库的统计信息,这些信息被查询规划器用于确定执行查询的最有效方法。如果统计信息不准确,查询规划器可能会选择低效的执行计划。
  4. 维护数据完整性:在某些情况下,如事务回滚或崩溃恢复后,VACUUM可能还需要进行一些特殊的清理工作来维护数据的完整性。

对于PostgreSQL来说,有几种不同的VACUUM变体:

  • VACUUM:这是最基本的命令,它会执行上述的所有任务,但可能不会立即释放空间给操作系统。
  • VACUUM FULL:这个命令会尝试将表中的数据重新组织到一个新的、没有碎片的存储位置,并释放所有未使用的空间给操作系统。但请注意,这个命令可能会消耗大量的I/O资源,并且可能需要一个排他锁来执行。
  • VACUUM ANALYZE:这个命令除了执行VACUUM的所有任务外,还会更新统计信息。这通常是一个很好的选择,因为统计信息的准确性对于查询性能至关重要。
  • AUTOVACUUM:PostgreSQL还提供了一个自动的VACUUM守护进程,该进程会定期在后台运行,以尝试自动回收空间并更新统计信息。你可以通过调整autovacuum相关的配置参数来控制其行为。

在生产环境中,建议定期运行VACUUM(或VACUUM ANALYZE)来保持数据库的整洁和高效。同时,也要确保autovacuum守护进程是启用的,并配置为适合你的工作负载。

vacuum table_name;

vacuum full table_name;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值