Greenplum存储过程使用分区表将进行全表扫描

环境:Greenplum Database 4.2.1.0 , RHEL 5.4
问题: 之前用存储过程转换数据,其中一个表做分区,里面的逻辑先是删除日期参数的数据,然后用外部表导入再转换。最近由于装载了很多数据,发现后续增量加载超慢。 后来发现是“删除日期参数的数据”这个操作造成的,删除某一天数据执行的是全表扫描。但在psql命令中分区键能过滤。
解决方法: 在网上找到一篇跟我碰到情况类似的
大意是有两种方式避免,1. 涉及分区表使用动态sql   2. 升级至postgresql 9.2  , 这两种方法显能对gp是不靠谱的,只能用动态sql了, 苦了我们这帮用存储过程做数据转换的开发者。

Postgres-XC单机安装

单机环境: CentOS 6 64bit,  pgxc-v1.0.1.tar.gz
解压 pgxc-v1.0.1.tar.gz,进入pgxc,
 ./configure –without-readline –without-zlib    ( 注:由于服务器未安装readline和zlib包,故省去)
gmake
gmake install
安装协调结点,数据结点和GTM,
cd /usr/local/pgsql/bin/
./initdb -D /usr/local/pgsql/data_coord1 –nodename coord1
./initdb -D /usr/local/pgsql/data_datanode1 –nodename datanode1
./initdb -D /usr/local/pgsql/data_datanode2 –nodename datanode2
./initgtm -D /usr/local/pgsql/data_gtm -Z gtm
启动服务:
./gtm -D /usr/local/pgsql/data_gtm &
./postgres -X -p 15432 -D /usr/local/pgsql/data_datanode1 &
./postgres -X -p 15433 -D /usr/local/pgsql/data_datanode2 &
./postgres -C -D /usr/local/pgsql/data_coord1 &
进入postgres-xc,创建元数据
./psql
create node datanode1 with(type=’datanode’, port=15432);
create node datanode2 with(type=’datanode’, port=15433);
select pgxc_pool_reload();
./createdb test
创建测试数据库
./psql test
create table user_info_hash(id int primary key,firstname text,lastname text,info text) distribute by hash(id) to node datanode1,datanode2;
insert into user_info_hash select generate_series(1,10000),’zhou’,’digoal’,’DBA’;

使用Oracle gateway连接GP时编译plsql包太慢

环境:Greenplum Database 4.2.1.0, Centos 5.6,  Oracle database 11gR2
问题: 在plsql程序中使用了连接到gp的dblink的表,表中测试数据大约为百万条,当编译包时花费大约半分钟。
具体原因未找到。当编译时,其gp到Oracle的网络流量异常变大。推测是编译包时会对这张表做一些元数据的检查,同时也对数据量做一些评估。
解决方法:新建一张类同的表但没有数据,在包中替换成这张表。

oracle 跨库查询greenplum慢

测试环境:Centos 5.6,  Oracle database 11gR2, Greenplum 4.2
在Oracle 中查询GP的数据极慢,每次查询会在/tmp目录生成一个大约2G的文件mylog_oradev2345.log, 确定HS_FDS_TRACE_LEVEL设置为OFF,同时这个日志也在$ORACLE_HOME/hs/log目录下。最后查到/etc/odbc.ini文件,原来设置的odbc连接参数已经打开追踪模式,汗。。。 设置Trace=0可以解决问题。

Postgresql无法远程连接

环境: CentOS 5, Postgresql 9, WinXp

通过winXP上的psql连接远程服务器上postgresql服务,出现错误:
C:\\Documents and Settings\\rand>psql -U postgres -d postgres -h 10.71.88.251 -p 5432
psql: 无法联接到服务器: Connection refused (0x0000274D/10061)
服务器是否在主机 “10.71.88.251” 上运行并且准备接受在端口
5432 上的 TCP/IP 联接?

之前配置过pg_hba.conf上的信息:
host    all             all             10.71.88.252/32         trust    –注10.71.88.252为winxp的IP地址

经排错,发现postgresql.conf中有一个监听器地址参数为#listen_addresses = ‘localhost’, 必须将其修改为listen_addresses = ‘*’,以便可以让其它客户端来访问。

Greenplum安装dblink模块

环境:centos 5, greenplum 4, postgresql 8.2.22
解压后切换到/home/gpadmin/postgresql-8.2.22/contrib/dblink目录下,
$vi Makefile
将PG_CPPFLAGS = -I$(libpq_srcdir) 设置为PG_CPPFLAGS = -I$(libpq_srcdir) -w
$make USE_PGXS=1 install
然后将dblink.so拷贝到其它segment hosts上
$ gpssh -f /host/gpadmin/host_all dblink.so ‘/usr/local/gp/lib/postgresql/dblink.so’
$createdb testdb
$psql -f dblink.sql testdb