标签: storage

为什么我的数据库比插入的数据大 12 倍?

我有一个关于我的数据库大小的简短问题。我需要在数据库中插入数据。在插入之前,需要进行一些计算。

关键是:从 50 mb 纯数据(~700,000 行),这导致 600 mb db 大小。这是12倍!我确定我在这里做错了什么。你能帮我缩小我的数据库的大小吗?数据库大小的来源是 web postgres 管理界面。

这是插入:

CREATE TYPE CUSTOMER_TYPE AS ENUM
('enum1', 'enum2', 'enum3', '...', 'enum15');       ## max lenght of enum names ~15

CREATE TABLE CUSTOMER(
   CUSTOMER_ONE    TEXT PRIMARY KEY NOT NULL,       ## max 35 char String
   ATTRIBUTE_ONE   TEXT UNIQUE,                     ## max 35 char String
   ATTRIBUTE_TWO   TEXT UNIQUE,                     ## max 51 char String
   ATTRIBUTE_THREE TEXT UNIQUE,                     ## max 52 char String
   ATTRIBUTE_FOUR  TEXT UNIQUE,                     ## max 64 char String
   ATTRIBUTE_FIFE  TEXT UNIQUE, …
Run Code Online (Sandbox Code Playgroud)

postgresql datatypes storage database-size

3
推荐指数
1
解决办法
1223
查看次数

当 varchar 效率更高时,为什么数据库具有 char 数据类型?

据我所知的基本区别CHARVARCHAR数据类型,它CHAR占用的固定长度,而VARCHAR占用空间基于正被存储的内容。

但是如果VARCHAR根据存储的内容动态处理空间管理如此有效,为什么数据库支持CHAR数据类型,所有CHAR(n)字段都可以是VARCHAR(n)字段,对吧?

datatypes storage sql-standard

3
推荐指数
1
解决办法
331
查看次数

db.collection.stats 返回的 Object.bsonsize 和 avgObjSize 有什么区别?

在我的收藏中,我的文档似乎比较相似。我需要知道我的生产服务器需要多少存储空间来存储我的文档,这就是我查询的原因:

db.collectionName.stats()
Run Code Online (Sandbox Code Playgroud)

我的字段 avgObjSize 大约为 6442 字节。我在我的收藏中选择了一个随机文档,我输入:

Object.bsonsize(db.collectionName.find({"_id" :         ObjectId("5508497c51a990da07b07106")}))
Run Code Online (Sandbox Code Playgroud)

我获得了 810 个字节。

为什么我有这么大的差异?

我还注意到,我存储的文档越多,avgObjSize 减少的越多……这正常吗?(我查过,我的文件不是空的。)

它是一个开发服务器,所以我使用的是 Red Hat Enterprise Linux 5.8,它是一个 32 位版本。

mongodb storage database-size size

2
推荐指数
1
解决办法
9672
查看次数

我们可以在 SQL Server 上使用 VMDK 进行 FCI 吗?

我可以在 2 个节点之间共享 VMDK 以进行 SQL Server 故障转移群集设置的主动被动设置吗?

我看到的大多数文章都提到使用 RDM,但是我们在环境中使用 Veeam 备份,并且它不支持 RDM。

sql-server storage clustering configuration

2
推荐指数
1
解决办法
735
查看次数

数据库如何格式化磁盘文件

这个 SO 答案概述了 MySQL 如何将其数据库组织成文件,但没有描述文件本身的结构。

我想知道,在物理层面,关系数据库管理系统如何将它们的记录存储在文件中。文件的大致结构是什么,列/值在哪里(如果它只是一个 CSV),以及它是如何遍历的。

postgresql storage disk-structures datafile

2
推荐指数
1
解决办法
73
查看次数

为 ARRAY[] 列的默认值选择 NULL 与空数组 {} 时是否会影响磁盘空间?

我的直觉是NULL将比{}用作ARRAY[]PostgreSQL 中列的默认值时占用的空间更少。

我对么?

postgresql storage

2
推荐指数
2
解决办法
727
查看次数

计算每行的总“行上”字节......简单的方法

我们要计算表中每一行的总“行上”存储字节数。正如我们所理解的,我们必须将每一列的 DATALENGTH() 相加,同时还要考虑 NULL 和诸如 VARCHAR(MAX) 之类的东西,它们在“行”上只有一个 24 字节的指针。我们知道每一行也有一些开销,这在下面的查询中没有考虑。

SELECT   ROW_ID,

         CASE
              WHEN COLUMNPROPERTY(OBJECT_ID('EXAMPLE_TABLE'),'COL1','PRECISION') = -1 THEN 24
              ELSE ISNULL(DATALENGTH(COL1), 1)
         END
          +
         CASE
              WHEN COLUMNPROPERTY(OBJECT_ID('EXAMPLE_TABLE'),'COL2','PRECISION') = -1 THEN 24
              ELSE ISNULL(DATALENGTH(COL2), 1)
         END
          +
         CASE
              WHEN COLUMNPROPERTY(OBJECT_ID('EXAMPLE_TABLE'),'COL3','PRECISION') = -1 THEN 24
              ELSE ISNULL(DATALENGTH(COL3), 1)
         END
          +
         ...
         ...
         AS ROW_SIZE

FROM     EXAMPLE_TABLE

ORDER BY ROW_SIZE DESC
;
Run Code Online (Sandbox Code Playgroud)

多么野兽!而且这只是一个近似值。

然后我们发现

DBCC SHOWCONTIG ('EXAMPLE_TABLE') WITH TABLERESULTS
Run Code Online (Sandbox Code Playgroud)

返回最大记录大小。这表明 SQL Server 中已经有一个算法可以计算行的确切大小。

我们如何直接访问该算法?

sql-server storage dbcc size sql-server-2017

2
推荐指数
1
解决办法
269
查看次数

了解两个表使用的存储空间的差异

我有两个表,其中一个或多或少包含另一个的数据子集。我从第一个表中删除了一些数据,这些数据作为历史数据插入到第二个表中。

这些是定义:

CREATE TABLE [dbo].[CIC_DESLUNGHE](
    [CD_CIC_DESLUNGHE] [bigint] IDENTITY(1,1) NOT NULL,
    [CD_CIC_PRODUZIONE] [bigint] NOT NULL,
    [CD_CIC_OPERAZIONI] [bigint] NOT NULL,
    [AFNMPROG] [int] NOT NULL,
    [AFDSLINE] [nvarchar](max) NULL,
 CONSTRAINT [PK_CIC_DESLUNGHE] PRIMARY KEY CLUSTERED 
(
    [CD_CIC_DESLUNGHE] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 99) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO


CREATE TABLE [dbo].[CIC_DESLUNGHE_STORICI](
    [CD_CIC_DESLUNGHE_STORICI] [bigint] IDENTITY(1,1) NOT NULL,
    [CD_CIC_PRODUZIONE_STORICI] [bigint] NOT NULL,
    [CD_CIC_OPERAZIONI_STORICI] [bigint] NOT NULL,
    [AFNMPROG] [int] NOT NULL, …
Run Code Online (Sandbox Code Playgroud)

sql-server storage sql-server-2016

2
推荐指数
1
解决办法
96
查看次数

varchar(n) 大小?

varchar(5)当我在查询中使用时INSERT,这意味着表中的属性将在内存中占用5 个字节?(假设一个可打印字符占用一个字节)?

postgresql varchar storage memory database-internals

2
推荐指数
1
解决办法
6659
查看次数

用于 NULL 值的存储空间

根据以下链接,NULL值占用一些存储空间:

/sf/ask/261182071/
https://www.sqlservercentral.com/forums/topic/null-storage-2

如果列具有固定宽度数据类型 -NULL占用列的长度

char(10) NULL takes 10 bytes
INT NULL takes 4 bytes
Run Code Online (Sandbox Code Playgroud)

如果列具有可变宽度 -NULL占用 0 字节

varchar(1000) NULL takes 0 bytes (+ 2 bytes of varchar column overhead ?)
Run Code Online (Sandbox Code Playgroud)

另外,拥有可为空的列也会产生开销。链接中的信息有点矛盾。
任何人都可以阐明这一点吗?

这是我的问题:

  1. 有人说可空列的开销是每行 1 位,有人说是每行 1 个字节,
    哪一个是正确的?我假设每行 1 位(因此 8 行构成 1 个字节),对吗?

  2. 对于 varchar 中的 NULL 值,每行仍然有 2 个字节的开销 - 这是真的吗?

  3. 最重要的问题:
    我有一个包含约 2.5 亿行数据的表,总大小约为 115 GB
    我使用下面的代码添加了 7 列,在每个命令后使用 sp_spaceused 检查表的大小

添加的列:

alter table MyTable add TestVarchar10 varchar(10) …
Run Code Online (Sandbox Code Playgroud)

null sql-server storage sql-server-2017

2
推荐指数
1
解决办法
1722
查看次数