标签: postgresql

PostgreSQL 顺序扫描而不是索引扫描 为什么?

大家好 我的 PostgreSQL 数据库查询有问题,想知道是否有人可以提供帮助。在某些情况下,我的查询似乎忽略了我创建的用于连接两个表datadata_area. 发生这种情况时,它使用顺序扫描并导致查询速度慢得多。

顺序扫描(~5 分钟)

Unique  (cost=15368261.82..15369053.96 rows=200 width=1942) (actual time=301266.832..301346.936 rows=153812 loops=1)
   CTE data
     ->  Bitmap Heap Scan on data  (cost=6086.77..610089.54 rows=321976 width=297) (actual time=26.286..197.625 rows=335130 loops=1)
           Recheck Cond: (datasetid = 1)
           Filter: ((readingdatetime >= '1920-01-01 00:00:00'::timestamp without time zone) AND (readingdatetime <= '2013-03-11 00:00:00'::timestamp without time zone) AND (depth >= 0::double precision) AND (depth <= 99999::double precision))
           ->  Bitmap Index Scan on data_datasetid_index  (cost=0.00..6006.27 rows=324789 width=0) (actual time=25.462..25.462 rows=335130 loops=1)
                 Index Cond: …
Run Code Online (Sandbox Code Playgroud)

postgresql performance execution-plan query-performance

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

CLUSTER 之后是否需要 REINDEX?

我正在考虑使用 CLUSTER 按索引重新排序表。我知道这种表数据的重新创建会使所有现有的索引膨胀或无用。我已经看到一些迹象表明在 CLUSTER 之后需要 REINDEX。我发现其他参考资料表明 CLUSTER执行REINDEX。在官方文档说,一切尽在不言中约REINDEX是集群的一部分或需要(虽然它确实表明集群运行后分析),

任何人都可以明确地(即对官方文档进行某种参考)说在 CLUSTER 之后是否需要 REINDEX?

postgresql

12
推荐指数
3
解决办法
4217
查看次数

过多的空闲连接会影响 PostgreSQL 9.2 的性能吗?

我的数据库服务器上的一些查询似乎需要很长时间才能响应,而且我认为 CPU 使用率很高。运行时ps aux,我看到大约 250 个“空闲”连接(我认为太多了)。我还没有开始做一个完整的诊断,但我想知道这是否是一个开始寻找的好地方。

我还将 PgBouncer 与事务级池一起使用。我怀疑我可以idle通过调整池大小轻松减少连接数。但是,除非有充分的理由,否则我不想开始做太多更改。

idlePostgreSQL 9.2 中的很多连接会影响性能吗?

非常感谢!

postgresql performance database-design query-performance

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

在PostgreSQL中存储和查询滚动数据

我有大量的天气模型数据被放入 PostgreSQL 数据库。该机器具有 8 个内核和 16 GB 的 RAM。我正在使用 PostGIS 2.1 运行 PostgreSQL 9.3。每个表都有不同种类的天气数据(温度、露点、风等)。每个表将有 6-7 列:纬度、经度、点几何、高程、模型相关的日期时间以及 1-2 个感兴趣的数据值。数据将主要按时间和高程查询边界框。每个表将有大约 145,757,360 行(早于现在不再相关的数据将被删除)。我粗略估计每个表的大小约为 10 GB,没有索引。(这是 52 字节的数据加上每行 23 字节的开销)。随着新模型数据可用,数据将定期更新/插入。笔记:

所以我正在研究这两个计划:

  1. 简单地按(日期时间,高程)索引和聚类,并为点几何添加一个额外的索引。运行一个常规的 cron 作业来删除旧行、运行vacuum/analyze 和重新集群。
  2. 按日期时间分区,然后按每个表的高程进行聚类和索引,并在几何上有索引。运行常规的 cron 作业以添加新表并删除旧表。

更远,

  • 所以,我知道删除表和删除和清空表的效率要高得多。但是,否则我会看到性能提升吗?
  • 当所有表将被均匀更新和选择直到删除不相关时,分区是否合适(文档表明分区在只选择其中几个时效果最佳)?

传递数据时,选择会比聚集索引更快吗?如果同时发出多个请求,答案是否会改变?

谢谢你。我希望我提供了所有需要的数据。如果没有让我知道,我会添加它。

postgresql database-design partitioning postgis postgresql-9.3

12
推荐指数
1
解决办法
1665
查看次数

PostgreSQL 是否优化添加具有非 NULL DEFAULT 的列?

添加NOT NULL带有DEFAULT值的列时- PostgreSQL 是否优化此操作?

如果表有 n 行,未优化的 alter-table-add-column 将产生 n 次写入默认值 - 显然,这可能非常痛苦。通过优化,数据库将立即创建新列,仅存储默认值的一个副本,当在合适的索引数据结构中找不到该列的非默认值时,该副本将返回。

例如Oracle 11g 就有这样的优化

postgresql optimization alter-table ddl

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

INSERT 使用 CTE INSERT 的结果提供唯一的 id 值

我正在写一份工作,将数据从旧设计转换为新设计。在这个过程中,我需要将 id 从插入到一个单独的表中,并在插入到目标表中使用它,如下所示:

CREATE TABLE t1 {
  t1_id BIGSERIAL,
  col1 VARCHAR
};
CREATE TABLE t2 {
  t2_id BIGSERIAL,
  col2 VARCHAR, -- renamed from col1 to avoid confusion
  t1_id BIGINT REFERENCES t1.t1_id
};
Run Code Online (Sandbox Code Playgroud)

我定义了与以下形式匹配的 SQL:

WITH ins AS (
  INSERT INTO t1 (t1_id) VALUES (DEFAULT) RETURNING t1_id
) INSERT INTO t2
  (col1, t1_id)
SELECT
  a.val1, (SELECT * FROM ins)
FROM t3 a;
Run Code Online (Sandbox Code Playgroud)

我希望它为.. 的SELECT * FROM ins每一行运行SELECT.. 但它只运行一次,并将该值用于SELECT.. 如何重构我的 SQL 以获得所需的行为?

编辑4

t1 最终看起来像:

1,<NULL> …
Run Code Online (Sandbox Code Playgroud)

postgresql postgresql-9.2

12
推荐指数
1
解决办法
1万
查看次数

如何创建表... LIKE 没有 NOT NULL 约束?

我正在尝试使用一些动态 SQL 在函数内重新创建表的结构。

EXECUTE 'CREATE TABLE ' || my_table_name || '_bk' ||
    ' (like ' || _my_table_name || ')';
Run Code Online (Sandbox Code Playgroud)

这将类似于:

CREATE TABLE my_table_bk
(like my_table);
Run Code Online (Sandbox Code Playgroud)

但我需要放弃所有约束。使用EXCLUDING CONSTRAINTS类似的选项,它仍然复制NOT NULL约束(文档证实了这一行为):

CREATE TABLE my_table_bk
(like my_table EXCLUDING CONSTRAINTS);
Run Code Online (Sandbox Code Playgroud)

问题是,如何在没有 NOT NULL 约束的情况下重新创建表结构,或者删除表中的所有 NOT NULL 约束?

postgresql

12
推荐指数
2
解决办法
3万
查看次数

使用 PL/pgSQL 函数返回一条记录 - 加快查询速度

我有一个用 Perl 编写的非分叉游戏守护进程,它使用 acync 查询将玩家统计数据写入 PostgreSQL 9.3 数据库。但是当我需要从数据库中读取某些内容时(例如玩家是否被禁止或玩家是否具有 VIP 身份),那么我使用同步查询。

这会使游戏停止一小会,直到从数据库中读取该值。

我无法重写我的游戏守护程序以使用异步查询来读取值(我尝试过,但它需要进行太多更改),所以我的问题是:将几个不相关的查询组合在一起是否有意义(我需要在新玩家连接) 到 1 个过程,如何同时将多个值返回到我的 Perl 程序?

我当前的查询都以玩家 ID 作为参数并返回 1 个值:

-- Has the player been banned?
select true from pref_ban where id=?

-- What is the reputation of this player?
select
count(nullif(nice, false)) -
count(nullif(nice, true)) as rep
from pref_rep where id=?

-- Is he or she a special VIP player?
select vip > now() as vip from pref_users where id=?

-- How many …
Run Code Online (Sandbox Code Playgroud)

postgresql plpgsql functions postgresql-9.3

12
推荐指数
2
解决办法
3万
查看次数

如何向 PostgreSQL 中的角色授予删除表/函数权限?

我想将drop特定数据库的特定架构中的所有表和函数(不仅是用户拥有的表和函数)的权限授予特定角色。但是,GRANT ALL PRIVILEGES这还不够,我没有找到如何在不将角色设为超级用户的情况下进行操作 - 超级用户对同一服务器上的其他数据库拥有权限,这不是我想要的。我不介意仅限于特定数据库的超级用户权限,但我不知道该怎么做。

我的代码:

CREATE USER _administrator PASSWORD 'pwd12345';
CREATE ROLE administrator NOLOGIN ADMIN _administrator;

GRANT ALL PRIVILEGES ON DATABASE "myDB" TO administrator;
GRANT ALL PRIVILEGES ON SCHEMA public TO administrator;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO administrator;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO administrator;
GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public TO administrator;
Run Code Online (Sandbox Code Playgroud)

administratormyDB数据库管理员组,_administrator是我的客户端应用程序能够以身份登录的最强大的角色。

我错过了什么或做错了什么?

postgresql permissions

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

PostgreSQL - 如果我同时运行多个查询,在什么情况下我会看到加速?在什么情况下我会看到放缓?

作为一个非 DBA 的人,我谦虚地对待你们,我确信我的问题充满了概念上的缺陷,并且“这取决于”地雷。我也很确定,你们所有选择回答的人都会想要比我目前所能提供的更多的细节。

也就是说,我对以下情况感到好奇:

  • 假设我有两个重要的查询。
  • 查询 1 平均需要 2 分钟才能完成。
  • 查询 2 平均需要 5 分钟才能完成。

如果我连续运行它们,一个接一个地运行,我预计平均需要 7 分钟才能完成。这合理吗?

然而,更重要的是,如果我同时运行这两个查询呢?同时进行两个独立的连接。

  • 在什么条件下我会看到加速?(总时间 < 7 分钟)
  • 在什么情况下我会看到经济放缓?(总时间 > 7 分钟)

现在,如果我同时运行 1,000 个非平凡的查询,我有预感它会导致整体速度变慢。在这种情况下,瓶颈可能在哪里?处理器?内存?驱动器?

同样,我知道在不知道具体细节(我没有)的情况下可能无法准确回答这个问题。我正在寻找一些一般准则,以便在提出以下问题时考虑:

  • 在什么情况下并发查询会导致整体加速?
  • 在什么情况下并发查询会导致整体速度变慢?

postgresql performance concurrency query-performance

12
推荐指数
1
解决办法
1万
查看次数