
Pavel
06.03.2017
09:16:27

Dmitrii
06.03.2017
17:07:41
Граждане
А напомните, где был репозиторий с pgrc
Для анализа индексов, сексканов и прочего?

Google

Pavel
06.03.2017
22:10:45
я с SQL плохо знаком, но подскажите, где почитать про это. Есть в бд колонка sign типа SMALLINT. Я делаю запрос ...where sign = '1', т.е. сравниваю со строкой. А постгрес делает преобразование и возвращает все строки, в которых хранятся 1, но в виде SMALLINT. Вот этот момент мне не совсем ясен, почему постгрес конвертирует типы при сравнении и где прочитать подробнее про это?

Vladislav
06.03.2017
22:14:00
Кто же вас учит цифры в строки загонять и сравнивать? Откуда вы такие беретесь вообще?

Alexey
06.03.2017
22:14:09
Паш, в данном случае БД тебе делает услугу, что находит нужное тебе. :)
Если хранится как целое, то и отдаваться будет как целое.
Что ты у неё спросил как строку и она тебе вежливо ответила — это спасибо какбе.

Darafei
06.03.2017
22:15:01
Это не строка, а unknown

raksita
06.03.2017
22:32:15
подскажите в какую сторону копать:
запрос - join 2 больших таблиц
на мастере Merge Join, 2 Index Scan (work_mem 128MB)
на логической реплике Hash Join, Seq Scan, Index Scan (work_mem 800MB)
набор индексов одинаковый, делал analyze, reindex
если сделать enable_seqscan = off, то на реплике появляется план с мастера

Darafei
06.03.2017
22:33:14
Выровнять work mem?

Pavel
06.03.2017
22:36:54

raksita
06.03.2017
22:38:49

Alexey
06.03.2017
22:39:37

Ildar
06.03.2017
22:41:28

Pavel
06.03.2017
22:42:37

Google

Darafei
06.03.2017
22:44:18

raksita
06.03.2017
22:46:09
Диски там действительно разные, спасибо

Darafei
06.03.2017
22:46:43
От дисков оно не зависит
Оно от random_page_cost зависит

raksita
06.03.2017
22:49:26
Это я заработался уже, да посмотрю random_page_cost

Dmitrii
06.03.2017
23:44:06
Как интересно сегодня получилось. Был запрос UPDATE на каждый хит на сайте, решили оптимизировать и убрать этот апдейт в очереди с прослойкой через редис. Убрали. CPU на сервере с постгресом возрос еще больше.
Не совсем то, что я ожидал ?
Тут конечно стоит оговориться, что аплейкейшен стал обслуживать на 40% больше запросов в целом за тот же период времени, но цель то была другая )


Denis
07.03.2017
03:48:48
Какое интересное замечание
If the table being analyzed has one or more children, ANALYZE will gather statistics twice: once on the rows of the parent table only, and a second time on the rows of the parent table with all of its children. This second set of statistics is needed when planning queries that traverse the entire inheritance tree. The autovacuum daemon, however, will only consider inserts or updates on the parent table itself when deciding whether to trigger an automatic analyze for that table. If that table is rarely inserted into or updated, the inheritance statistics will not be up to date unless you run ANALYZE manually.

Vladislav
07.03.2017
08:30:24

Wom
07.03.2017
09:04:55
можно ли как-то при стриминг-репликации понять когда на standby пришла запись?
что-то некоторые с задержкой попадают

Ildar
07.03.2017
09:38:51

Wom
07.03.2017
09:39:49
а нет. это не то. мне timestamp
но скорее всего такого не бывает

Ildar
07.03.2017
09:47:02
сомневаюсь, что где-то хранится timestamp

raksita
07.03.2017
09:47:59

Wom
07.03.2017
09:52:11

Anton
07.03.2017
09:52:12
SELECT CASE WHEN pg_last_xlog_receive_location() = pg_last_xlog_replay_location() THEN 0 ELSE EXTRACT (EPOCH FROM now() - pg_last_xact_replay_timestamp())::INTEGER END AS replication_lag;
select pg_xlog_location_diff(sent_location, replay_location) from pg_stat_replication)/1024/1024

Google

Anton
07.03.2017
10:15:41
:) поторопился, не дочитал что нужно время для конктерной записи
sorry

Wom
07.03.2017
10:20:43
:)

raksita
07.03.2017
10:21:34

Vladimir
07.03.2017
10:35:30
Всем привет.
Нужен гуру в PostgreSQL который поможет найти причину деградации в производительности. Разумеется, на возмездной основе.
Есть следующий запрос:
джойним таблицу А с таблицей Б, сортируем в обратном порядке по столбцу из таблицы А и Б, и делаем лимит 20.
В результате джойна получается таблица 35000 записей, но суммарно запрос выполняется около 10 секунд.
Индексы есть, вакум делал, но всё равно не могу понять почему так долго выполняется запрос, причем вчера всё работало нормально.
Нужна консультация по скайп + покажу всё через тимвьювер.

Олег
07.03.2017
10:37:07
план запроса в первую очередь смотри

Vladimir
07.03.2017
10:39:42
честно - не хочу сейчас сам в этом разбираться, просто нужно чтобы кто-то быстро и за деньги решил проблему - у нас прод висит из-за этого, а экспертизы своей в этой области нету

Darafei
07.03.2017
10:40:20
explain analyze пробел запрос в https://explain.depesz.com/
и сюда в чатик, будешь наглядным пособием :)

Andrey
07.03.2017
10:42:58
А если сортировать в прямом порядке, всё равно тормозит?
Если нет, то интекс нужен ORDER BY ... DESC

Darafei
07.03.2017
10:43:51
потом окажется, что там select pg_sleep(0.1) from (...)

Vladimir
07.03.2017
10:49:13
https://explain.depesz.com/s/oExM
chats - таблица с чатами.
messages - сообщения, у каждого есть chat_id.
а у чата есть last_msg_id - ссылка на последнее сообщение. получается циклическая зависимость

Andrey
07.03.2017
10:51:30
explain, видимо, анонимизировал запрос )

Vladimir
07.03.2017
10:52:39
а, это я сделал)
во - https://explain.depesz.com/s/q9dt

Andrey
07.03.2017
10:52:58
Я уж подумал, наконец-то они додумали до этого (

raksita
07.03.2017
10:53:58

Andrey
07.03.2017
10:54:02
По unread и date_created есть индексы? Если убрать обратную сортировку из запроса, план изменится?

Google

Andrey
07.03.2017
10:54:14

Vladimir
07.03.2017
10:55:30
уже делал индексы в обратную сторону
CREATE INDEX chat_unread_idx ON chats USING btree (unread DESC NULLS LAST)
CREATE INDEX message_date_created_idx ON messages USING btree (date_created DESC NULLS LAST

Admin
ERROR: S client not available

raksita
07.03.2017
10:56:16
Hash Cond: ((messages.y_id)::text = (chats.last_msg_id)::text)
вот это странно

Vladimir
07.03.2017
10:56:55
ключи - md5 хэши
строки

raksita
07.03.2017
10:58:03
индекс типа
hash
пробовали?

Vladimir
07.03.2017
10:59:10
нет. на chats.last_msg_id?

raksita
07.03.2017
11:02:39

Andrey
07.03.2017
11:03:43
А если сделать индексы по column::text? )
Было бы хорошо ограничить выборку до JOIN'а, конечно.
Можно ещё на сам запрос посмотреть?

Vladimir
07.03.2017
11:13:32
explain analyze SELECT chats.y_id AS chats_y_id, chats.unread AS chats_unread FROM chats JOIN messages ON messages.y_id = chats.last_msg_id ORDER BY chats.unread DESC, messages.date_created DESC LIMIT 20;
это запрос, которые делается для админа, чтобы он мог посмотреть чаты всех пользователей системы. у каждого пользователя будет ещё where

Sergey
07.03.2017
11:13:48
Если я правильно интерпретирую "rows=106453 width=33) (actual time=0.009..5657.857" почти 6 секунд на чтение 500Kb ?
Даже 350 Kb
Нет ли чего странного в системе?

Vladimir
07.03.2017
11:16:48
в смысле на сервере? хз, у нас выделенный инстанс под базу - 1 кора, 2 гб оперативки, 5 гб ssd.
текущая загрузка - CPU 22%, память 1 гб, жесткий 2.5 гб.
после ребута запрос кстати пошустрее проходит, а потом опять также

Darafei
07.03.2017
11:29:13

Google

Vladimir
07.03.2017
11:31:29

Darafei
07.03.2017
11:31:47
подними в метров 200 хотя бы
а там в реальном кейсе нет чего-то вроде user_id in ... ?

Vladimir
07.03.2017
11:37:07
не, там ещё хлеще

Darafei
07.03.2017
11:37:10
есть индекс по messages.y_id?

Vladimir
07.03.2017
11:37:51
он праймари кий

Darafei
07.03.2017
11:38:51
analyse messages;
analyse chats;
давай полный запрос
и
set random_page_cost = 1.01

Vladimir
07.03.2017
11:47:16
всё сделал, не помогло.
запрос и так полный, просто он выполняется только из под админа, а так вся разница в количестве возвращаемых столбцов - я оставил парочку в своём примере

Айтуар
07.03.2017
11:48:19

Darafei
07.03.2017
11:49:18