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
我有一个包含数亿行的表,我需要从中删除数据。
现有的索引是最有效的。
但是,我可以使用现有索引通过使用ctid值查找要删除的行:
DELETE FROM calendar_event WHERE ctid IN
(SELECT ctid FROM calendar_event WHERE user_id = 5 LIMIT 100 FOR UPDATE)
Run Code Online (Sandbox Code Playgroud)
ctid在这种情况下依赖 的风险是什么?我最糟糕的情况是删除错误的行。
postgresql performance delete concurrency postgresql-performance
我需要将一个大.sql文件(解压时为 8.1GB)导入 PostgreSQL。我尝试使用,\i /path/to/file.sql但它太慢了。
如何加快进口?我需要每周导入这些数据。
在第一个2000行可以在这里找到,而压缩的1点GB转储可以在这里找到
--
-- PostgreSQL database dump
--
-- Dumped from database version 9.5.3
-- Dumped by pg_dump version 9.5.2
SET statement_timeout = 0;
SET lock_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SET check_function_bodies = false;
SET client_min_messages = warning;
SET row_security = off;
--
-- Name: rpo; Type: SCHEMA; Schema: -; Owner: -
--
Run Code Online (Sandbox Code Playgroud)
这是我获取数据的唯一途径。完整的文件有大约。38,000,000 行。如何加快导入速度?
postgresql performance import pg-dump postgresql-performance
我有一个 PostgreSQL 数据库,我运行了大量的负载。我希望这个负载尽可能快。我已经在使用复制命令等。
我一直在阅读关于timescaledb以及它如何提供改进的插入性能。但是,如果我只关心插入性能,我想知道使用 hypertables 而不是常规表是否有任何缺点?
我看到了这个问题Bit vs. Boolean columns。
对于 Postgres,我问自己同样的问题:一位整数列是否占用了布尔值列的相同磁盘空间?在大表(约 50 列 x 约 5000 万行)中,哪一个表现最好?我怎样才能找到这个?
postgresql performance database-design optimization disk-space postgresql-performance
在 Postgres 中,如果超过 99.9% 的时间记录存在并且没有执行任何操作,则执行 \xe2\x80\x9cINSERT\xe2\x80\xa6 ON CONFLICT DO NOTHING\xe2\x80\x9d 是否效率低下?
\n例如让\xe2\x80\x99s 说我有一个节点进程,它获取映射到行的 100k 记录,其中 99,980 条已经存在。我可以:
\n第一种方法是最简单的,但我想知道它对于 Postgres 来说是否效率太低。我读到它在这样的 \xe2\x80\x9cdo Nothing\xe2\x80\x9d 情况下增加序列号,但是如果我跳过使用序列并使用我的唯一字段作为主(字符串)键,那可以吗? ?
\n如果我在 Postgres 表中有一堆行,然后创建一个索引,如果在创建后插入新数据行,索引是否会自动更新?
或者说,REINDEX 是仅在一些罕见的情况下需要,还是在添加新数据时才需要?
我们在 PostgreSQL 的单个事务中执行大约 100k DDL 语句。在执行过程中,各个 Postgres 连接的内存使用量逐渐增加,一旦它无法获得更多内存(在 3GB 内存上从 10MB 使用量增加到 2.2GB),OOM 杀手用 9 命中它,导致 Postgres 进入恢复模式.
BEGIN;
CREATE SCHEMA schema_1;
-- create table stmts - 714
-- alter table add pkey stmts - 714
-- alter table add constraint fkey stmts - 34
-- alter table add unique constraint stmts - 2
-- alter table alter column set default stmts - 9161
-- alter table alter column set not null stmts - 2405
-- alter table add check …Run Code Online (Sandbox Code Playgroud) postgresql performance transaction ddl postgresql-9.6 postgresql-performance
我计划将包含更多 1000 万条记录的 CSV 加载到 PostgreSQL v12.1,其中一列具有“分类”值,因此为其创建枚举类型似乎是一个不错的选择,但它包含 208 个类别。
最短的字段为 2,最长的字段为 11 个字符。所有字段的平均值为 2.4。字符编码是 UTF8,但所有字符都是 ASCII。
我应该使用enumerated或varchar哪种类型?
我丢弃char是因为官方 PostgreSQL 文档说明了有关char、varchar和text 的以下内容:
提示:这三种类型之间没有性能差异,除了使用空白填充类型时增加了存储空间,以及在存储到长度受限列时需要额外的一些 CPU 周期来检查长度。虽然 character(n) 在其他一些数据库系统中具有性能优势,但在 PostgreSQL 中没有这样的优势;事实上 character(n) 通常是三个中最慢的,因为它有额外的存储成本。在大多数情况下,应改用文本或字符变化。
PostgreSQL 中的枚举值在磁盘上占用4 个字节(请参阅 8.7.4. 实现细节)。考虑到这一点和使用enum类型的2.4 平均字符串长度会导致磁盘使用率略高(PostgreSQL 中的短字符串需要一个额外的字节磁盘空间)。我仍然有一种直觉,即使用 enum 是更好的选择,因为它的实现使许多针对它的操作更快。
我的应用程序正在执行以下 psql 查询,并且运行速度非常慢:
SELECT COUNT(*)
FROM (
SELECT 1 AS one
FROM "large_table"
WHERE "large_table"."user_id" = 123
ORDER BY "large_table"."id" desc
LIMIT 1 OFFSET 30
) subquery_for_count;
Run Code Online (Sandbox Code Playgroud)
当我将 更改ORDER BY为时ASC,它的运行速度快了 100 倍。我在 id 上有默认的主键索引,并且我已经尝试按降序顺序为 id 添加附加索引,但这似乎没有什么区别。
当我运行解释分析时,我发现它在慢速查询 ( ) 上使用向后索引扫描desc。我尝试手动禁用会话的索引扫描,发现查询运行时间为 40 秒,而不是 2 分钟,这是一个显着的改进。
知道如何在按 DESC 排序时尝试提高此查询的速度吗?我读过,对于 b 树索引,无论排序顺序如何,它通常应该为您提供相同的性能,但情况似乎并非如此。
postgresql ×10
performance ×8
import ×2
index-tuning ×2
concurrency ×1
ddl ×1
delete ×1
disk-space ×1
index ×1
optimization ×1
order-by ×1
pg-dump ×1
timescaledb ×1
transaction ×1