为了正常的体验网站,请在浏览器设置里面开启Javascript功能!
首页 > GreenPlum使用手册

GreenPlum使用手册

2020-11-01 5页 doc 1MB 22阅读

用户头像 个人认证

百里登峰

暂无简介

举报
GreenPlum使用手册GreenPlum数据库集群安装说明及使用手册开心十二月总结****年**月**日目录41体系结构介绍102安装102.1安装102.1.1安装准备112.1.2安装gp-db132.1.3配置通讯172.1.4建立数据存储池172.1.5同步系统时间172.1.6验证安装是否成功172.1.7初始化182.1.8数据库的启停192.2Master双机热备202.3Segment节点互备223GP数据库的使用223.1pgAdminIII工具223.1.1安装和第一次使用pgAdminIII233.1.2主窗体233.1.3导...
GreenPlum使用手册
GreenPlum数据库集群安装说明及使用手册开心十二月总结****年**月**日目录41体系结构介绍102安装102.1安装102.1.1安装准备112.1.2安装gp-db132.1.3配置通讯172.1.4建立数据存储池172.1.5同步系统时间172.1.6验证安装是否成功172.1.7初始化182.1.8数据库的启停192.2Master双机热备202.3Segment节点互备223GP数据库的使用223.1pgAdminIII工具223.1.1安装和第一次使用pgAdminIII233.1.2主窗体233.1.3导航菜单243.1.4工具栏介绍253.1.5数据库与的创建253.1.6使用pgAdminIII备份数据库263.2JDBC配置273.3GP数据库两个重要概念273.3.1什么是Schema283.3.2数据分布存储283.4GP的SQL语法283.4.1数据加载313.4.2SQL并行查询313.4.3聚合函数313.4.4索引323.4.5分区343.4.6函数384维护数据库384.1数据库启动gpstart404.2数据库停止gpstop404.3查看实例配置和状态404.4查看数据库运行状态gpstate424.5查看用户会话和提交的查询等信息424.6查看数据库、表占用空间424.7查看数据分布情况424.8实例恢复gprecoverseg434.9查看锁信息434.10数据库的备份与恢复435调优、排错436附件436.1DBA常用命令447Q&A447.1不支持触发器447.2更新操作中的若干问1体系结构介绍Greenplum数据库产品——下一代数据仓库引擎和分析方法Greenplum公司是企业数据云计算解决的创始人,为客户提供灵活的数据商业智能和分析方法。能够以极低的成本代价,提供业界领先的计算性能。客户遍及美国知名企业:Nasdaq、NYSE、Ebay、FoxInteractiveMedia……等。Greenplum公司的Greenplum数据库产品是用于建造下一代数据仓库和巨大规模分析系统的软件解决方案。支持SQL和MapReduce并行处理,更适合管理TB级~PB级的海量数据,并以极低的成本代价提供了业界领先的计算性能。使用独有的sharing-nothingMPP架构,服务器的集群工作起来,就像是一个独立的超级计算机!优化了BI和分析方法,自动化分区数据和并行查询,比传统数据库执行速度提高10倍~100倍!Greenplum数据库的特色:·大规模地并行分析处理能力Greenplum数据库可以跨越100~1000颗CPU,实现统一的并行操作引擎,让处理过程尽可能地靠近数据。Greenplum是业界最快的和最普及的高端数据仓库解决方案!用传统方式需花费数天才能完成的复杂查询,现在使用Greenplum只需要几分钟完成!·核心的MPP架构Greenplum数据库提供数据和查询的自动化并行:数据被自动分区跨越集群中的所有节点;查询以高度协作的方式,在集群的所有节点上执行。·高速PB级数据装载利用独有的MPPScatter/GatherStreaming技术,实现高速的数据装载。每增加1个节点,每小时装载吞吐量提高4TB!·数据库内部压缩利用业界领先的压缩技术提高性能和降低存储空间。在有效较少1/3~1/10空间的同时,相应地提高了I/O性能。·多级容错能力Greenplum数据库利用多级冗余技术,在硬件或软件故障时,保障操作可以继续执行。·在线系统扩展为提高存储容量、处理性能,增加新的服务器到集群中,扩展的操作在后台完成,数据库可以继续保持正常工作状态不受影响。处理性能和存储容量,随服务器的个数增加成正比显著提高!·自有的MapReduce技术MapReduce是Google和Yahoo的大规模数据分析方法。Greenplum使用独有的并行引擎执行MapReduce。Greenplum数据库架构原理解密:Greenplum数据库通过分布负载到多个服务器主机,实现操作存储和处理大规模的数据。数据库实际上由1个Master服务器和若干个独立的Segment服务器组成,一起协调工作,每个服务器都是独立的PostgreSQL数据库。如图1所示,Master服务器是数据库的入口,验证客户端,处理输入的SQL,分布工作到若干Segment服务器,统一协调各个Segment返回的结果,汇总最终结果返回客户端。Master不存储任何用户数据,只有全局系统视图。图1:Greenplum数据库架构如图2所示,Segment服务器是真正数据存储的地方,并承担主要的查询工作。用户数据(表、索引)被分布存储到有效的若干Segment,通过Hash算法,每个Segment存放数据的不同部分。图2:Segment服务器真正存储数据图3展示了一套完整的Greenplum数据仓库实施架构示例。独立的Master服务器,通过千兆网络连接在一起的若干Segment服务器,每个Segment服务器挂载独立的RAID存储。服务器基于X86-64位硬件平台,安装Linux操作系统,获得极高的性价比。图3:Greenplum数据库完整实施架构示例图4记录了一次完整的MPP并行查询过程。Master作为查询调度器,为客户端提供连接工作;Segment独立管理数据片和数据操作。调度过程如下:1.Master验证客户端用户。2.Master连接到所有远程Segment实例。3.Master解析SQL语句。4.Master建立1个优化的并行查询。5.Master分布查询计划到所有的Segment实例。6.Master协调查询计划在所有Segment上并行执行。7.Master收集所有Segment的查询结果并返回到客户端。图4:一次查询调度过程Greenplum独有的Sharing-Nothing架构:数据仓库在执行全表扫描查询时,通常速度被存储的带宽限制,即瓶颈大多集中在I/O。Greenplum的Sharing-Nothing架构物理分离数据,存储到若干Segment服务器,每个Segment使用多个、专用的、独立的、高速的通道独立连接到磁盘,并把管理数据库资源:buffer、lock、block的职责委派到各个Segment,不使用Master统一管理资源!从图5中可以看出与Sharing-Everything架构(如OracleRAC)对比,存在2个明显区别:图5:sharing-everying对比sharing-nothing数据库架构1)数据库物理存储方式不同:在RAC环境下,数据库集中存储,集群中的所有节点共享I/O通道访问数据,随着TB级别海量数据的增加,I/O瓶颈可想而知。2)集群节点间内部通信管理方式不同:如图6,RAC使用GRD(GlobalResourceDirectory)统一管理数据库资源,管理内部节点间通信。用户对每个block的访问,都要经过GRD的协调调度,极其繁琐且需要额外的进程通信负担;随着节点个数的增加,GRD会增加管理的复杂度,可能会导致产生性能问题!图6:OracleRAC的GRD架构2安装2.1安装安装准备CentOS-6.3-x86_64-bin-DVD1.isoVMwareWorkstationgreenplum-db-4.2.1.0-build-3-CommunityEdition-RHEL5-x86_64.zipos的配置以root用户操作检查系统条件检查系统名称,版本,内核.#uname-a检查磁盘空间#df-h设置主机名#vi/etc/sysconfig/networkHOSTNAME=*single*(*变量*,以后出现*string*,均指变量)设置集群各个机器ip与主机的对应表#vi/etc/hosts127.0.0.1singlelocalhost配置运行参数:#vi/etc/sysctl.conf添加修改:kernel.sem=25064000100512kernel.shmmax=500000000(最大共享内存)kernel.shmmni=4096kernel.shmall=4000000000(共享内存总量)kernel.sem=25064000100512kernel.sysrq=1kernel.core_uses_pid=1kernel.msgmnb=65536kernel.msgmax=65536net.ipv4.tcp_syncookies=1net.ipv4.ip_forward=0net.ipv4.conf.default.accept_source_route=0net.ipv4.tcp_tw_recycle=1net.ipv4.tcp_max_syn_backlog=4096net.ipv4.conf.all.arp_filter=1net.core.netdev_max_backlog=10000vm.overcommit_memory=2#vi/etc/security/limits.conf添加修改*softnofile65536*hardnofile65536*softnproc131072*hardnproc131072关闭iptables[root@localhost~]#serviceiptablesstopiptables:清除防火墙规则:[确定]iptables:将链设置为政策ACCEPT:filter[确定]iptables:正在卸载模块:[确定][root@localhost~]#chkconfigiptablesoff[root@localhost~]#serviceip6tablesstopip6tables:清除防火墙规则:[确定]ip6tables:将chains设置为ACCEPT策略:filter[确定]:正在卸载模块:[确定][root@localhost~]#chkconfigip6tablesoff安装gp-db创建gpadmin用户#useraddgpadmin#passwdgpadmin#Newpassword:gpadmin#Retypenewpassword:gpadmin解压zip包例如:把安装包copy到/home/gpadmin目录下#sugpadmin#cd/home/gpadmin#unzipgreenplum-db-4.2.1.0-build-3-CommunityEdition-RHEL5-x86_64.zip执行安装文件./greenplum-db-4.2.1.0-build-3-RHEL5-x86_64.bin安装过程比较容易,但是注意要修改一下安装路径为/home/gpadmin/greenplum-db-4.2.1.0下图打印了安装时的情况:出现如下提示:********************************************************************************DoyouaccepttheGreenplumDatabaselicenseagreement?[yes|no]********************************************************************************yes********************************************************************************ProvidetheinstallationpathforGreenplumDatabaseorpressENTERtoacceptthedefaultinstallationpath:/home/gpadmingreenplum-db-4.2.1.0********************************************************************************/home/gpadmin/greenplum-db-4.2.1.0********************************************************************************InstallGreenplumDatabaseinto</home/gpadmin/greenplum-db-4.2.1.0>?[yes|no]********************************************************************************yes********************************************************************************/home/gpadmin/greenplum-db-4.2.1.0doesnotexist.Create/home/gpadmin/greenplum-db-4.2.1.0?[yes|no](Selectingnowillexittheinstaller)********************************************************************************yes********************************************************************************[Optional]ProvidethepathtoapreviousinstallationofGreenplumDatabase,orpressENTERtoskipthisstep.e.g./home/gpadmingreenplum-db-4.1.1.3ThisinstallationstepwillmigrateanyGreenplumDatabaseextensionsfromtheprovidedpathtotheversioncurrentlybeinginstalled.Thisstepisoptionalandcanberunlaterwith:gppkg--migrate<path_to_old_gphome>/home/gpadmin/greenplum-db-4.2.1.0********************************************************************************Extractingproductto/home/gpadmin/greenplum-db-4.2.1.0Extractingproductto/home/gpadmin/greenplum-db-4.2.1.0SkippingmigrationofGreenplumDatabaseextensions...********************************************************************************Installationcomplete.GreenplumDatabaseisinstalledin/home/gpadmin/greenplum-db-4.2.1.0GreenplumDatabasedocumentationisavailablefordownloadathttp://powerlink.emc.com.********************************************************************************安装成功!配置通讯登录master机器source一下greenplum_path.sh文件#source/home/gpadmin/greenplum-db/greenplum_path.sh编辑一个主机列表列表为主机名.#cd/home/gpadmin#viall_hosts_file*host1**host2**host3*…打通root的ssh通道执行gpssh-keys命令.#su–root#gpssh-exkeys-fall_hosts_filegpssh-exkeys将要求对每台机器鉴权.提示:后输入用户名密码***Enterpasswordforroot@hostname:rootpassword提示:[STEP1of5]createlocalIDandauthorizeonlocalhost[STEP2of5]keyscanallhostsandupdateknown_hostsfile[STEP3of5]authorizecurrentuseronremotehosts[STEP4of5]determinecommonauthenticationfilecontent[STEP5of5]copyauthenticationfilestoallremotehosts[INFO]completedsuccessfully为每台机器创建gpadmin用户#su–root(以root用户登录各节点机器来创建用户)#gpssh-fall_hosts_file'/usr/sbin/useraddgpadmin-d/home/gpadmin-s/bin/bash'为每台机器添加gpadmin的密码#gpssh-fall_hosts_file'echopassword|passwdgpadmin--stdin'修改目录拥有者#chown-Rgpadmin:gpadmin/home/gpadmin/*打通gpadmin的ssh通道执行gpssh-keys命令.#sugpadmin#source/home/gpadmin/greenplum-db/greenplum_path.sh#gpssh-exkeys-fall_hosts_filegpssh-exkeys将要求对每台机器鉴权.提示:后输入用户名密码***Enterpasswordforroot@hostname:rootpassword提示:[STEP1of5]createlocalIDandauthorizeonlocalhost[STEP2of5]keyscanallhostsandupdateknown_hostsfile[STEP3of5]authorizecurrentuseronremotehosts[STEP4of5]determinecommonauthenticationfilecontent[STEP5of5]copyauthenticationfilestoallremotehosts[INFO]completedsuccessfully把master的gp-db服务copy到各个slave机器上.在master上把gp-db打包.#cd/home/gpadmin#source/home/gpadmin/greenplum-db/greenplum_path.sh#gtar-cvf/home/gpadmin/gp.targreenplum-db-4.0.x.x做主机列表(不能有空行和空格!!!)#viseg_hosts_file*sdw1-1**sdw2-1**sdw3-1*copy到各个seg机器上#gpscp-fseg_hosts_file/home/gpadmin/gp.tar=:/home/gpadmin登录到各个slave机器#gpssh-fseg_hosts_file解压tar包=>gtar--directory/home/gpadmin-xvf/home/gpadmin/gp.tar查看服务=>ls/home/gpadmin/greenplum-db-4.0.x.x建立链接=>ln-s/home/gpadmin/greenplum-db-4.2.1.0/home/gpadmin/greenplum-db更改用户组=>chown-Rgpadmin:gpadmin/home/gpadmin/greenplum-db删除tar包=>rm/home/gpadmingp.tar退出远程登录Exitgpssh=>exit激活#source/home/gpadmin/greenplum-db/greenplum_path.sh#source~/.bashrc建立数据存储池建立master的数据结构存储地#sugpadmin#cd/home/gpadmin#mkdirgpmaster建立业务数据存储地登录到每台节点机上创建目录,gpadmin有操作权限su-gpadmin#cd/home/gpadmin$mkdirgpdata1#chown–Rgpadmin:gpadmingpdata1同步系统时间同步系统时间:$gpssh-fseg_hosts_file-vdate同步NTP时间:$gpssh-fseg_hosts_file-vntpd验证安装是否成功#gpcheck-fall_hosts_file初始化设置变量:#sugpadmin#vi.bash_profileGPHOME=/home/gpadminexportGPHOMEMASTER_DATA_DIRECTORY=/home/gpadmin/gpmaster/gpseg-1exportMASTER_DATA_DIRECTORY#source~/.bashrc#source.bash_profile建立初始化文件:#vigp_init_configARRAY_NAME="Greenplum"MACHINE_LIST_FILE=/home/gpadmin/seg_hosts_fileSEG_PREFIX=gpsegPORT_BASE=50000declare-aDATA_DIRECTORY=(/home/gpadmin/gpdata1)MASTER_HOSTNAME=masterMASTER_DIRECTORY=/home/gpadmin/gpmasterMASTER_PORT=5432TRUSTED_SHELL=sshCHECK_POINT_SEGMENTS=8ENCODING=UTF8DATABASE_NAME=test执行初始化:#source/home/gpadmin/greenplum-db/greenplum_path.sh#gpinitsystem-c/home/gpadmin/gp_init_config修改master机器上的路径下/home/gpadmin/gpmaster/gpseg-1的文件pg_hba.conf,在文件里面添加内容:hostallgpadmin0.0.0.0/0trust这部分添加的内容要在文件中和这个文件内容类似的地方添加修改master机器上的路径下/home/gpadmin/gpmaster/gpseg-1的文件postgresql.conf,将内容#listen_addresses='*'的#符号去掉,即为将监听打开数据库的启停1)启动数据库服务在master节点上,请以gpadmin用户登入OS,执行命令gpstart,系统会自检,并提示是否启动服务,选择y,启动服务。如果使用gpstart-a则系统无任何提示,进行启动。如果不希望屏幕输出则使用gpstart-q具体的选项帮助说明,可以通过gpstart-h或者gpstart--help获得。在启动服务后,通过ps-ef|greppostgre*可以看到相关的服务进程。2)查看数据库状态在master节点上,使用gpstate命令。gpstate-s查看细节。3)关闭数据库服务在master节点上,请以gpadmin身份,登入os,执行命令gpstop。如果有连接没有断开,想强行关闭服务使用gpstop-Mfast(注意选项的大小写)如果要重启系统,可以使用gpstop-u注:数据库的启停和查看数据库状态的操作都是在master上进行的,不需要动segment节点。2.2Master双机热备master镜像是通过把primarymaster对应的standbymaster放置到不同的物理主机实现的。正常情况下只有primarymaster接受用户连接请求,standbymaster通过gpsyncagent进程(运行在standbymaster上)利用事务日志保持与primarymaster的同步。由于master上不存放任何用户数据,存放在其中的表不会频繁更新,因此同步是实时的。standbymaster所在主机除了复制进程外,没有正式master服务运行。当primary出现故障,standbymaster日志复制进程停止,DBA可以激活standbymaster,使它切换成primarymaster,保证原primarymaster故障时最后提交的事务可以正常提交,并且使用相同的端口接入用户新的连接请求.启用standbymaster的非常简单,既可以在初始化时启用standbymaster(gpinitsystem),也可以对存在的系统添加standbymaster(gpinitstandby)。无论哪种方式,首先要准备standby的主机,包括操作系统,用户等效性的建立,以及GP软件的安装。如果初始化时,添加standbymaster,仅需要在gpinitsystem命令上使用-s参数指定standby用的主机名即可。也可以使用gpinitstandby工具去添加standbymaster。DBA需要从处于工作状态的primarymaster节点上调用这个工具,使用-s参数,后面跟上standby的主机名。比如gpinitstandby-sv-centos62-64-66如果遇到primarystandby出现故障,由于到目前为止,EMC还没有提供自己的cluster,因此,如果不使用第三方的cluster的情况下,DBA需要手工激活standbymaster进行masterfailover,这个过程通过调用gpactivatestandby命令实现$gpactivatestandby-d/gpdata/gpdata应该是standbymaster的数据目录。一旦完成激活,standbymaster的身份转化成primarymaster。如果在激活的时候,想配置一个新的standbymaster可以通过-c选项实现。$gpactivatestandby-d/gpdata-cnew_standby_hostname在该工具调用完成之后,可以用gpstate检查状态$gpstate-f,新的primarysegment应该是active的状态,如果有新加standbymaster,standbymaster状态是passive。Masterinstance=ActiveMasterinstancestandby=Passive在完成,新primarymaster激活之后,应该在其上运行analyze命令。比如$psqldbname-c'ANALYZE;'如果没有在激活时,添加新的standbymaster,事后也可以通过gpinitstandby的调用添加新的standbymaster.在系统工作的过程中,standbymaster节点也可能出现数据同步故障,比如网络问题,导致gpsyncagent出现同步故障,用户可能无法及时感知。所以DBA应该定期检查gp_master_mirroring中的信息,如果发现standbymaster是不同步的,应该进一步检查detail_state和error_message列中的信息,判断问题产生的原因,并进行解决。完成问题的纠正后,通过调用gpinitstandby可以重新同步standbymaster。$gpinitstandby-sstandby_master_hostname-n2.3Segment节点互备segment级别的镜像是通过把primarysegment对应的mirrorsegment放置到不同的物理主机实现的。正常情况下,只有primarysegment的instance处于工作状态,所有primarysegment上的变化通过文件块的复制技术拷贝到mirrorsegment。因此,存放mirrorsegment的主机上只有复制用的进程,而不存在mirrorsegmentinstance。一旦primarysegment出现故障,mirrorsegment的复制进程停止,并启动instance,保证数据库的操作继续。segment的故障检测是通过后台进程ftsprobe实现的,并可以进行自动容错,不需要DBA进行干预。ftsprobe的检测间隔是通过global服务参数gp_fts_probe_interval进行定义的,默认值是1分钟,通常这个参数的设置应该与参数gp_segment_connect_timeout保持一致。一旦ftsprobe进程发现primarysegment出现故障,它会在数据字典中标记该segment已经停止。只有管理员对其进行恢复后,才会改变状态。如果系统没有进行segment级别的镜像,当出现segment故障后,整个系统都将脱机,直到恢复故障segment后,才可以重新启动。启用segment镜像,既可以在初始化系统时进行,也可以为存在的系统添加mirror。如果在初始化系统是要求添加镜像,需要在初始化配置文件中添加如下参数MIRROR_PORT_BASE指定第一个mirrorsegment的端口号,其它mirrorsegment在此基础上加1,它的设置范围是1到65535,但是设置时要注意不能与primarysegment冲突。REPLICATION_PORT_BASE指定第一个primarysegment用于数据复制的端口号,其它primarysegment以此为基础,每次加1,计算复制用端口号。它的设置也不要与primarysegment冲突。取值范围1到65535MIRROR_REPLICATION_PORT_BASE指定第一个mirrorsegment用于数据复制的端口号,其它mirrorsegment以此为基础,每次加1,计算复制用端口号。它的设置也不要与mirrorsegment冲突。取值范围1到65535MIRROR_DATA_DIRECTORY指定了mirrorsegment的数据目录,声明的目录数量必须与primarysegment的目录数量一致,而且要保证进行初始化操作的os用户对这些目录有读写权限。然后调用gpinitsystem进行初始化,默认是使阵列中的主机相互存放对方的镜像。如果主机的数量多于segment的数量,可以使用-S选项,指定使用哪些主机作为镜像用。如果原有系统没有镜像,我们也可以向存在的系统添加镜像。首先要获取添加镜像的构造文件。这个文件可以自己编辑,也可以通过gpaddmirrors自动生成,然后在此基础上根据需要进行修改。比如自动生成添加mirror的构造文件$gpaddmirrors-ofilename文本编辑器打开该构造文件,可以看到其格式如下mirror[content]=content:hostname:addressort:mir_replication_portri_replication_port:datadir_location默认配置是原有的主机间互为镜像,我们也可以添加新的主机作为镜像使用,从而减少镜像对性能的影响。在得到mirror构造文件后,可以用命令启用镜像。$gpaddmirrors-imirror_config_file这时系统会根据配置文件设置,复制镜像,并对镜像进行同步,提供保护。需要注意的是,在添加镜像前应该先备份数据库,防止镜像添加失败(比如网路配置问题,内核参数设置不正确可能导致添加镜像失败)。因为GREENPLUM目前只能添加镜像,不能删除镜像。如果添加镜像失败会导致系统处于不正常状态。由于mirrorsegment可以自动failover,因此当primarysegment出现故障时,管理员可能无法及时察觉。所以一方面管理员应该对系统定期检查,另外一方面如果系统性能大幅下降(理论上,如果采用互为镜像方式,当一个主机出现故障时,整个系统性能下降一半)管理员也应该进行系统检查,判断是否有segment已经down掉了。检查是否有segmentdown掉,可以在master上执行gpstate,如果看到类似这样的内容[WARN]:-Totalprimarysegmentfailures(atmaster)=1<<<<<<,说明有primarysegmentdown掉了。进一步检查故障segment,可以用SQLSELECT*FROMgp_segment_configurationWHEREstatus='d';获取细节信息,请注意故障段的主机,端口号,首选身份,以及目录这样的信息,可以在troubleshooting的过程中提供帮助。还可以通过gpstate-c看到primary与mirror之间的映射关系。一般来说,造成segment故障的原因主要就是三大类,一类是segment主机由于硬件问题或者网络问题无法访问,一类是segment的相关进程出现故障,比如被kill掉了。还有就是存储问题,比如控制器故障等等。在这些问题被解决之后,系统不会自动恢复故障segment,必须由DBA手工进行恢复。这需要在master上调用命令$gprecoverseg进行。它从故障之后产生的变化开始捕获,整个操作会在后台进行。所以需要DBA调用命令gpstate-m判断恢复操作完成的进度情况。3GP数据库的使用3.1pgAdminIII工具这里选用pgAdminIII1.8版为例进行使用说明.安装和第一次使用pgAdminIII现在比较常用的版本是pgAdmin1.8.4,下载pgadmin3-1.8.4.zip到本地,解压之后会出现三个文件,执行pgadmin3-1.8.4_setup.exe之后在同级目录会出现pgadmin3.msi,执行该文件,桌面出现之后双击即可使用。第一次使用pgAdmin工具时,会出现连接服务器的对话框,填写:连接名称、主机IP、端口(默认是5432)、用户名和密码。其他参数一般不用修改。主窗体在主窗口中,显示数据库的结构。您可以创建新的对象,删除和编辑现有的对象,如果你使用的是当前连接到数据库用户的权限,在主窗口的左侧显示所有服务器,以及它们所包含的对象树。右上方显示,目前在树中选定的对象的详细信息。右下方包含一个SQL脚本。导航菜单1)文件选项卡:文件选项卡中可以修改密码,新建一个连接点击“选项”按钮之后,会出现一个多层的选项卡,在这里可以设置你的pgAdminIII。2.编辑菜单点击编辑菜单可以对数据库和对象做相应的操作。(右键所选对象相当于编辑中所有相关功能)3.视图用来调节页面视图的显示。例如:打开与关闭SQL窗口。4.工具在主窗体左面的对象树中点击不同的节点 工具中菜单的高亮显示可做相应的操作。(所选对象右键操作可达到相同效果但工具中可以打开查询工具)。5.帮助可以查看帮助文档工具栏介绍1234567891011图标1.新建立一个服务器图标2.刷新所选择对象(所选对象右键刷新也可以实现)图标3.显示所选对象属性(所选对象右键刷新也可以实现)图标4.创建和选取对象同类型的对象。例如:选择数据库表点击该图标就创建新的数据库表,选取函数点击该图标就新创建个函数。图标5.删除当前所选择的对象。图标6.此图标为pgAdminIII最为重要工具之一(之后详细介绍)。图标7.查看所选对象数据。例如选中数据库表点击该图标会显示表中的数据。图标8.输入条件对所选对象的数据进行过滤。图标9.可以对数据库和数据表进行维护。图标10.显示当前对象的指导建议。图标11.显示关于SQL指令的帮助。数据库与表的创建在左侧导航栏里右键选择”新建数据库”。如下图:指定新建的数据库名称和所有者,模板、表空间、字符编码如果没有特殊要求默认即可。建议建表的时候表名和字段名全部小写,因为GP是区分大写小写的。使用pgAdminIII备份数据库右键选择要备份的数据库。用pgAdmin可以把数据库备份成三种格式,compress,tar,plain。compress最小,是压缩过的,但是里面乱码。文件以.backup结尾tar比较大,上面有几行是乱码,下部分都是数据,格式看上去不太整齐。文件以.backup结尾。plain也很大,但不是乱码,里面的内容很整齐,分为两部分,上部分是相关的属性和数据表的信息。下部分全是数据。字段用一个Tab分隔。然而恢复时只有compress和tar的文件能够恢复。也就是以.backup结尾的!还有这样恢复时,最好把库删了!然后新建空库恢复!不要在原来库的基础上恢复!会有数据丢失!新表会加上,但旧表里的新数据不会加上。3.2JDBC配置应用程序如果需要使用JDBC连接GP数据库,请参看如下配置文件:<ConfigParam><ParamID>connectDriver</ParamID><ParamValue>org.postgresql.Driver</ParamValue><ParamDesc>连接驱动</ParamDesc></ConfigParam><ConfigParam><ParamID>connectURL</ParamID><ParamValue>jdbc:postgresql://ip:port/database_name</ParamValue><ParamDesc>连接URL</ParamDesc></ConfigParam><ConfigParam><ParamID>connectUsername</ParamID><ParamValue>dpi_support</ParamValue><ParamDesc>用户名</ParamDesc></ConfigParam><ConfigParam><ParamID>connectPassword</ParamID><ParamValue>dpi_support</ParamValue><ParamDesc>密码</ParamDesc></ConfigParam>根据应用程序的实际情况修改ip地址、端口号、数据库名以及用户名和密码,在应用程序里要引用postgresql-8.4-702.jdbc4.jar3.3GP数据库两个重要概念什么是Schema模式,也就是Schema,是数据库中一组对象的集合,里面包含了各种对象如tables,views,sequences,storedprocedures,synonyms,indexes,clusters,anddatabaselinks。这里对Oracle、MySQL、PostgreSQL中的模式做了一下测试,得到以下结论:        ——Oracle                  Schema相当于用户,每个用户有一个与其用户名相同的默认Schema                  如查询语句可以写成select*from用户名.表名                  如果在语句中没有指定模式,则默认操作当前用户名下的对象,如果当前用户名下不存在此对象则报错——MySQL        Schema相当于库,每个数据库就是一个Schema        如查询语句可以写成select*from数据库名.表名        如果在语句中没有指定模式,则默认查找数据库连接语句中指定的数据库下的对象,如果不存在则报错——PostgreSQL      Schema是一个独立的概念,在每个数据库下面都可以创建多个Schema,每个Schema下面都有自己独立的一套table、views、sequence、trigger等        首先要连上指定的数据库,然后查询语句可以写成select*from模式名.表名        如果在语句中没有指定模式名,系统自动优先操作与登陆用户相同的模式下的对象,如果此模式不存在,则自动操作public模式下的对象,如果仍不存在则报错。数据分布存储3.4GP的SQL语法数据加载利用gpfdist载入数据1建立数据存放目录mkdir/home/gpadmin/input把数据放进来2建立外部表例如:CREATEexternalTABLEext_ips_sip_t_new("f_time"varchar(50),"f_protocols"varchar(30),"f_len"numeric(20),"f_method"varchar(30),"f_to_user"varchar(30),"f_to_host"varchar(30),"f_to_port"varchar(10),"f_from_user"varchar(30),"f_from_host"varchar(30),"f_from_port"varchar(10),"f_call_id"varchar(100),"f_cseq_seq"varchar(30),"f_cseq_method"varchar(20),"f_status_code"varchar(10),"f_tag"varchar(100))LOCATION('gpfdist://gptest.155:z/*')FORMAT'TEXT'(DELIMITER'|')encoding'GBK'LOGERRORSINTOext_ips_sip_org_t_errSEGMENTREJECTLIMIT1000000000ROWS;3建立目标表CREATETABLE"public"."ips_sip_t"("f_time"varchar(50),"f_protocols"varchar(30),"f_len"numeric(20),"f_method"varchar(30),"f_to_user"varchar(30),"f_to_host"varchar(30),"f_to_port"varchar(10),"f_from_user"varchar(30),"f_from_host"varchar(30),"f_from_port"varchar(10),"f_call_id"varchar(100),"f_cseq_seq"varchar(30),"f_cseq_method"varchar(20),"f_status_code"varchar(10),"f_tag"varchar(100))WITH(OIDS=FALSE);1启动装载服务(集成到gp环境里了):gpfdist-d/home/gpadmin/input-p8088-l/home/gpadmin/gpfdist.log&1装载:进入数据库insertintoips_sip_tselect*fromext_ips_sip_t_new;装载ok利用gpload导入数据类似于ORACLESQL*LOADER,gpload是EMC在greenplum中提供的用来进行数据装载的工具。gpload也是通过它的控制文件指定装载的细节信息。所以编写控制文件是用好gpload的关键所在。gpload的控制文件采用YAML1.1文档格式编写,因此它必须得是有效的YAML格式。具体格式如下---VERSION:1.0.0.1           --指定控制文件schema的版本DATABASE:db_name          --指定连接数据库的名字,如果没有指定,由环境变量$PGDATABASE,或者通过gpload参数-d指定USER:db_username          --指定连接目标数据库的用户名,如果不使用超级管理员,服务参数gp_external_grant_privileges必须设置成on。HOST:master_hostname      --指定master主机名,也可以通过gpload的-h选项,或者环境变量$PGHOST指定PORT:master_port          --指定master的连接端口号,默认是5432,或者通过gpload命令的-p选项或者环境变量$PGPORT指定。GPLOAD:                    --必须指定,表示装载设置部分在它下面必须定义INPUT:和OUTPUT:两个部分。INPUT:                     --必须指定,这部分指定装载数据的格式和位置-SOURCE:                  --必须指定,定义source文件的位置,每个输入部分可以定义多个source部分,windows路径的指定比较特别,比如c:\要写成c:/LOCAL_HOSTNAME:            --指定gpload运行的主机名称和ip地址,如果有多块网卡,可以同时使用它们,提高装载速度。默认只使用首选主机名和IP。-hostname_or_ipPORT:http_port            --指定gpfdist使用的端口,也可以选择端口范围,由系统选择,如果同时指定,port设置优先级高。|PORT_RANGE:[start_port_range,end_port_range]FILE:                      --指定装载数据文件的位置,目录或者命名管道。如果文件使用gpzip或者bzip2进行了压缩,它可以自动解压。可以使用通配符*和C语言风格的关系匹配模式指定多个文件。-/path/to/input_file-COLUMNS:                   --指定数据源的数据格式,如果没有指定这部分,source表的列顺序,数量,以及数据类型必须与目标表一致。-field_name:data_type-FORMAT:text|csv         --指定文件格式是text还是csv-DELIMITER:'delimiter_character' --指定文本数据域(列)之间的分割符,默认是|-ESCAPE:'escape_character'|'OFF' --text定义转义字符,text格式默认是\,在text格式中可以选择off关掉转义字符(weblog处理时比较有用)-NULL_AS:'null_string'      --指定描述空值的字符串,text格式默认是\N,csv格式不使用转义符号的空值。-FORCE_NOT_NULL:true|false--csv格式,强制所有字符默认都用”“括起,因此不能有空值,如果两个分割符之间没有值,被当做0长度字符串,认为值已经丢失。-QUOTE:'csv_quote_character' --csv指定转义字符,默认是"-HEADER:true|false         --是否跳过数据文件第一行,当做表头-ENCODING:database_encoding  --指定数据源的字符集-ERROR_LIMIT:integer         --指定由于不符合格式数据记录的上限,如果超过该上限,gpload停止装载,否则正确记录可以被装载,错误记录抛出写入错误表。但它仅支持数据格式错误,不支持违背约束的问题-ERROR_TABLE:schema.table_name--指定不符合格式要求记录的错误表。如果指定的表不存在系统自动创建。OUTPUT:-TABLE:schema.table_name      --指定装载的目标表-MODE:insert|update|merge --指定操作模式,默认是insert。merge操作不支持使用随机分布策略的表。-MATCH_COLUMNS:                --为update操作和merge操作指定匹配条件。    -target_column_name           -UPDATE_COLUMNS:                --为update操作和merge操作指定更新的列    -target_column_name-UPDATE_CONDITION:'boolean_condition' --指定where条件,目标表中只有满足条件的记录才能更改,(merge情况下,只有满足条件的记录才能insert)-MAPPING:                       --指定source列和目标列的映射关系。target_column_name:source_column_name|'expression'PRELOAD:                         --指定load之前的操作-TRUNCATE:true|false         --如果设置成true,装载之前先删除目标表中所有记录,再装载-REUSE_TABLES:true|false    --设置成true,不会删除外部表对象会这中间表对象。从而提升性能。SQL:-BEFORE:"sql_command"        --装载操作开始前执行的SQL,比如写日志表-AFTER:"sql_command"         --装载操作之后执行的SQL。gploadYAML数据记载控制文件使用示例(DPI集团监控中心gpload数据加载控制文件):goload命令使用格式:gpload-fcontrol_file[-llog_file][-hhostname][-pport][-Uusername][-ddatabase][-W][[-v|-V][-q]][-D]参数说明:-fcontrol_fileYAML控制文件-llog_file数据记载过程记录日志文件位置-hhostnameGreenPlum数据库主机-pportGreenPlum数据库端口号-Uusername连接到数据库的用户名-ddatabase使用的数据库-v显示数据加载过程-V显示非常详细的加载过程-Ddebug模式-q安静加载,产生的日志都记录到日志文件中gpload是一个非常灵活的工具,据说可以实现文件不落地加载,可以大大提高数据装载吞吐量。SQL并行查询聚合函数索引在OLTP环境中,为了追求最快的响应时间而大量的使用索引。一般都是单条命中或少量数据集。但是GP一般都是用来做OLAP,基本都是全表扫描,故应该尽量少的使用索引。GP推荐在没有加任何索引的情况下,查看下你的查询的消耗情况。(注:有主键的表,系统会自动创建主键索引。)------建索引需考虑-------1.查询负载BI一般都访问大数据集,因此不能利用上索引。针对OLAP型数据库,序列读取大批量数据比用索引随机扫描的性能要好。2.不要频繁更新的字段上建索引3.选择性的创建B-tree索引索引选择度=同列的distinct个数/全部行数例如:一个表有1000行,某列有800个唯一值,索引的选择度是0.8唯一索引的选择度是1.0,这是最好情况4.在低选择性的列使用Bitmap索引GP新增Bitmap索引,在postgresql是没有的5.索引列通常用来做join常常被用来join的字段,建索引可以提高join的性能。(如:外键)6.索引列经常被频繁使用在where语句中7.避免重复列创建索引8.批量导入数据需删除索引导入大量数据时,先删除索引,等数据导完后再重建。这样速度会更快。索引类型:gp中hash和GIN索引都被停用了。1.B-tree,这是默认的索引类型。2.Bitmap(GP独有索引类型)------创建索引------CREATEINDEXtitle_idxONfilms(title);--默认创建B-tree索引CREATEINDEXgender_bmp_idxONemployeeUSINGbitmap(gender);--创建bitmap索引------检查索引使用------尽管在gp中索引不用维护和优化,但是检查索引使用时的负载情况还是很重要的。查看EXPLAIN中出现的提示:1.IndexScan2.BitmapHeapScan3.BitmapIndexScan4.BitmapAndorBitmapOr------管理索引------在某些情况下,一个低性能的索引可能需要进行REBUILD。update和delete是不更新bitmap索引的,因此如果你要update或delete一个有bitmap索引的表的话,将需要rebuild。示例:REINDEXmy_table;--重建my_table上的所有indexREINDEXmy_index;--重建my_index索引DROPINDEXtitle_idx;--删除索引title_idx获取索引列表:SELECTn.nspnameas"Schema",c.relnameas"Name",c2.relnameas"Table"FROMpg_catalog.pg_classcJOINpg_catalog.pg_rolesrONr.oid=c.relownerLEFTJOINpg_catalog.pg_namespacenONn.oid=c.relnamespaceLEFTJOINpg_catalog.pg_indexiONi.indexrelid=c.oidLEFTJOINpg_catalog.pg_classc2ONi.indrelid=c2.oidWHEREc.relkindIN('i','')ANDn.nspnameNOTIN('pg_catalog','pg_toast','pg_aoseg')ANDc2.relnameNOTLIKE'%_prt_%'ORDERBY1,2;分区PostgreSQL支持基本的表分区功能。本节描述为何需要表分区以及你如何在你的数据库设计里面实现表分区。目前,PostgreSQL支持通过表继承进行分区。每个分区必须做为单独一个父表的子表进行创建。父表自身通常是空的;它的存在只是为了代表整个数据集。PostgreSQL里面可以实现下面形式的分区:范围分区表被一个或者多个键字字段分区成"范围",在这些范围之间没有重叠的数值分布到不同的分区里。比如,我们可以为特定的商业对象根据数据范围分区,或者根据标识符范围分区。列表分区表是通过明确地列出每个分区里应该出现那些键字值实现的。目前还不支持散列分区。--创建主表CREATETABLEmeasurement(city_idint4NOTNULL,logdatedateNOTNULL,peaktempint4)--创建分区表,继承主表createtablemeasurement_20120601(check(logdate>=date'2012-06-01'andlogdate<date'2012-07-01'))INHERITS(measurement);createtablemeasurement_20120701(check(logdate>=date'2012-07-01'andlogdate<date'2012-08-01'))INHERITS(measurement);createtablemeasurement_20120801(check(logdate>=date'2012-08-01'andlogdate<date'2012-09-01'))INHERITS(measurement);----建立规则,主要在insert数据的时候插入分区表CREATERULEmeasurement_insert_20120601ASONINSERTTOmeasurementWHERE(logdate>=DATE'2012-06-01'ANDlogdate<DATE'2012-07-01')DOINSTEADINSERTINTOmeasurement_20120601values(NEW.city_id,NEW.logdate,NEW.peaktemp);-----另一种方法创建分区CREATETABLEmeasurement_20120501(LIKEmeasurementINCLUDINGDEFAULTSINCLUDINGCONSTRAINTS);ALTERTABLEmeasurement_20120501ADDCONSTRAINTpart20120501CHECK(logdate>=DATE'2012-05-01'ANDlogdate<DATE'2012-06-01');ALTERTABLEmeasurement_20120501INHERITmeasurement;--删除分区表DROPTABLEmeasurement_20120601;--测试数据insertintomeasurementvalues(1,date'2012-06-20',10);insertintomeasurementvalues(2,date'2012-06-21',10);insertintomeasurementvalues(3,date'2012-07-20',10);insertintomeasurementvalues(4,date'2012-07-21',10);insertintomeasurementvalues(5,date'2012-08-20',10);insertintomeasurementvalues(6,date'2012-08-21',10);----查询指定分区Select*frommeasurement_20120801;----查询主表的时候一定要使用约束排除,可以优化查询--约束排除setconstraint_exclusion=on;explainselect*frommeasurementwherelogdate>=date'2012-07-01'andlogdate<=date'2012-08-01';函数GP里没有储存过程的概念,只能定义函数。函数的结构Createorreplacefunction过程名(参数名参数类型,…..)returns返回值类型as$body$//声明变量Declare变量名变量类型;如:flagBoolean;变量赋值方式(变量名类型:=值;)如:Strtext:=值;Begin函数体;End;$body$Languageplpgsql;变量类型除了postgresql内置的变量类型外,常用的还有RECORD,表示一条记录连接字符GP的函数中的连接字符不再是“+”,而是使用“||”。控制结构1if条件(四种形式)IF...THENIF...THEN...ELSEIF...THEN...ELSEIFIF...THEN...ELSEIF...THEN...ELSE2、循环使用LOOP,EXIT,CONTINUE,WHILE,和FOR语句,可以控制PL/pgSQL函数重复一系列命令。1)LOOP[<<label>>]LOOPstatementsENDLOOP[label];LOOP定义一个无条件的循环,无限循环,直到由EXIT或者RETURN语句终止。可选的label可以由EXIT和CONTINUE语句使用,用于在嵌套循环中声明应该应用于哪一层循环。2)EXITEXIT[label][WHENexpression];如果没有给出label,那么退出最内层的循环,然后执行跟在ENDLOOP后面的语句。如果给出label,那么它必须是当前或者更高层的嵌套循环块或者语句块的标签。然后该命名块或者循环就会终止,而控制落到对应循环/块的END语句后面的语句上。如果声明了WHEN,循环退出只有在expression为真的时候才发生,否则控制会落到EXIT后面的语句上。EXIT可以用于在所有的循环类型中,它并不仅仅限制于在无条件循环中使用。在和BEGIN块一起使用的时候,EXIT把控制交给块结束后的下一个语句。例如:Loop循环If…then条件判断Exit;条件成立,则退出循环。Endif;Endloop;3)CONTINUECONTINUE[label][WHENexpression];如果没有给出label,那么就开始最内层的循环的下一次执行。也就是说,控制传递回给循环控制表达式(如果有),然后重新计算循环体。如果出现了label,它声明即将继续执行的循环的标签。如果声明了WHEN,那么循环的下一次执行只有在expression为真的情况下才进行。否则,控制传递给CONTINUE后面的语句。CONTINUE可以用于所有类型的循环;它并不仅仅限于无条件循环。例如:LOOP一些计算EXITWHENcount>100;CONTINUEWHENcount<50;一些在count数值在[50..100]里面时候的计算ENDLOOP;4)WHILE[<<label>>]WHILEexpressionLOOPstatementsENDLOOP[label];只要条件表达式为真,WHILE语句就会不停在一系列语句上进行循环.条件是在每次进入循环体的时候检查的.例如:WHILEamount_owed>0ANDgift_certificate_balance>0LOOP--可以在这里做些计算ENDLOOP;WHILENOTBOOLEAN_expressionLOOP--可以在这里做些计算ENDLOOP;5)FOR(整数变种)[<<label>>]FORnameIN[REVERSE]expression..expressionLOOPstatementsENDLOOP[labal];这种形式的FOR对一定范围的整数数值进行迭代的循环。变量name会自动定义为integer类型并且只在循环里存在。给出范围上下界的两个表达式在进入循环的时候计算一次。迭代步进值总是为1,但如果声明了REVERSE就是-1。一些整数FOR循环的例子∶FORiIN1..10LOOP表示1循环到10这里可以放一些表达式RAISENOTICE'iIS%',i;ENDLOOP;FORiINREVERSE10..1LOOP这里可以放一些表达式ENDLOOP;如果下界大于上界(或者是在REVERSE情况下是小于),那么循环体将完全不被执行。而且不会抛出任何错误。3、异常捕获EXCEPTIONWHEN错误码(如:STRING_DATA_RIGHT_TRUNCATION:字串数据右边被截断)THEN/**后台打印错误信息*/RAISENOTICE'错吴信息';4维护数据库4.1数据库启动gpstart常用参数:-a:直接启动,不提示终端用户输入确认-m:只启动master实例,主要在故障处理时使用这是4个节点的集群正常启动的截图:[gpadmin@v-centos62-64-65~]$gpstart-a20121025:13:33:12:006244gpstart:v-centos62-64-65:gpadmin-[INFO]:-Startinggpstartwithargs:-a20121025:13:33:12:006244gpstart:v-centos62-64-65:gpadmin-[INFO]:-Gatheringinformationandvalidatingtheenvironment...20121025:13:33:13:006244gpstart:v-centos62-64-65:gpadmin-[INFO]:-GreenplumBinaryVersion:'postgres(GreenplumDatabase)4.2.1.0build3'20121025:13:33:13:006244gpstart:v-centos62-64-65:gpadmin-[INFO]:-GreenplumCatalogVersion:'201109210'20121025:13:33:13:006244gpstart:v-centos62-64-65:gpadmin-[WARNING]:-postmaster.pidfileexistsonMaster,checkingifrecoverystartuprequired20121025:13:33:13:006244gpstart:v-centos62-64-65:gpadmin-[INFO]:-Commencingrecoverystartupchecks20121025:13:33:13:006244gpstart:v-centos62-64-65:gpadmin-[INFO]:-Nosocketconnectionorlockfilein/tmpfoundforport=543220121025:13:33:13:006244gpstart:v-centos62-64-65:gpadmin-[INFO]:-NoMasterinstanceprocess,enteringrecoverystartupmode20121025:13:33:13:006244gpstart:v-centos62-64-65:gpadmin-[INFO]:-ClearingMasterinstancepidfile20121025:13:33:13:006244gpstart:v-centos62-64-65:gpadmin-[INFO]:-StartingMasterinstanceinadminmode20121025:13:33:18:006244gpstart:v-centos62-64-65:gpadmin-[INFO]:-ObtainingGreenplumMastercataloginformation20121025:13:33:18:006244gpstart:v-centos62-64-65:gpadmin-[INFO]:-ObtainingSegmentdetailsfrommaster...20121025:13:33:19:006244gpstart:v-centos62-64-65:gpadmin-[INFO]:-Settingnewmasterera20121025:13:33:19:006244gpstart:v-centos62-64-65:gpadmin-[INFO]:-Commencingforcedinstanceshutdown20121025:13:33:21:006244gpstart:v-centos62-64-65:gpadmin-[INFO]:-StartingMasterinstanceinadminmode20121025:13:33:22:006244gpstart:v-centos62-64-65:gpadmin-[INFO]:-ObtainingGreenplumMastercataloginformation20121025:13:33:22:006244gpstart:v-centos62-64-65:gpadmin-[INFO]:-ObtainingSegmentdetailsfrommaster...20121025:13:33:22:006244gpstart:v-centos62-64-65:gpadmin-[INFO]:-Settingnewmasterera20121025:13:33:22:006244gpstart:v-centos62-64-65:gpadmin-[INFO]:-MasterStarted...20121025:13:33:23:006244gpstart:v-centos62-64-65:gpadmin-[INFO]:-Shuttingdownmaster20121025:13:33:24:006244gpstart:v-centos62-64-65:gpadmin-[INFO]:-Startingstandbymaster20121025:13:33:24:006244gpstart:v-centos62-64-65:gpadmin-[INFO]:-Checkingifstandbymasterisrunningonhost:v-centos62-64-66indirectory:/u01/gpadmin/gpmaster/gpseg-120121025:13:33:24:006244gpstart:v-centos62-64-65:gpadmin-[INFO]:-Nodbinstanceprocess,enteringrecoverystartupmode20121025:13:33:38:006244gpstart:v-centos62-64-65:gpadmin-[INFO]:-Commencingparallelprimaryandmirrorsegmentinstancestartup,pleasewait..............20121025:13:33:49:006244gpstart:v-centos62-64-65:gpadmin-[INFO]:-Processresults...20121025:13:33:49:006244gpstart:v-centos62-64-65:gpadmin-[INFO]:-----------------------------------------------------20121025:13:33:49:006244gpstart:v-centos62-64-65:gpadmin-[INFO]:-Successfulsegmentstarts=820121025:13:33:49:006244gpstart:v-centos62-64-65:gpadmin-[INFO]:-Failedsegmentstarts=020121025:13:33:49:006244gpstart:v-centos62-64-65:gpadmin-[INFO]:-Skippedsegmentstarts(segmentsaremarkeddowninconfiguration)=020121025:13:33:49:006244gpstart:v-centos62-64-65:gpadmin-[INFO]:-----------------------------------------------------20121025:13:33:49:006244gpstart:v-centos62-64-65:gpadmin-[INFO]:-20121025:13:33:49:006244gpstart:v-centos62-64-65:gpadmin-[INFO]:-Successfullystarted8of8segmentinstances20121025:13:33:49:006244gpstart:v-centos62-64-65:gpadmin-[INFO]:-----------------------------------------------------20121025:13:33:49:006244gpstart:v-centos62-64-65:gpadmin-[INFO]:-StartingMasterinstancev-centos62-64-65directory/u01/gpadmin/gpmaster/gpseg-120121025:13:33:50:006244gpstart:v-centos62-64-65:gpadmin-[INFO]:-Commandpg_ctlreportsMasterv-centos62-64-65instanceactive20121025:13:33:50:006244gpstart:v-centos62-64-65:gpadmin-[INFO]:-Databasesuccessfullystarted4.2数据库停止gpstop常用可选参数:-a:直接停止,不提示终端用户输入确认-m:只停止master实例,与gpstart–m对应使用-f:停止数据库,中断所有数据库连接,回滚正在运行的事务。-u:不停止数据库,只加载pg_hba.conf和postgresql.conf中运行时参数,当改动参数配置时候使用。4.3查看实例配置和状态select*fromgp_segment_configurationorderbycontent;select*frompg_filespace_entry;主要字段说明:Content:该字段相等的两个实例,是一对P(primaryinstance)和M(mirrorInstance)Isprimary:实例是否作为primaryinstance运行Valid:实例是否有效,如处于false状态,则说明该实例已经down掉。Port:实例运行的端口Datadir:实例对应的数据目录4.4查看数据库运行状态gpstate常用可选参数:-c:primaryinstance和mirrorinstance的对应关系-m:只列出mirror实例的状态和配置信息-f:显示standbymaster的详细信息该命令默认列出数据库运行状态汇总信息,常用于日常巡检。这是4个节点的集群运行正常时的状态:[gpadmin@v-centos62-64-65~]$gpstate-c20121025:13:35:32:007659gpstate:v-centos62-64-65:gpadmin-[INFO]:-Startinggpstatewithargs:-c20121025:13:35:33:007659gpstate:v-centos62-64-65:gpadmin-[INFO]:-localGreenplumVersion:'postgres(GreenplumDatabase)4.2.1.0build3'20121025:13:35:33:007659gpstate:v-centos62-64-65:gpadmin-[INFO]:-masterGreenplumVersion:'PostgreSQL8.2.15(GreenplumDatabase4.2.1.0build3)onx86_64-unknown-linux-gnu,compiledbyGCCgcc(GCC)4.4.2compiledonFeb22201211:47:26'20121025:13:35:33:007659gpstate:v-centos62-64-65:gpadmin-[INFO]:-ObtainingSegmentdetailsfrommaster...20121025:13:35:33:007659gpstate:v-centos62-64-65:gpadmin-[INFO]:--------------------------------------------------------------20121025:13:35:33:007659gpstate:v-centos62-64-65:gpadmin-[INFO]:--CurrentGPDBmirrorlistandstatus20121025:13:35:33:007659gpstate:v-centos62-64-65:gpadmin-[INFO]:--Type=Spread20121025:13:35:33:007659gpstate:v-centos62-64-65:gpadmin-[INFO]:--------------------------------------------------------------20121025:13:35:33:007659gpstate:v-centos62-64-65:gpadmin-[INFO]:-StatusDataStatePrimaryDatadirPortMirrorDatadirPort20121025:13:35:33:007659gpstate:v-centos62-64-65:gpadmin-[INFO]:-PrimaryActive,MirrorAvailableSynchronizedv-centos62-64-61/u01/gpadmin/gpdata1/gpseg050000v-centos62-64-62/u01/gpadmin/mirror/gpseg05100020121025:13:35:33:007659gpstate:v-centos62-64-65:gpadmin-[INFO]:-PrimaryActive,MirrorAvailableSynchronizedv-centos62-64-62/u01/gpadmin/gpdata1/gpseg150000v-centos62-64-63/u01/gpadmin/mirror/gpseg15100020121025:13:35:33:007659gpstate:v-centos62-64-65:gpadmin-[INFO]:-PrimaryActive,MirrorAvailableSynchronizedv-centos62-64-63/u01/gpadmin/gpdata1/gpseg250000v-centos62-64-64/u01/gpadmin/mirror/gpseg25100020121025:13:35:33:007659gpstate:v-centos62-64-65:gpadmin-[INFO]:-PrimaryActive,MirrorAvailableSynchronizedv-centos62-64-64/u01/gpadmin/gpdata1/gpseg350000v-centos62-64-61/u01/gpadmin/mirror/gpseg35100020121025:13:35:33:007659gpstate:v-centos62-64-65:gpadmin-[INFO]:--------------------------------------------------------------4.5查看用户会话和提交的查询等信息select*frompg_stat_activity该表能查看到当前数据库连接的IP地址,用户名,提交的查询等。另外也可以在master主机上查看进程,对每个客户端连接,master都会创建一个进程。ps-ef|grep-ipostgres|grep-icon杀进程:Linux:kill-11PIDSql:pg_cancel_backend(pid)ps–ef|grep–ipostgre|grep–icon4.6查看数据库、表占用空间selectpg_size_pretty(pg_relation_size('schema.tablename'));selectpg_size_pretty(pg_database_size('databasename));分区表:Select* frompg_partitionswhere…查某个schema占用的空间:selectpg_size_pretty(pg_relation_size(tablename))frompg_tablestinnerjoinpg_namespacedont.schemaname=d.nspnamegroupbyd.nspname必须在数据库所对应的存储系统里,至少保留30%的自由空间,日常巡检,要检查存储空间的剩余容量。4.7查看数据分布情况selectgp_segment_id,count(*)fromtablenamegroupby1;4.8实例恢复gprecoverseg通过gpstate或gp_segment_configuration发现有实例down掉以后,使用该命令进行恢复,恢复时候不需要停机,不影响应用,但是恢复之后要重启一下集群。4.9查看锁信息SELECTlocktype,database,c.relname,l.relation,l.transactionid,l.transaction,l.pid,l.mode,l.granted,a.current_queryFROMpg_locksl,pg_classc,pg_stat_activityaWHEREl.relation=c.oidANDl.pid=a.procpidORDERBYc.relname;主要字段说明:relname:表名locktype、mode标识了锁的类型4.10数据库的备份与恢复可以使用pgAdminIII来备份和恢复数据库,也可以使用命令。5调优、排错6附件6.1DBA常用命令 查看表大小:selectpg_size_pretty(pg_relation_size(’$schema.$table’));查看当前用户的表:select*frompg_stat_user_tables;查看当前用户的索引:select*frompg_stat_user_indexes;查看Distributedkey:selectb.attnamefrompg_classa,pg_attributeb,pg_typec,gp_distribution_policyd,pg_namespaceewhered.localoid=a.oidanda.relnamespace=e.oidande.nspname=‘$schema’—模式名anda.relname=’$table’—表名anda.oid=b.attrelidandb.atttypid=c.oidandb.attnum>0andb.attnum=any(d.attrnums)orderbyattnum;查看当前存活的查询:selectprocpidaspid,sess_idassession,usenameasuser,current_queryasquery,waiting,date_trunc('second',query_start)asstart_time,client_addrasuseraddrfrompg_stat_activitywheredatname='chinamobile_dpi'--此处写数据库名andcurrent_querynotlike'%frompg_stat_activity%wheredatname=%'orderbystart_time;查询正在运行的sql:select*frompg_stat_activity;修改distributed列altertabletable_namesetdistributedby(column_1);7Q&A7.1不支持触发器GreenPlum不支持触发器,所以关于触发器的一切操作都是非法的。答复:Greenplum不支持触发器。Greenplum是一个定位于OLAP的数据。一般情况下,数据仓库的数据一致性是由ETL程序来保证的,而触发器对数据仓库应用反而有损无益。作业的调度,数据仓库也会通过不同的ETL工具来实现。7.2更新操作中的若干问题更新操作时,不能对分布字段即distributedby()子句中的字段进行更新,因为更新后会涉及到将行记录从一个segmenthost移动到另一个segmenthost的过程,而在gp数据库中,这种操作目前还是禁止的。同时对于任何更新和删除操作,只要涉及到要将行有segmenthost移动的,就会发生错误。语句一:UPDATEpublic.newtSETid=3,num=4WHEREid=1;结果截图:处理办法一:删表重建再插入数据处理办法二:先改为随机分布再执行update注意:随机分布和不设分布键不是一个概念,随机分布是distributedrandomly,而缺省分布也就是不设分布键的概念是:按主键分布,如果表没有主键,则按照第一个字段分布。SegmentnSegment2Segment1
/
本文档为【GreenPlum使用手册】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索