【问题标题】:Postgresql size of table and full joinPostgresql 表大小和完全连接
【发布时间】:2014-04-23 08:29:55
【问题描述】:

我正在使用的文件:

spark@cv-local:~$ ls -lh idUser.csv 
-rw-r--r-- 1 postgres postgres 9.5M Apr 22 14:55 idUser.csv

我之前的数据库大小:

spark@cv-local:/var$ sudo du -h | grep main  
5.8M   ./lib/postgresql/9.1/main/base/57371

Psql:

test2=# create table client_id (iditem INT);
CREATE TABLE
test2=# copy client_id from '/home/spark/idUser.csv' DELIMITER ',' CSV;
COPY 1158836

之后我的数据库大小:

spark@cv-local:/var$ sudo du -h | grep main
46M   ./lib/postgresql/9.1/main/base/57371

谁能解释一下为什么 postgres 的大小是普通文件的 4 倍?

我对此进行了调查,因为我尝试完全加入 ( CREATE TABLE testjoin AS SELECT * FROM client_id, item_id; ) 两个文件,一个是 9.5M,另一个是 5.8M 我得到一个错误磁盘空间。数据库规模从 70M 到 60G 以上。

【问题讨论】:

    标签: database postgresql join size


    【解决方案1】:

    当您创建连接表时,请记住指定 where 子句。否则,您的表格将包含来自 client_id 和 item_id 的所有可能的条目组合!

    【讨论】:

    • 这是我要找的 ;)。我的表client_id,只是一列,与item_id 相同。我想将客户与所有项目相关联。
    【解决方案2】:
    1. 在我的机器上,作为正常操作的一部分,PostgreSQL 在 pg_xlog 下创建 16MB 文件 - 这是事务日志。当您刚刚创建数据库时,此文件将为空。但是,在达到 16MB 后,它将保持在这个大小。对您而言,仅此文件一项就意味着几乎 50% 的意外增长。
    2. 数据库在磁盘上占用的空间比 CSV 等文本文件中的原始数据略多是正常的。数据库有一些开销,因为它必须维护内部结构和可能的索引。但是,如果您有高度可压缩的大文本列,PostgreSQL 会自动压缩它们,这可能会使数据库大小小于原始数据。
    3. 如果您执行VACUUM FULL,您的数据库应该会缩小。但是,只有当您有很多已删除的行时,这种减少才会显着。请注意,您通常不应VACUUM FULL,因为此操作会独占锁定表。相反,您应该使用简单的 VACUUM 或仅依赖自动真空。
    4. 对于像您这样的小尺寸 - 不到 100MB,比较尺寸是不公平的。只有在达到几百兆字节后才应该这样做。

    【讨论】:

      猜你喜欢
      • 2015-05-02
      • 2019-10-28
      • 2014-11-18
      • 2015-06-28
      • 1970-01-01
      • 2021-11-09
      • 2015-02-14
      • 2019-04-17
      • 2021-12-19
      相关资源
      最近更新 更多