
Dmitry
29.01.2018
09:41:55
его смотрели, или чем то не удовлетворяет?

Ascandar
29.01.2018
09:43:46
Постгре 9.4
А он с 9.5
а так бы выбрал pg_probackup

Google

Alex
29.01.2018
10:25:12
Версия какая у пг? Проблема известная в узком кругу
Есть у нас подрзрение что пг чот не допроверяет с такими коннектами
Кстати
А на сервере видать соединения tcp. Netstat показывает их?

Аггей
29.01.2018
10:27:35

Alex
29.01.2018
10:27:55
Их просто очень много и гдето не досмотрели
Тк такая проблема уже давно видна

Аггей
29.01.2018
10:29:06
А воспроизводится на всех связках? Или как тут - win клиент, linux сервер?
Думаю не в особенностях реализации сокетов проблема?

Alex
29.01.2018
10:30:31
С линухами. На винде никого у нас нет
Но сам не видел, коллеги видали
Так же одни жаловались что при переходе на 10 чаще стало проявлятся

Google

Alex
29.01.2018
10:33:51
Поэтому мы статистику собираем по таким случаям, тк воспроизвести у нас пока не получается

Dmitry
29.01.2018
10:42:25

Mike Chuguniy
29.01.2018
10:45:57
Я такое на 9.4 выидел пару лет назад, и даже как-то обходил, а вот как - уже не помню. :(

Yaroslav
29.01.2018
10:52:46

Alex
29.01.2018
10:53:29
Вот тут вчера ссылочкой поделились
https://jobs.zalando.com/tech/blog/hack-to-terminate-tcp-conn-postgres/?gh_src=4n3gxh1

Let Eat
29.01.2018
12:57:25
Я бы все волосы везде повыдирал, если б пришлось дебажить такое: https://postgr.es/p/3_S

Dmitry
29.01.2018
13:10:51

Alex
29.01.2018
13:17:19

Darafei
29.01.2018
13:18:34
через юниксовый сокет?

Dmitry
29.01.2018
13:18:41

Alex
29.01.2018
13:19:45
Забавно да

Slach
29.01.2018
13:21:53

Alexey
29.01.2018
13:22:48

Alex
29.01.2018
13:25:07

Alexey
29.01.2018
13:25:41
я всё хочу найти время для сравнения pg_stat_* и performance_schema. по-моему, там сравнение сильно не в пользу постгреса получится

Slach
29.01.2018
13:31:57

Google

Slach
29.01.2018
13:32:35
полностью включенная performance schema дает просадки в производительности mysql, хотя я давно эту информацию не проверял, может в mysql8.0 уже не так

Alexey
29.01.2018
13:33:13
для тех, кому лень учиться, придумали sys_schema


Mike Chuguniy
29.01.2018
13:34:22
Итак, как сделать, чтобы в ПГ остались висящие сессии.
1. Пара фраз про все и всяческие системные и сетевые вещи: kill -9 <клиент> прибивает сетевые соединения, так что не вариант.
Короткие запросы, которые генерируют трафик в обе стороны, тоже не вот уж помогут.
Сетевые проблемы я настоятельно рекомендую симулировать зарубанием трафика, как с ПГ-порта сервера, так и на этот ПГ-порт.
Соответственно, надо:
1. Длинный запрос. Делаем (виртуалке даём гиг оперативы и не лезем в настройки памятежорства):
pgbench -h testhost -U test -iqs 100
2. генерируем разного:
pgbench -h pgmm01 -U test -nc4 -T180
запускаем команду несколько раз. Ну чтобы разнообразить собственную жизнь.
3. на сервере родить скриптик:
#!/usr/bin/env bash
# Disable all connection exclude ssh by iptables
NONROOT=65
PGDATAPORT="5432"
IPTABLESTMP="/tmp/iptables.save.tmp"
[ "`id -u`" = "0" ] || {
echo "This script require root rights"
echo "Start it by command: sudo $0"
exit $NONROOT
}
iptables-save > $IPTABLESTMP
iptables -F
iptables -A INPUT -p tcp --dport $PGDATAPORT -j DROP
iptables -A OUTPUT -p tcp --sport $PGDATAPORT -j DROP
4. После издевательств пгбенча над базой скормить в клиенте что-нибудь вот такое:
test@test=> select pa.aid,abalance from pgbench_accounts as pa left join pgbench
_history ph on pa.aid=ph.aid order by abalance;
5. А на сервере запустить выше указанный скрипт. Вуаля! Клиента можно прибить kill -9, а в консоли сервера наблюдать вот такое:
test=# select datname,usename,backend_start, now(), query from pg_stat_activity where datname='test';
datname | usename | backend_start | now
| query
---------+----------+-------------------------------+---------------------------
---+----------------------------------------------------------------------------
-----------------------------------------
test | test | 2018-01-29 16:14:18.334963+00 | 2018-01-29 16:36:12.40825+
00 | select pa.aid,abalance from pgbench_accounts as pa left join pgbench_histor
y ph on pa.aid=ph.aid order by abalance;
test | postgres | 2018-01-29 16:22:52.556845+00 | 2018-01-29 16:36:12.40825+
00 | select datname,usename,backend_start, now(), query from pg_stat_activity wh
ere datname='test';
(2 rows)
test=#
Т.е. бек запущен в 16:14, сейчас 16:36


Alex
29.01.2018
13:35:10
Итак, как сделать, чтобы в ПГ остались висящие сессии.
1. Пара фраз про все и всяческие системные и сетевые вещи: kill -9 <клиент> прибивает сетевые соединения, так что не вариант.
Короткие запросы, которые генерируют трафик в обе стороны, тоже не вот уж помогут.
Сетевые проблемы я настоятельно рекомендую симулировать зарубанием трафика, как с ПГ-порта сервера, так и на этот ПГ-порт.
Соответственно, надо:
1. Длинный запрос. Делаем (виртуалке даём гиг оперативы и не лезем в настройки памятежорства):
pgbench -h testhost -U test -iqs 100
2. генерируем разного:
pgbench -h pgmm01 -U test -nc4 -T180
запускаем команду несколько раз. Ну чтобы разнообразить собственную жизнь.
3. на сервере родить скриптик:
#!/usr/bin/env bash
# Disable all connection exclude ssh by iptables
NONROOT=65
PGDATAPORT="5432"
IPTABLESTMP="/tmp/iptables.save.tmp"
[ "`id -u`" = "0" ] || {
echo "This script require root rights"
echo "Start it by command: sudo $0"
exit $NONROOT
}
iptables-save > $IPTABLESTMP
iptables -F
iptables -A INPUT -p tcp --dport $PGDATAPORT -j DROP
iptables -A OUTPUT -p tcp --sport $PGDATAPORT -j DROP
4. После издевательств пгбенча над базой скормить в клиенте что-нибудь вот такое:
test@test=> select pa.aid,abalance from pgbench_accounts as pa left join pgbench
_history ph on pa.aid=ph.aid order by abalance;
5. А на сервере запустить выше указанный скрипт. Вуаля! Клиента можно прибить kill -9, а в консоли сервера наблюдать вот такое:
test=# select datname,usename,backend_start, now(), query from pg_stat_activity where datname='test';
datname | usename | backend_start | now
| query
---------+----------+-------------------------------+---------------------------
---+----------------------------------------------------------------------------
-----------------------------------------
test | test | 2018-01-29 16:14:18.334963+00 | 2018-01-29 16:36:12.40825+
00 | select pa.aid,abalance from pgbench_accounts as pa left join pgbench_histor
y ph on pa.aid=ph.aid order by abalance;
test | postgres | 2018-01-29 16:22:52.556845+00 | 2018-01-29 16:36:12.40825+
00 | select datname,usename,backend_start, now(), query from pg_stat_activity wh
ere datname='test';
(2 rows)
test=#
Т.е. бек запущен в 16:14, сейчас 16:36
Tcp keepalive еще проверь что будут работать или нет


Dmitry
29.01.2018
13:37:12
без gdb и не туды и не сюды

Alex
29.01.2018
13:37:50

Mike Chuguniy
29.01.2018
14:03:29
так, net.ipv4.tcp_keepalive_time не при делах. Разве что, если время запроса больше этого времени, вот что в логе ПГ:
2018-01-29 16:39:32 UTC test@192.168.191.1/test [psql:17238]: LOG: could not send data to client: Время ожидания соединения истекло
2018-01-29 16:39:32 UTC test@192.168.191.1/test [psql:17238]: STATEMENT: select pa.aid,abalance from pgbench_accounts as pa left join pgbench_history ph on pa.aid=ph.aid order by abalance;

Dmitry
29.01.2018
14:39:35
https://www.postgresql.org/docs/current/static/runtime-config-connection.html
tcp_keepalives_idle
tcp_keepalives_interval
а так система может в легкую обманывать. на текущей работе был wget из под крона который был запущен в 2015 году и прикидывался что активен

Let Eat
29.01.2018
14:41:15

Mike Chuguniy
29.01.2018
14:42:13
И я сейчас не вспомню, чтобы эти значения редактировались в ПГ.

Dmitry
29.01.2018
14:43:24

Mike Chuguniy
29.01.2018
14:43:48
Судя по докам - да. В код я не лазил, сразу говорю.

Dmitry
29.01.2018
14:44:01
тада вообще чему вы удивляетесь.

Google

Mike Chuguniy
29.01.2018
14:44:57
тада вообще чему вы удивляетесь.
Я давно уже ничему не удивляюсь. Я тупо показываю, как имитировать подвисшие на стороне сервера соединения. А то пролетало, что не ловится такое. Ловится на ура.

Dmitry
29.01.2018
14:46:25
ну да. просто на откуп системы.

Alex
29.01.2018
15:02:02

Dmitry
29.01.2018
15:06:25
добрый
подскажите, можно завернуть логи пг на stdout?
log_destination "stdout"?

Mike Chuguniy
29.01.2018
15:08:22

Dmitry
29.01.2018
15:08:49
докер
https://www.postgresql.org/docs/9.5/static/runtime-config-logging.html офдока говорит что в stderr заворачивается
но, судя по всему, нет

Mike Chuguniy
29.01.2018
15:09:50
Для коллектора логи заворачиваются в syslog, а сислог уже шлёт куда надо.

Dmitry
29.01.2018
15:10:42
причем, меня интересует именно slow log

Mike Chuguniy
29.01.2018
15:13:07

Dmitry
29.01.2018
15:13:37

Lev
29.01.2018
15:14:00
tail -f [файл лога]

Леонид
29.01.2018
17:25:28
Всем привет)
Народ, может кто может помочь?
У меня в таблице 120 млн строк и когда делаю запросы, то первый запрос занимает секунд 20-70, но зато следующие по 1 сек. Запросы разные одинаково себя ведут.
автовакуум настроен, реиндекс сделал.
shared_buffers = '3GB';
effective_cache_size = '6GB';
Сервер:
8GB RAM, 4 CPU, SSD
Что это может быть?)

Google

Artem
29.01.2018
17:31:34
А план что показывает?

Леонид
29.01.2018
17:32:13
сейчас скинуть попробую

Artem
29.01.2018
17:36:04
Ну сравнить просто надо explain analyse первого и последующих. Может быть план меняется и выборка уже из кеша идет

Леонид
29.01.2018
17:41:36

Andrey
29.01.2018
17:43:08
Покажите план с buffers

Леонид
29.01.2018
17:43:24
сори, а как его получить?)

Andrey
29.01.2018
17:43:51
И 3Gb для shared buffers многотовато при 8Gb RAM.
explain (analyze, verbose, buffers)

Леонид
29.01.2018
17:44:47