当前情况:大表的数据量已接近2亿条
我的解决思路:为它创建n*100个分区表,将各个分区表放在不同的tablespace上
这样做的优点:
1、首先是对这个级别的数据表的性能会有所提升
2、数据管理更科学
3、生产运维过程故障排查便捷

实验环境
VM Ware ESXi
Redhat 6.3 64bit
PostgreSQL 9.2/9.3
内存:2G

实现方法(同样适用于Oracle)

1、创建测试表

 /**
创建300个分区表,每张表写入5万数据
*/
-- -------------------- step1 : CREATE TABLE--------------------
DROP TABLE parttest;
CREATE TABLE parttest (some_test TEXT,some_tstimestamptz TEXT,random_value INT4, p_condition DATE)
PARTITION BY RANGE(p_condition)
(
PARTITION p_2013_09_02_and_early VALUES LESS THAN ('2013-09-03')
);

2、已时间为分区条件,创建300个分区表的过程

 -- -------------------- step2 : CREATE PARTITION PROCEDUCE --------------------
CREATE OR REPLACE PROCEDURE create_partition_withindex() AS DECLARE
tblname varchar := 'parttest';
tblname_prefix varchar := 'p_condition';
part_tbl_name varchar;
current_part_name varchar;
sql_addpartition_cmd varchar; BEGIN
-- POPULATE SQL COMMAND
-- PARTITION TABLE'S NAME IS LIKE "TABLENAME_p_2019_12_31"
FOR j IN 1..300 LOOP
current_part_name := to_char(current_date + j,'YYYY_MM_DD');
part_tbl_name := tblname_prefix || '_p_' || current_part_name; -- POPULATE SQL COMMAND STRING
sql_addpartition_cmd = 'ALTER TABLE ' || tblname || ' ADD PARTITION p_' || current_part_name || ' VALUES LESS THAN (''' || (current_date + j + 1) || ''');';
DBMS_OUTPUT.PUT_LINE(sql_addpartition_cmd);
EXECUTE IMMEDIATE sql_addpartition_cmd; IF ((j % 30) = 0) THEN
COMMIT;
END IF; END LOOP; EXECUTE IMMEDIATE 'ALTER TABLE ' || tblname || ' ADD PARTITION p_' || to_char(current_date + 300 + 1,'YYYY_MM_DD') || '_and_later VALUES LESS THAN (''' || (current_date + 300 + 2) || ''');';
END;

3、创建分区表

-- -------------------- step3 CREATE PARTITION --------------------
EXEC create_partition_withindex;

DEMO测试
1、创建写入数据的存储过程

 -- -------------------- step4 CREATE TEST DATA PROCEDUCE --------------------

 CREATE OR REPLACE PROCEDURE create_partition_testdata() AS

 DECLARE

 BEGIN
FOR i IN 0..300 LOOP
INSERT INTO parttest (some_test, some_tstimestamptz, random_value,p_condition)
SELECT
'user #' || cast(floor(random() * 10) as int4),
now() - '1 year'::INTERVAL * random(),
cast(random() * 100000000 as INT4),
(current_date + i)
FROM
generate_series(1,500000);
COMMIT;
END LOOP;
END;

2、执行写入数据的存储过程

-- -------------------- step5 CREATE TEST DATA --------------------
EXEC create_partition_testdata;

3、检查写入数据的数据量

SELECT COUNT(*) FROM parttest;

如果有必要,在写入数据时可以记录一下创建分区表及写入数据的时间数据。

[原创]PostgreSQL Plus Advanced Server批量创建分区表写入亿级别数据实例的更多相关文章

  1. [原创] PostgreSQL Plus Advanced Server在Windows中配置双机热备流复制

    一.系统环境 操作系统:Windows Server 2003/2008 两个节点分别为master与slave. 主节点master:172.27.19.28 备机点slave:172.27.19. ...

  2. [原创]PostgreSQL Plus Advanced Server配合crontab实现定时维护工作

    本文要实现的目标1.PostgreSQL定时全备2.定时删除归档WAL文件3.定时删除全备文件4.删除n天之前的数据库日志文件 实验环境操作系统:RHEL 6.3数据库:PostgreSQL Plus ...

  3. [原创]PostgreSQL Plus Advanced Server监控工具PEM(四)

    四.PEM管理工具 1.编辑配置 选择进行管理的目标服务器,点击菜单Tools->Server Configuration->postgresql.conf管理服务器配置,可以看到我们经常 ...

  4. [原创]PostgreSQL Plus Advanced Server监控工具PEM(三)

    三.使用PEM Client 在PEM Client中连接PEM Server 点击上图所示的按钮或点击菜单-> 第一次连接PEM Server,会有一次导入证书的操作,点击Yes按钮. 接下来 ...

  5. [原创]PostgreSQL Plus Advanced Server监控工具PEM(二)

    2.安装PEM Client 简单两条命令,开始PEM Client的安装. 我们在SUSE 11sp2上安装PEM Client 安装结束,运行PEM Client后可以看到如下的界面: 目前我们并 ...

  6. [原创]PostgreSQL Plus Advanced Server监控工具PEM(一)

    一.概述 PEM是为数据库管理员.系统架构师和性能分析师为管理.监控和优化 PostgreSQL 和 EnterpriseDB 数据库服务器设计的图形化管理工具.旨在解决大量数据库服务器跨地域.精细化 ...

  7. [原创]使用benchmarksql和pgbench对PostgreSQL Plus Advanced Server进行性能测试

    一.测试环境 benchmarksql version:4.0.8 rhel 6.3 vmware esxi 二.理解benchmarksql性能测试原理TPC-C 1.理解TPC-C TPC-C模拟 ...

  8. SQL Server 批量创建作业(备份主分区)

    一. 需求背景 在我的数据库实例中,有很多类似下图所示的数据库,这些数据库的名称是有规律的,每个数据库包含的表都是相同的,其中2个表是类似流水记录的表,表的数据量会比较大,占用的空间有几十G到上百G不 ...

  9. [原创]从Oracle和Microsoft Sql Server迁移到PostgreSQL Plus Advanced Server

    一.了解PPAS的迁移方式1.在线迁移和离线迁移使用Migration Studio或Migration Toolkit直接向PPAS数据库进行对象定义和数据表中数据的迁移称为在线迁移,生成要迁移对象 ...

随机推荐

  1. 学习总结 JDBC

  2. 操作系统学习笔记 对称多处理(SMP)

    SMP:一种通过复用处理器提高程序执行并行性的方式. 根据SMP,计算机系统可以分为以下四类: 单指令单数据流(SISD):一个单处理器执行一个单指令流,对保存在一个存储器中的数据进程进行操作. 单指 ...

  3. webview渲染流程

    文档标记说明 ################# 消息边界 +++++++++++++++++ 区域分隔 $$$$$$$$$$$$$$$$$ 线程边界 ~~~~~~~~~~~~~~~~~ 进程边界 - ...

  4. oracle:jdbcTest

    JDBC连接数据库 •创建一个以JDBC连接数据库的程序,包含7个步骤: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.l ...

  5. 【Struts 1】Struts1的基本原理和简介

    备注:这里介绍的是Struts1的内容,Struts2的内容,会在后续的博客的予以说明! 一.什么是Struts struts的目标是提供一个开发web应用的开源框架,Struts鼓励基于Model2 ...

  6. Landsat 8 OLI_TIRS 卫星数字产品

      产品描述           2013 年2月11日,美国航空航天局(NASA) 成功发射Landsat-8卫星.Landsat-8卫星上携带两个传感器,分别是OLI陆地成像仪(Operation ...

  7. 代码轮子之很简单但是挺管用的基于C# Task的模拟并发的代码

    代码轮子之很简单但是挺管用的基于C# Task的模拟并发的代码

  8. 【转】DDR3详解(以Micron MT41J128M8 1Gb DDR3 SDRAM为例)

    这两天正在学习FPGA如何控制DDR3的读写,找到一篇个人感觉比较有意义的文章,可以对DDR的内部结构有一个初步的了解.原文出处:http://blog.chinaunix.net/uid-28458 ...

  9. hbase 各个概念,region,storefile

    HBase中有两张特殊的Table,-ROOT-和.META. .META.:记录了用户表的Region信息,它可以有多高region(这的意思是说.META.表可以分 裂成多个region,和用户表 ...

  10. easyui+ashx 动态初始化datagrid(动态列头)

    效果图: 1:简单初始化 JSON格式数据如下(后台自己构建,后台代码略): {"total":6,"columns":[{"field": ...