Oracle 12 C与Postgresql数据大小的磁盘差异

时间:2014-10-14 09:10:26

标签: oracle postgresql

我是数据库世界的新手,目前正在评估在我的新项目中使用Oracle 12c或Postgresql。我在服务器硬件上安装了Oracle 12c,在Windows 7上我的笔记本电脑上安装了Redhat Linux(RHEL 6.5)和Postgresql。我在每个服务器上创建了下表,并使用Java程序将伪数据插入其中。

首先我将数据插入到Postgresql中,程序插入了大约1800万行,磁盘消耗增加了16 GB。相同的程序在Oracle中插入数据,并且发现Oracle仅使用430万行消耗了100 GB的整个表空间限制。 有人可以指导我为什么Oracle会为类似的数据占用这么多的磁盘空间吗?我在Oracle中应该做些什么设置以便它占用更少的磁盘空间?我还没有定义任何索引。

用于在Oracle中创建表的SQL查询如下所示。

CREATE TABLE OCT102014 
(
  A TIMESTAMP 
, B VARCHAR2(1000) 
, C VARCHAR2(1000) 
, D INT 
, E INT 
, F INT 
, G INT 
, H FLOAT 
, I VARCHAR2(32000) 
, J INT 
, K INT 
, L INT 
, M INT 
, N FLOAT 
, O VARCHAR2(32000) 
, P INT 
, Q INT 
, R INT 
, S INT 
, T FLOAT 
, U VARCHAR2(32000) 
, V VARCHAR2(32000) 
, W VARCHAR2(32000) 
, primarykey int
);

用于在POSTGRESQL中创建表的SQL查询如下所示。

CREATE TABLE OCT102014 
(
  A TIMESTAMP 
, B INT
, C INT
, D INT 
, E INT 
, F INT 
, G INT 
, H FLOAT 
, I text 
, J INT 
, K INT 
, L INT 
, M INT 
, N FLOAT 
, O text
, P INT 
, Q INT 
, R INT 
, S INT 
, T FLOAT 
, U text
, V text
, W text
, primarykey int
);

额外的想法

在第I列,O,U,V和W中,我为示例数据插入程序中的所有行添加完全相同的字符串。 Postgresql是否可能发现out并且只为所有行存储一个副本?这可能是postgresql中磁盘空间消耗低的原因。 Oracle可能没有这样做。请评论。

1 个答案:

答案 0 :(得分:0)

如果您创建的初始大小为100GB的表空间,在磁盘上消耗100GB。

要测量表格本身的大小,您需要查询系统视图USER_SEGMENTS

表空间文件的大小 反映该表空间中表的大小。

以下将显示当前架构中的表和索引使用的大小:

select segment_name,
       segment_type,
       sum(bytes) as total_bytes
from user_segments
group by segment_name, segment_type;
相关问题