考虑Postgres 9.4中的下表:
CREATE TABLE t
(
a1 bigserial,
a2 bigint NOT NULL,
a3 bigint NOT NULL,
a4 integer,
a5 timestamp with time zone NOT NULL,
a6 timestamp with time zone NOT NULL DEFAULT now(),
a7 bigint NOT NULL,
a8 bigint NOT NULL,
a9 real,
a10 integer,
CONSTRAINT kkkey PRIMARY KEY (a1)
)节省这张表的估计费用是多少?
A创纪录的费用:
size(bigserial)
+ size(bigint)
+ size(bigint)
+ size(integer)
+ size(timestamp)
+ size(timestamp)
+ size(bigint)
+ size(bigint)
+ size(real)
+ size(integer)
= 8 + 8 + 8 + 4 + 8 + 8 + 8 + 8 + 4 + 4 = 68 bytesPostgres的数据库页面布局给出了相当详细的信息,记录是如何在二级存储中登陆的,但我不知道如何将所有的数字组合在一起。
Linux报告
blockdev --getbsz /dev/sda1
1024(1)是否有任何辅助功能来评估每排的储存成本(因此无须手工计算)
(2)如何把这些数字组合起来,即估计每一行的间接费用?
(3)如何估算主要关键指标的成本?
发布于 2015-06-23 11:40:08
给出列、表和索引大小的函数记录在手册:http://www.postgresql.org/docs/9.4/static/functions-admin.html中。
没有计算整个记录大小的函数(而有一个函数来了解单个数据值(pg_column_size)的存储成本),因为记录一般都是可变长度的(有时是压缩的),所以我认为有两种可能,要么执行目录查询来总结表中所有列的大小,要么简单地得到一个填充表的大小,然后除以记录的数量,这样就有了记录的平均大小。
https://dba.stackexchange.com/questions/104861
复制相似问题