запрос postgresql и настройка производительности БД - PullRequest
0 голосов
/ 12 сентября 2018

Мы получаем низкую производительность при выполнении запроса

select count(*) from test;

Это занимает 30 секунд.У нас 470 столбцов в таблице с несколькими индексами, а в таблице 50 миллионов записей.

select distinct name1,name2,id 
from test 
where id in (1234,6543,7643,9876);

Вышеприведенный запрос также занимает более 5 минут.Пожалуйста, предложите.

Я настроил параметры в postgresql.conf, как показано ниже.

max_connections = 10 
shared_buffers = 4GB
effective_cache_size = 12GB
maintenance_work_mem = 1GB
checkpoint_completion_target = 0.7
wal_buffers = 16MB
default_statistics_target = 100
random_page_cost = 4
effective_io_concurrency = 2
work_mem = 419430kB
min_wal_size = 1GB
max_wal_size = 2GB
idle_in_transaction_session_timeout = 9000000

Я использую PostgreSQL 9.6 и мой сервер имеет 16 ГБ ОЗУ

Можем ли мы создатьнесколько столбцов для одного индекса или отдельные индексы для одного столбца?

CREATE TABLE test (
    accept_dt timestamp NULL,
    test_line_number int4 NULL,
    office varchar(120) NULL,
    add_dt timestamp NULL,
    name1   int4 NULL,
    name2   int4 NULL,
    name3   int4 NULL,
    .....
    .....
    ....
    );

CREATE INDEX test_indx ON public.test USING btree (name1,name2,name3,name4);
CREATE INDEX test2_indx ON public. USING btree (accept_dt, test_line_number);
...