Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / влияние work_mem на план запроса - SELECT COUNT(*) / 7 сообщений из 7, страница 1 из 1
09.04.2018, 08:33
    #39627365
pppsql
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
влияние work_mem на план запроса - SELECT COUNT(*)
при разных значениях work_mem PostgreSQL 9.6 для запроса вида
Код: plsql
1.
SELECT COUNT(*) FROM mytable;


строит разные планы
при 4Мб (значение PG по умолчанию) -> Seq Scan on mytable
при 8Мб ->Index Only Scan using "myid_pk" (используется первичный ключ)

Фактические значения
Код: plsql
1.
EXPLAIN ANALYSE SELECT COUNT(*) FROM mytable;


на серверах практически не различаются (несколько процентов всего).

Планировщик оценивает возможность уместиться в отведенный work_mem и строит план или что-то ещё влияет на выбор?
В остальных настройках и наборах данных серверы максимально идентичны.

Какие приёмы позволят повысить эффективность (скорость) выполнения запросов подсчета количества строк?
Отказаться от выполнения таких запросов не представляется возможным.
...
Рейтинг: 0 / 0
09.04.2018, 10:28
    #39627401
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
влияние work_mem на план запроса - SELECT COUNT(*)
pppsqlпри разных значениях work_mem PostgreSQL 9.6 для запроса вида
Код: plsql
1.
SELECT COUNT(*) FROM mytable;


строит разные планы
при 4Мб (значение PG по умолчанию) -> Seq Scan on mytable
при 8Мб ->Index Only Scan using "myid_pk" (используется первичный ключ)

Фактические значения
Код: plsql
1.
EXPLAIN ANALYSE SELECT COUNT(*) FROM mytable;


на серверах практически не различаются (несколько процентов всего).

Планировщик оценивает возможность уместиться в отведенный work_mem и строит план или что-то ещё влияет на выбор?
В остальных настройках и наборах данных серверы максимально идентичны.

Какие приёмы позволят повысить эффективность (скорость) выполнения запросов подсчета количества строк?
Отказаться от выполнения таких запросов не представляется возможным.

1)попробуйте там где база делает seq scan сделать vacuum analyze этой таблицы... может слишком много страницы без all visible bits стоит и база поэтому не хочет сделать Index only scan (впрочем учитывая что IOS на 9.6 в 1 поток делается - то это вряд ли самый быстрый метод для count(*) - см 2))

2)так как у вас 9.6 скорее всего самый быстрый метод count(*) - включить параллельное выполнение запросов на 4-8-16 ядер (parralel seq scan).

Как то так.

PS: count(*) по 1 миллиард строк будет медленный как его не делайте :).
...
Рейтинг: 0 / 0
09.04.2018, 12:02
    #39627453
pppsql
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
влияние work_mem на план запроса - SELECT COUNT(*)
Maxim Boguk,
vacuum analyze не влияет
...
Рейтинг: 0 / 0
09.04.2018, 17:13
    #39627626
Alexius
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
влияние work_mem на план запроса - SELECT COUNT(*)
pppsql,

это вы на одном сервере work_mem меняете в сессии и получаете разные планы? покажите оба плана и вывод
Код: sql
1.
2.
3.
select relpages, relallvisible from pg_class where relname = 'tablename';
show random_page_cost ;
show seq_page_cost ;
...
Рейтинг: 0 / 0
10.04.2018, 08:54
    #39627747
pppsql
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
влияние work_mem на план запроса - SELECT COUNT(*)
Alexius,
физически серверы разные, но с одинаковой БД и настройками, кроме work_mem
предлагаете протестировать на одном сервере с разными work_mem устанавливаемыми в сессии?
...
Рейтинг: 0 / 0
10.04.2018, 09:36
    #39627767
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
влияние work_mem на план запроса - SELECT COUNT(*)
pppsqlAlexius,
физически серверы разные, но с одинаковой БД и настройками, кроме work_mem
предлагаете протестировать на одном сервере с разными work_mem устанавливаемыми в сессии?

Для начала - да.
...
Рейтинг: 0 / 0
10.04.2018, 09:41
    #39627769
Alexius
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
влияние work_mem на план запроса - SELECT COUNT(*)
pppsql,

я сомневаюсь, что в данном случае именно work_mem влияет на план. если получится на одном сервере воспроизвести будет очень интересно. сервера совсем разные получаются, это не мастер и реплика? на план в первую очередь по идее должны влиять параметры, которые я просил привести (с обоих серверов) + размер индекса, по которому index only scan.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / влияние work_mem на план запроса - SELECT COUNT(*) / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]