来自PG DOC
pg_column_size(any) :用于存储特定值(可能是压缩的)的字节数 pg_column_size 显示用于存储任何单个数据值的空间
例子:
select pg_column_size(5::smallint); -- 2 bytes
select pg_column_size(5::int); -- 4 bytes
Run Code Online (Sandbox Code Playgroud)
输入pg_column_size,它可以是一列或一行,所以我创建了一个测试来检查它。这是我的测试:
我的桌子
CREATE TABLE index_test
(
id integer NOT NULL, -- 4 bytes
a integer, -- 4 bytes
b integer, -- 4 bytes
CONSTRAINT index_test_id PRIMARY KEY (id)
)
Run Code Online (Sandbox Code Playgroud)
1/ 第一个查询: sum(pg_column_size(table.rows))
with abc as
(
select id,a,b
from index_test where b > 100
)
select pg_size_pretty(sum(pg_column_size(abc.*))) from abc -- "348 kB", abc.* = record
Run Code Online (Sandbox Code Playgroud)
和查询的解释:
"Aggregate (cost=427.55..427.56 rows=1 width=24) (actual time=9.171..9.171 …Run Code Online (Sandbox Code Playgroud) 描述:
我尝试在 MSSQL 2012 Express 上将 100 万行插入到空表中。这是我的脚本:
-- set statistics time off
drop table t1
create table t1 (id int, a text, b text)
go
-- #1 - 1,000,000 - 30s -> 45s
with ID(number) as
(
select 1 as number
union all
select number + 1
from ID
where number < 1000000 + 1
)
insert into t1
select number, 'a_' + cast (number as varchar), 'b_' + cast (number/2 as varchar)
from ID
option(maxrecursion 0)
-- #2 …Run Code Online (Sandbox Code Playgroud) Linux 上的 PostgreSQL 9.6,tags_tmp表大小~ 30 GB(1000 万行),tags是一个text[]并且只有 6 个值。
tags_tmp(id int, tags text[], maker_date timestamp, value text)
Run Code Online (Sandbox Code Playgroud)
tags_tmp(id int, tags text[], maker_date timestamp, value text)
Run Code Online (Sandbox Code Playgroud)
我需要使用 filter ontags和order byon检索数据maker_date desc。我可以在两tags & maker_date desc列上创建索引吗?
如果没有,你能提出其他想法吗?
select id, tags, maker_date, value
from tags_tmp
where tags && array['a','b']
order by maker_date desc
limit 5 offset 0
Run Code Online (Sandbox Code Playgroud)
SQL 代码:
create index idx1 on tags_tmp using gin (tags);
create …Run Code Online (Sandbox Code Playgroud) postgresql performance order-by index-tuning postgresql-performance
我有一个表名“ TABLE_A ( id integer, no integer) ”。
我想用“id”和当前的“no sum of no”=以前的“no sum of no”对“no”求和
这是我的代码:
1/创建表并插入数据:
create table table_a (id int, no int);
insert into table_a values(1, 10);
insert into table_a values(1, 20);
insert into table_a values(1, 30);
insert into table_a values(2, 100);
insert into table_a values(2, 200);
insert into table_a values(2, 300);
insert into table_a values(3, 1);
insert into table_a values(3, 2);
insert into table_a values(3, 3);
insert into table_a values(3, 3);
Run Code Online (Sandbox Code Playgroud)
2/ 预期结果:
id | sum_of_no …Run Code Online (Sandbox Code Playgroud) 关于设计星型模式:我在事实表中有三个日期列fact_table (insert_date, trade_date, close_date ...)。而且我不知道应该创建多少个日期维度?
案例 1:昏暗 A 。这意味着:一行@fact_table 有三个 FK 到 A。
情况 2:Dim A(用于 insert_date)、Dim B(trade_date)、Dim C(close_date)。这意味着:一行@fact_table 有一个 FK 到 A,一个 FK 到 B,一个 FK 到 C。
问题:应该创建多少个日期维度?
我在 Centos 6 x64(RAM:8 GB)上有一个小型数据库 PostgreSQL (v9.3)。
postgresql.conf
max_connections = 512
shared_buffers = 3000MB
temp_buffers = 8MB
work_mem = 2MB
maintenance_work_mem = 128MB
effective_cache_size = 3000MB
Run Code Online (Sandbox Code Playgroud)
大约 150 个连接,PostgreSQL 需要超过 6 GB 的 RAM(当然,其他应用程序使用大约 200 MB 的 RAM),这里是我的信息:
Mem: 7062.945M total, 6892.410M used, 170.535M free, 6644.000k buffers
Swap: 0.000k total, 0.000k used, 0.000k free, 5378.922M cached
Run Code Online (Sandbox Code Playgroud)
为什么 PG 需要大量 RAM?
如何减少 PG 的缓存缓冲区?
为了重新加载配置文件,我们向 postmaster 发送 SIGHUP 信号,然后将其传递给所有连接的后端。这就是为什么有些人将重新加载服务器称为“叹息”的原因。
由于重新加载配置文件是通过发送 SIGHUP 信号来实现的,因此我们可以使用 kill 命令为单个后端重新加载配置文件。
首先,使用 pg_stat_activity 找出后端的 pid。然后,从操作系统提示符处发出以下命令:
Run Code Online (Sandbox Code Playgroud)kill -SIGHUP pid
我看不懂粗体字。因为我们有很多后端 PID,如果我们杀死一个 PID,它如何从重新加载配置文件(postgresql.conf)中获取更改?
postgresql ×5
enterprisedb ×1
index-tuning ×1
join ×1
order-by ×1
performance ×1
sql-server ×1