注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

PostgreSQL 中文网

 
 
 

日志

 
 

PL/Proxy 之 三: 增加数据节点  

2014-09-22 09:35:13|  分类: PG性能优化 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

关于扩分区
        扩分区意味着数据需要重新分布,这个操作比较费时。查阅了 PL/proxy 关于扩分区的内容,手册中给出的这条建议还是不错的:
     
       预先分配分区: 假如在项目初期如果认为两台服务器可以承担负载,那么可以将数据表分成 8 个分区(当然也能多分些分区),每台服务器上操持四个,当数据量上升时,那么仅需将分区迁移到其它服务器,而不需要涉及到数据重分布。
       
       我这里的实验是在  PL/Proxy 之一: 使用外部表 SQL/MED搭建 PL/Proxy  搭建的基础之上,扩两个数据节点,手工处理数据重分布。
      
一 环境信息      
--原来的架构

proxy
db0
db1

备注:之前的PL/Proxy 架构: 一个 proxy 节点,两个数据节点。

--目标增加两个数据库
db2
db3

二 增加数据节点步骤
--创建表空间目录

mkdir -p /database/pg93/pg_tbs/tbs_db2
mkdir -p /database/pg93/pg_tbs/tbs_db3


--创建表空间

create tablespace tbs_db2 owner proxy LOCATION '/database/pg93/pg_tbs/tbs_db2';
create tablespace tbs_db3 owner proxy LOCATION '/database/pg93/pg_tbs/tbs_db3';


--创建数据库

CREATE DATABASE db2 WITH  OWNER = proxy  TEMPLATE = template0  ENCODING = 'UTF8'  TABLESPACE = tbs_db2;
CREATE DATABASE db3 WITH  OWNER = proxy  TEMPLATE = template0  ENCODING = 'UTF8'  TABLESPACE = tbs_db3;


--在 db2, db3 创建以下表

CREATE TABLE users (
    username text,
    email text
);


--创建 insert_user 函数,在 db2, db3 库上执行

CREATE OR REPLACE FUNCTION insert_user(i_username text, i_emailaddress text)
RETURNS integer AS $$
       INSERT INTO users (username, email) VALUES ($1,$2);
       SELECT 1;
$$ LANGUAGE SQL;


--创建DDL 函数, 在 db2, db3 库上执行 ( 此步可选,为了维护方便)

CREATE OR REPLACE FUNCTION  func_ddl(sql text)
RETURNS  integer AS $$
begin
execute sql;
return 1;
end;
$$ LANGUAGE plpgsql;


--给 server 添加数据节点配置信息

proxy=# Alter server proxy_srv  options(add p2 'dbname=db2 host=127.0.0.1' ,p3 'dbname=db3 host=127.0.0.1');   
ALTER SERVER

proxy=# \des+
List of foreign servers
-[ RECORD 1 ]--------+-------------------------------------------------------------------------------------------------------------------------------------------------------------
Name                 | proxy_srv
Owner                | postgres
Foreign-data wrapper | plproxy
Access privileges    | postgres=U/postgres
                     | proxy=U/postgres
Type                 |
Version              |
FDW Options          | (connection_lifetime '1800', p0 'dbname=db0 host=127.0.0.1', p1 'dbname=db1 host=127.0.0.1', p2 'dbname=db2 host=127.0.0.1', p3 'dbname=db3 host=127.0.0.1')
Description          



三  测试
--清理数据: proxy 节点执行

proxy=> select func_ddl('truncate table users;');
NOTICE:  PL/Proxy: dropping stale conn
NOTICE:  PL/Proxy: dropping stale conn
NOTICE:  PL/Proxy: dropping stale conn
NOTICE:  PL/Proxy: dropping stale conn
 func_ddl
----------
 1
 1
 1
 1
(4 rows)


--插入10000 条测试数据, proxy 节点执行

proxy=> select   insert_user('user_'||n, 'user_'||n || '@163.com') from generate_series(1,10000) n;
 insert_user
-------------
           1
           1
           1
           ....

备注:省略输出内容。

--数据验证, 各数据节点执行

db0=> select count(*) from users ;
 count
-------
  2530
(1 row)

db0=> \c db1
You are now connected to database "db1" as user "proxy".
db1=> select count(*) from users ;
 count
-------
  2504
(1 row)

db1=> \c db2
You are now connected to database "db2" as user "proxy".
db2=> select count(*) from users ;
 count
-------
  2497
(1 row)

db2=> \c db3
You are now connected to database "db3" as user "proxy".
db3=> select count(*) from users ;
 count
-------
  2469
(1 row)

备注:可见数据均匀分布到了四个节点。


四 参考
  评论这张
 
阅读(608)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016