@pgsql

Страница 530 из 1062
??Suffer
24.10.2017
02:26:03
Или это будет еще медленней чем с дискового кеша курсора который не влазит в память? Они в этом случае все записи близко на диске лежат

select * from forensics_forensic limit 1000 offset 5000000; Time: 0.771s

пичаль

Yury
24.10.2017
02:33:21
я прям счас ответить не могу, но общий смысл в том что курсор можно двигать не только вперёд отсюда и необходимость держать все данные для него

Google
Yury
24.10.2017
02:34:26
хотя

больше похоже на багу так как у вас стоит NO SCROLL

это значит что можно толькот вперёд

а какая версия постгреса?

??Suffer
24.10.2017
02:37:30
PostgreSQL 9.6.5 on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 6.3.0-12ubuntu2) 6.3.0 20170406, 64-bit |

Yury
24.10.2017
02:37:43
пичаль
народ проснёться, я думаю скажет больше, я могу то же покопать но не сейчас

??Suffer
24.10.2017
02:38:09
больше похоже на багу так как у вас стоит NO SCROLL
Возможно баг, а может быть что-то не так понимаю или не знаю.

Yury
24.10.2017
02:39:59
там кажется как то хитро сделан курсор... он ведь по некоему запроссу, запросс висит пока курсор не отработает.

но вообще логично очищать данные которые уже были забраны если стоит NO SCROLL,

??Suffer
24.10.2017
02:42:09
Логично, но наверно не реализовано :D

Yury
24.10.2017
02:49:01
там может быть много подводных камней

может @funbringer что то знать, хотя курсоры кажется это отдельная магия

??Suffer
24.10.2017
02:51:19
Я думаю может создать багрепорт

Google
Юрий
24.10.2017
02:58:17
Ребят, никто не будет против, если я добавлю чатик в https://github.com/mr-mig/ru-tech-chats ?

??Suffer
24.10.2017
03:12:34
Ребят, никто не будет против, если я добавлю чатик в https://github.com/mr-mig/ru-tech-chats ?
Это секретный чатик для избраных о котором никто не должен знать (нет)

Yaroslav
24.10.2017
03:34:22
Я думаю может создать багрепорт
А EXPLAIN того запроса, который использует много памяти, Вы смотрели?

??Suffer
24.10.2017
03:34:38
Нет, я нуб

https://explain.depesz.com/s/lj6

Я знаю что там действительно много данных должно быть

Yaroslav
24.10.2017
03:41:28
А EXPLAIN (ANALYZE, BUFFERS), если не слишком долго? Какое текущее значение work_mem, кстати?

??Suffer
24.10.2017
03:41:58
слишком долго будет

точней я не знаю как перенаправить вывод explain в файл, а данные которые вернулись никуда не выводить

Yaroslav
24.10.2017
03:45:46
Хмм... какие данные? EXPLAIN ANALYZE никаких данных, кроме плана, не возвращает.

??Suffer
24.10.2017
03:46:04
Точно? :D Я всю ночь не спал

https://explain.depesz.com/s/ruJE

Yury
24.10.2017
03:55:05
Hash кушает

но это нормально

понятно чё оно не освобождает память...

Yaroslav
24.10.2017
03:56:33
С виду тут толькл полгигабайта используется (плюс-минус)... Так какое значение work_mem у Вас? И это точно тот же запрос, что и в процедуре?

loki
24.10.2017
03:56:58
Народ какая-то мистика. Есть мастер с репликой через pg_replication_slots. На 100 мб канале. База 60 гигов. На метрике же запускается pg_basebackup, которая делает снимок кластера с мастера pg_basebackup -c fast -v --xlog-method=fetch --gzip --format=tar -D - > $BACKUPFILE 2> /var/baseback.log Схема работает уже пару месяцев время бекапа было 13-14 минут. Последние 4 дня бекап делается ровно на час дольше. Мониторю оба сервера mamonsu+zabbix в поведение ничего не поменялось. Даже ночной бекап когда загрузка нулевая тоже делавется больше часа. Все что понимаю, что происходит какая-то дичь. postgresqpro-9.6 + 1c

??Suffer
24.10.2017
03:57:32
Я поменяя настройки чтобы посмотреть как оно ведет когда мало памяти max_connections = 10 shared_buffers = 560MB effective_cache_size = 680MB work_mem = 256MB maintenance_work_mem = 640MB min_wal_size = 1GB max_wal_size = 2GB checkpoint_completion_target = 0.7 wal_buffers = 16MB default_statistics_target = 100

Добавить памяти в конфиг и показать новый explain?

Google
Yury
24.10.2017
04:02:26
не оно меньше не будет... всё было бы хорошо если бы это было просто SELECT * FROM blabla; тогда бы это было возможно, а тут всё скушивают hash для join.

Yaroslav
24.10.2017
04:04:26
А где Вы это видите? Он же говорит, что съедается около 8GB, а в плане вроде всё же меньше...

??Suffer
24.10.2017
04:04:33
16gb память это мой домашний пк Вот запрос https://dumpz.org/2702725/

??Suffer
24.10.2017
04:07:53
max_connections = 10 shared_buffers = 6560MB effective_cache_size = 6680MB work_mem = 5256MB maintenance_work_mem = 640MB min_wal_size = 1GB max_wal_size = 2GB checkpoint_completion_target = 0.7 wal_buffers = 16MB default_statistics_target = 100

Yaroslav
24.10.2017
04:09:52
В общем, с подобным планом, по мере увеличения work_mem потребление памяти должно только расти (и это правильно).

Yury
24.10.2017
04:10:01
Моя теория такова, что этот запросс для ПГ не такой потоковый как кажется снаружи, по этому данные и не очищаются.

к слову вообще не используются индексы....

это могло бы уменьшить нагрзку на память

Yaroslav
24.10.2017
04:11:14
А как Вы определили, что используется именно около 8 ГБ? Как измеряли?

??Suffer
24.10.2017
04:11:36
КДЕшным System Monitor

Или это не правильно?

Yaroslav
24.10.2017
04:13:59
На скриншоте видно
Не знаю, правильно ли он измеряет —- не пользовался.

??Suffer
24.10.2017
04:14:47
Если уменшить размер памяти то я вижу что размер занятого места увеличивается

Постгрес пишет кеш на диск

Google
Alexander
24.10.2017
04:16:15
доброе утро) вопрос про оптимальный алгоритм) задача - есть таблица model, там поля id, date_modified (Python, Django, date_modified = models.DateTimeField(_('date modified'), auto_now=True), там дата изменения документа с микросекундами, которые стоит игнорить), есть некий список словарей на питоне [{‘id’: 1, ‘date_modified’: 1508817032}, …], тут unixtimestamp в секундах, задача - написать, какие id из этого списка имеют отличные date_modified от СУБД, то есть сделать список id изменённых документов допустим, в списке 100 000 пар объектов, как лучше сделать - выгрузить все данные одним запросом и на питоне сравнивать или делать кучу запросов к базе? или какой-нибудь третий вариант (один неведомый запрос к базе)?

если принципиальной разницы нет, грузить db или app сервер, какой вариант лучше?

Yaroslav
24.10.2017
04:19:58
Если уменшить размер памяти то я вижу что размер занятого места увеличивается
Да, естественно. А проблема-то у Вас в чём, тогда? ;) Про измерение занятой памяти, кстати: https://www.depesz.com/2012/06/09/how-much-ram-is-postgresql-using/

Alexander
24.10.2017
04:23:19
да, поддерживается

Yaroslav
24.10.2017
04:23:50
Если уменшить размер памяти то я вижу что размер занятого места увеличивается
Да, а сам запрос какой-то ORM сгенерирован? Вам действительно нужны все эти возвращаемые поля?

??Suffer
24.10.2017
04:25:42
да, поддерживается
Ну тогда просто .iterator() https://docs.djangoproject.com/en/1.11/ref/databases/#server-side-cursors Оно не упадет по памяти

Да, а сам запрос какой-то ORM сгенерирован? Вам действительно нужны все эти возвращаемые поля?
да DjangoORM сгенерировал, но там в .only() есть тщательно отобраный список полей который надо использовать

короче все поля там нужны

Yaroslav
24.10.2017
04:30:59
Да ладно. ;) Например: INNER JOIN ... ON "forensics_forensic"."vendor_id" = "sources_datavendor"."id"... И возвращаются оба поля. Хотя это мелочь, конечно...

??Suffer
24.10.2017
04:34:44
Да ладно. ;) Например: INNER JOIN ... ON "forensics_forensic"."vendor_id" = "sources_datavendor"."id"... И возвращаются оба поля. Хотя это мелочь, конечно...
Я так понимаю это для того что-бы ORM сумел построить обджекты и зависимости между ними(Я не знаю как он это делает). Я имел ввиду поля з данными

Yaroslav
24.10.2017
04:35:08
короче все поля там нужны
В общем, попробуйте измерить, сколько памяти на самом деле использует тот backend PostgreSQL, который выполняет Ваш запрос, если Вам интересно, почему есть отличие между тем, что показывает план и System Monitor. Заодно узнаете, правильно ли работает последний.

Yaroslav
24.10.2017
04:37:57
Много idle, 1 -2 active
А сам pg_dump ждёт чего-то или нет?

Yaroslav
24.10.2017
04:38:58
А сам pg_dump ждёт чего-то или нет?
А, извините, это был pg_basebackup. ;)

loki
24.10.2017
04:38:59
А сам pg_dump ждёт чего-то или нет?
pg_basebackup xlog забирает же и ничего не ждем. О даже запросы не делает жи

Alexander
24.10.2017
04:39:00
Ну тогда просто .iterator() https://docs.djangoproject.com/en/1.11/ref/databases/#server-side-cursors Оно не упадет по памяти
понял, то есть, получается, с iterator’ом будет много запросов к базе? и в каждом запросе (на каждой итерации) я буду проверять даты, верно?

но на Django это кешироваться не будет, это будет где-то на сервере

??Suffer
24.10.2017
04:40:22
будет один запрос, но Python процес не будет принимать все строки в свою память и сразу же закрывать соединение с базой. 100000 обджектов в питоне могут много занимать

Google
Yaroslav
24.10.2017
04:40:40
loki
24.10.2017
04:41:13
А размер backup-ов не увеличился?
тот же. И размер базы тот же.

Alexander
24.10.2017
04:41:38
разобрался, спасибо)

??Suffer
24.10.2017
04:41:50
➜ ~ ps -u postgres o pid= | sed "s/^[ \t]*//" | sed 's#.*#/proc/&/smaps#' | xargs sudo grep ^Pss: | awk '{A+=$2} END{print A}' 168923 ➜ ~ ps -u postgres o pid= | sed "s/^[ \t]*//" | sed 's#.*#/proc/&/smaps#' | xargs sudo grep ^Pss: | awk '{A+=$2} END{print A}' 9247719 ➜ ~ ps -u postgres o pid= | sed "s/^[ \t]*//" | sed 's#.*#/proc/&/smaps#' | xargs sudo grep ^Pss: | awk '{A+=$2} END{print A}' 10421329

10gb чтоле? o_o

Yaroslav
24.10.2017
04:53:23
С такими —- это ещё очень мало. :)

??Suffer
24.10.2017
04:53:24
в этот момент

С такими —- это ещё очень мало. :)
значит можно уменшить без ущерба по скорости или как?

Yaroslav
24.10.2017
04:54:32
Подождите. В чём у Вас проблема, конкретно?

??Suffer
24.10.2017
04:56:32
Проблема в том что процес на Python который должен обрабатывать этот запрос падает от рук OOM килера. Я вот пытаюсь заставить его работаеть с server side cursor, но мне кажется если запустить это на продакшене где таких запросов будет много начнут уже падать сервера с Postgres

Yaroslav
24.10.2017
05:00:34
> Проблема в том что процес на Python который должен обрабатывать этот запрос падает от рук OOM килера Если "убивают" именно его, то проблема только в нём, и никакие настройки PostgreSQL тут не помогут. Если же "убивают" backend PostgreSQL, связанный с этим клиентским процессом, это другое дело. Правильно настроенные сервера от этого падать не начнут, кстати, будут только "умирать" connections.

Далее. По показанным Вами планам видно, что backend PostgreSQL-а действительно использует немало памяти для обработки этого запроса, и курсор тут вообще ни при чём.

Объём потребляемой памяти зависит, в первую очередь, от work_mem (это, примерно, максимально допустимое использование памяти на один "узел" запроса (node)).

Т.е., например, в плане Вашего запроса 40 nodes. Значит, он потенциально мог бы использовать 40 x work_mem памяти.

Страница 530 из 1062