Медленный Postgresql Запрос на маленьком столе - PullRequest
0 голосов
/ 18 июня 2020

Всего в моей таблице семь строк. A SELECT * FROM myTable занимает более пяти минут. A SELECT * FROM myTable ORDER BY id занимает 0,2 секунды. id - первичный ключ.

Если I EXPLAIN ANALYZE медленный запрос, результат будет следующим:

Seq Scan on myTable  (cost=0.00..483960.16 rows=1053 width=2154) (actual time=218691.468..358475.782 rows=7 loops=1)
Planning Time: 0.089 ms
Execution Time: 358475.821 ms

Postgresql версия 11.8.

Я не эксперт по базам данных - есть ли подсказки, с которых я могу начать свой поиск?

// Редактировать

\x; select * from pg_stat_user_tables where relname='myTable'; возвращает:

-[ RECORD 1 ]-------+-----------------------------------------------
relid               | 3781321
schemaname          | public
relname             | myTable
seq_scan            | 64538
seq_tup_read        | 443186
idx_scan            | 5861523
idx_tup_fetch       | 5863962
n_tup_ins           | 1
n_tup_upd           | 5861341
n_tup_del           | 0
n_tup_hot_upd       | 4692969
n_live_tup          | 6
n_dead_tup          | 515978
n_mod_since_analyze | 2466207
last_vacuum         | 
last_autovacuum     | 2020-06-06 19:13:08.16919+00
last_analyze        | 
last_autoanalyze    | 2020-06-06 19:13:08.520293+00
vacuum_count        | 0
autovacuum_count    | 379
analyze_count       | 0
autoanalyze_count   | 368

Оператор создания таблицы:

CREATE TABLE public.instagram_android_api_instagramloginandroidapi
(
    id integer NOT NULL DEFAULT nextval('myTable_id_seq'::regclass),
    u character varying(255) COLLATE pg_catalog."default" NOT NULL,
    p character varying(255) COLLATE pg_catalog."default" NOT NULL,
    e character varying(255) COLLATE pg_catalog."default",
    ep character varying(255) COLLATE pg_catalog."default",
    s smallint NOT NULL,
    i inet,
    z character varying(255) COLLATE pg_catalog."default",
    s text COLLATE pg_catalog."default",
    dtlu timestamp with time zone,
    dtll timestamp with time zone,
    sct integer NOT NULL,
    CONSTRAINT myTable_pkey PRIMARY KEY (id)
)
WITH (
    OIDS = FALSE
)
TABLESPACE pg_default;

ALTER TABLE public.myTable
    OWNER to xxxxxx;

1 Ответ

2 голосов
/ 18 июня 2020

В вашей таблице было много операторов UPDATE, и автоочистка не выполнялась с 12 дней.

Чем больше в таблице есть операторы UPDATE / DELETE, тем больше должно выполняться автоматическое удаление.

См. автоваккум .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...