Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Оптимизация настроек сервера / 25 сообщений из 35, страница 1 из 2
01.10.2020, 17:29
    #40004625
kliff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация настроек сервера
Добрый день. Пожалуйста подскажите, в какую сторону копать.

Сервер RedHat, 12 процессоров, 32GB память. БД 2ТБ
Реплика такая же. Всякие отчеты и очень крупные запросы на реплике делаются.

Настройки сервера
max_connections = 1000
shared_buffers = 8GB
effective_cache_size = 24GB
maintenance_work_mem = 8192MB
checkpoint_completion_target = 0.7
wal_buffers по умолчанию
default_statistics_target = 100
seq_page_cost = 0.1
random_page_cost = 0.11
work_mem = 2048MB
min_wal_size = по умолчанию
max_wal_size = 64MB
max_worker_processes = 8


Мониторинг в пике показал
number of active connection 105
number of idle connections 310
number of idle in transaction connections 149
number of total connections 509

Не сказать, что цифры космические по пользователям, сервер наглухо завис.
В pg_stat_activity в это время наблюдается 300 запросов,
порядка 200 в состоянии idle
порядка 40 в состоянии idle in transaction
и порядка 50 в состоянии active

Сервер встал намертво. Да в момент входа пользователя в систему выполняется огромный селект, который проворачивает полбазы, но тем не менее он максимально оптимизирован и выполняется 0.5-0.8сек. Одновременно таких селектов в pg_stat_activity наблюдаю с десяток.

По памяти мониторинг показывает в пике израсходовал 6Gb shared buffers, то есть далеко не всю.

Какая то печальная картина для 300-400 пользователей. Планируется 3000 пользователей.

Как раскачать сервер под такие задачи?
Правильно я понимаю, что селекты даже по 0.5сек не должны быть проблемой, ведь еще параллельное выполнение должно быть?
...
Рейтинг: 0 / 0
01.10.2020, 18:09
    #40004647
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация настроек сервера
kliff,

1) и чем вам параллельное выполнение поможет если у вас 10 запросов одновременно и всего 12 ядер на сервере.
2) что значит встал намертво?
3)а мониторинг что показывает?
какая утилизация cpu? дисков? время ответа дисковой системы? и еще полсотни метрик которые нужны чтобы понять чем сервер занят.

по той диагностике что вы написали - сказать особо ничего нельзя да и 90% что дело не в настройке сервера.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
01.10.2020, 18:39
    #40004655
kliff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация настроек сервера
Maxim Boguk
kliff,

1) и чем вам параллельное выполнение поможет если у вас 10 запросов одновременно и всего 12 ядер на сервере.
2) что значит встал намертво?
3)а мониторинг что показывает?
какая утилизация cpu? дисков? время ответа дисковой системы? и еще полсотни метрик которые нужны чтобы понять чем сервер занят.

по той диагностике что вы написали - сказать особо ничего нельзя да и 90% что дело не в настройке сервера.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru


1. То есть правильно я понимаю, при 12 ядрах, одновременно можно рассчитывать на выполнение примерно 12 запросов?
2. Время отклика на любое действие в системе выросло до 6-12сек
3. Утилизация дисков как я понимаю не настроена для отображения.
...
Рейтинг: 0 / 0
01.10.2020, 18:39
    #40004656
kliff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация настроек сервера
Maxim Boguk,
...
Рейтинг: 0 / 0
01.10.2020, 18:40
    #40004657
kliff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация настроек сервера
Maxim Boguk,
...
Рейтинг: 0 / 0
01.10.2020, 18:41
    #40004658
kliff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация настроек сервера
Maxim Boguk,
...
Рейтинг: 0 / 0
01.10.2020, 18:51
    #40004661
kliff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация настроек сервера
Maxim Boguk,
...
Рейтинг: 0 / 0
01.10.2020, 18:59
    #40004663
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация настроек сервера
kliff


1. То есть правильно я понимаю, при 12 ядрах, одновременно можно рассчитывать на выполнение примерно 12 запросов?


Ну почему же ... если запрос занимает 1 секунду то на 12ядрах 12 запросов за 1 секунду отработают (за 1 секунду каждый).... если вы 24 запроса запуляете то они тоже отработают за 2 секунды (всего и каждый)... + 1-2 ядра под нагрузкой уйдут на системные нужды и потроха базы скорее всего...
Можно хоть 120 запросов параллельно запулять... просто каждый 10 секунд займет.
И тут надо с запросом разбираться и смотреть сколько он занимает в реальности время и дальше считать сколько ресурсов надо или запрос оптимизировать.


--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
01.10.2020, 19:25
    #40004671
OoCc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация настроек сервера
kliff,

max_worker_processes должно быть установленно на как минимум на количество процессоров. Это как минимум. Можно и больше. Но тут за свопом нужно следить.

Сервер использует huge memory?
...
Рейтинг: 0 / 0
01.10.2020, 19:35
    #40004674
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация настроек сервера
OoCc
kliff,

max_worker_processes должно быть установленно на как минимум на количество процессоров. Это как минимум. Можно и больше. Но тут за свопом нужно следить.

Сервер использует huge memory?


что за ересь? Откуда у вас такая крайне плохая идея? И зачем???
Чтобы один запрос мог ресурсы всего сервера сожрать?
Такое на серверах с аналитикой можно делать а вот для OLTP ну не более 50% cpu под параллельное выполнение (а то и 25% если непараллельная нагрузка высокая).

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
01.10.2020, 19:41
    #40004676
OoCc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация настроек сервера
Maxim Boguk
OoCc
kliff,

max_worker_processes должно быть установленно на как минимум на количество процессоров. Это как минимум. Можно и больше. Но тут за свопом нужно следить.

Сервер использует huge memory?


что за ересь? Откуда у вас такая крайне плохая идея? И зачем???
Чтобы один запрос мог ресурсы всего сервера сожрать?
Такое на серверах с аналитикой можно делать а вот для OLTP ну не более 50% cpu под параллельное выполнение (а то и 25% если непараллельная нагрузка высокая).

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru

??? ты наверное спутал с max_parallel_workers и max_parallel_workers_per_gather
...
Рейтинг: 0 / 0
01.10.2020, 20:33
    #40004687
kliff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация настроек сервера
Maxim Boguk, ну вот у меня пара частых суровых запроса по 600 строк кода, но оптимизировал до 0.5-0.8сек, в зависимости от распределения данных, дальше для оптимизации путей не вижу. А остальные запросы почти мгновенные.
...
Рейтинг: 0 / 0
01.10.2020, 20:34
    #40004688
mefman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация настроек сервера
kliff
Maxim Boguk, ну вот у меня пара частых суровых запроса по 600 строк кода, но оптимизировал до 0.5-0.8сек, в зависимости от распределения данных, дальше для оптимизации путей не вижу. А остальные запросы почти мгновенные.

Код: sql
1.
explain(analyze,buffers,timing)


этих запросов в студию! Это раз.
Картинка, на которой написано, что CPU system time до 12% очень вероятно говорит о том, что max_parallel_workers_per_gather нужно выставить в 0. Хотя бы временно. Это два.
Заюзать внешний пулер соединений и соответственно его настроить - это три.
...
Рейтинг: 0 / 0
01.10.2020, 20:37
    #40004691
kliff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация настроек сервера
OoCc
kliff,

max_worker_processes должно быть установленно на как минимум на количество процессоров. Это как минимум. Можно и больше. Но тут за свопом нужно следить.

Сервер использует huge memory?


Да, проверил
[always] madvise never
...
Рейтинг: 0 / 0
01.10.2020, 21:10
    #40004697
kliff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация настроек сервера
mefman,max_parallel_workers_per_gather в файле конфигурации вообще нет, очевидно имеет умолчательное значение.

Выкладывать план скорее не имеет смысла, потому что, чтоб его просмотреть, можно скрол на мышке стеререть, сам запрос посмотрел 700 строк. А план вообще не видно конца.

пулер есть конечно, но за настройки не ручаюсь, это надо ковырять.
...
Рейтинг: 0 / 0
02.10.2020, 08:51
    #40004753
Guzya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация настроек сервера
А зачем такой большой work_mem, если я правильно понял, у Вас на мастере OLTP нагрузка, а OLAP Вы отправляете на реплику.
...
Рейтинг: 0 / 0
02.10.2020, 08:55
    #40004757
Guzya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация настроек сервера
И такой вопрос, какое максимальное количество строк (байт) возвращают запросы. Т.е. есть ли запросы, которые возвращают тысячи или миллионы строк.
...
Рейтинг: 0 / 0
02.10.2020, 08:59
    #40004761
kliff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация настроек сервера
Guzya
А зачем такой большой work_mem, если я правильно понял, у Вас на мастере OLTP нагрузка, а OLAP Вы отправляете на реплику.


Вот тут я не до конца понял например work_mem = 4мб, как work_mem работает в разрезе сессий. Допустим в одной сессии выполняем запрос, для сортировки и тд, ему требуется например 1мб, зашли 1000 пользователей и одновременно юзают запрос с сортировкой получается 4бм будут в ОЗУ, а 996мб будет использоваться диск? Честно говоря не нашел каких то документов, почитать на эту тему
...
Рейтинг: 0 / 0
02.10.2020, 09:18
    #40004765
Guzya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация настроек сервера
work_mem это максимально доступная память на сессию, т.е. для каждого зашедшего. Т.е. в самом злом случаи work_mem * max_connections.
...
Рейтинг: 0 / 0
02.10.2020, 09:56
    #40004777
kliff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация настроек сервера
Guzya
work_mem это максимально доступная память на сессию, т.е. для каждого зашедшего. Т.е. в самом злом случаи work_mem * max_connections.


А то, что из 300 селектов в pg_stat_activity 100 в состоянии idle in transaction это нормальная ситуация? С пониманием этого момента тоже пока трудно.
...
Рейтинг: 0 / 0
02.10.2020, 10:23
    #40004787
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация настроек сервера
Guzya
work_mem это максимально доступная память на сессию, т.е. для каждого зашедшего. Т.е. в самом злом случаи work_mem * max_connections.

Это если совсем не читать документацию где половина описания work_mem именно про то, что калькуляция work_mem * max_connections принципиально неверна.

kliff
А то, что из 300 селектов в pg_stat_activity 100 в состоянии idle in transaction это нормальная ситуация? С пониманием этого момента тоже пока трудно.

Это проблема приложения. Которое держит транзакцию, но ничего не делает в ней.
...
Рейтинг: 0 / 0
02.10.2020, 10:34
    #40004790
Guzya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация настроек сервера
kliff
Guzya
work_mem это максимально доступная память на сессию, т.е. для каждого зашедшего. Т.е. в самом злом случаи work_mem * max_connections.


А то, что из 300 селектов в pg_stat_activity 100 в состоянии idle in transaction это нормальная ситуация? С пониманием этого момента тоже пока трудно.


Это примерно такая ситуация,
клиент открыл транзакцию
выполнил работу
и теперь делает что-то не на стороне бд, например обрабатывает полученный результат программно, а может и не делает ни чего.

суть в том, что транзакция не закрыта(commit,rolback) и снимок данных продолжает удерживать строки.

Нормально это или нет, зависит от приложения и его логики.

Если "простой" продолжительный как минимум влияет на avtovacuum, он не вычищает удаленные\обновленные строки удерживаемые снимком этой транзакции (если такие имеются), а значит для вставки новых строк будут выделятся новые страницы на диске.
А как максимум, может привести к проблемам с счетчиком транзакций, но там в зависимости от интенсивности работы зависит и "простой" должен быть
весьма продолжительным.
...
Рейтинг: 0 / 0
02.10.2020, 10:43
    #40004793
Guzya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация настроек сервера
Melkij
Guzya
work_mem это максимально доступная память на сессию, т.е. для каждого зашедшего. Т.е. в самом злом случаи work_mem * max_connections.

Это если совсем не читать документацию где половина описания work_mem именно про то, что калькуляция work_mem * max_connections принципиально неверна.


В документации вроде как еще страшнее, но мой общий посыл был про то, что это не разделяемая память на все процессы\конекты, а каждому свой кусок. И поэтому work_mem в 2Г меня удивил, поскольку max_connections = 1000 я предполагаю, что это OLTP.
...
Рейтинг: 0 / 0
02.10.2020, 17:21
    #40004956
Megabyte
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация настроек сервера
Из указанных настроек я бы еще поднял max_wal_size = 64MB до 1гб минимум, а то и больше. Надо поиграться, потестить.
У меня при оптимизации, где я не мог менять запросы, а только настройки конфига, это дало некоторый прирост.
Но вряд ли это глобально повлияет на работу.
Как тут правильно сказали, надо запросы смотреть в первую очередь.
...
Рейтинг: 0 / 0
12.10.2020, 23:37
    #40007896
OoCc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация настроек сервера
kliff
OoCc
kliff,

max_worker_processes должно быть установленно на как минимум на количество процессоров. Это как минимум. Можно и больше. Но тут за свопом нужно следить.

Сервер использует huge memory?


Да, проверил
[always] madvise never


Этот параметр должен быть на [never]
Pезервировать нужно только через explicit huge pages.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Оптимизация настроек сервера / 25 сообщений из 35, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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