Size: a a a

Saint P Ruby Community

2020 February 28

AN

Andrey Novikov in Saint P Ruby Community
vizvamitra
знатоки SQL, сколько займёт такой запрос:

SELECT created_at, count(sc.created_at) AS events 
FROM (
 SELECT generate_series(min(created_at), max(created_at), interval '60 min')
 FROM table1
) g(start_time)
LEFT JOIN table1 t1
 ON t1.created_at >= g.start_time
 AND t1.created_at < t1.created_at + interval '60 min'
GROUP BY 1
ORDER BY 1;

если в table1 лежит миллион записей, а min(created_at) — год назад? (т.е. generate_series выдаст серию из 9k значений)
А если исправить условие, то станет хуже:
Sort  (cost=28741.69..28742.19 rows=200 width=16)
источник

SM

Sergei Maximov in Saint P Ruby Community
Andrey Novikov
А если исправить условие, то станет хуже:
Sort  (cost=28741.69..28742.19 rows=200 width=16)
Индекс есть на table1.created_at? Если нет, то попробуй добавить. Если есть, то сделай set enable_seqscan to off;, т.к. Postgres при маленьком числе записей не будет использовать индекс. Интересно, как поменяется время выполнения запроса.
источник

SM

Sergei Maximov in Saint P Ruby Community
Ну и надо делать explain analyze
источник

VA

Vyacheslav Alexeev in Saint P Ruby Community
Мчу к вам :3
источник

v

vizvamitra in Saint P Ruby Community
да нет, мне в гробу такой квери не нужен на проде)
источник

SM

Sergei Maximov in Saint P Ruby Community
Sergei Maximov
Индекс есть на table1.created_at? Если нет, то попробуй добавить. Если есть, то сделай set enable_seqscan to off;, т.к. Postgres при маленьком числе записей не будет использовать индекс. Интересно, как поменяется время выполнения запроса.
Запрос на первый взгляд вообще не должен трогать таблицу, а выполняться только за счёт индекса.
источник

v

vizvamitra in Saint P Ruby Community
кто делает индекс на created_at?)
источник

SM

Sergei Maximov in Saint P Ruby Community
Я иногда делаю, а что?
источник

v

vizvamitra in Saint P Ruby Community
если надо то да, но тут не тот случай
источник

v

vizvamitra in Saint P Ruby Community
я выяснил тем временем. Этот запрос запустили в 10 утра и он выполнялся до сих пор, съев 150Gb места на сервере БД и загрузив CPU на 50%
источник

SM

Sergei Maximov in Saint P Ruby Community
vizvamitra
я выяснил тем временем. Этот запрос запустили в 10 утра и он выполнялся до сих пор, съев 150Gb места на сервере БД и загрузив CPU на 50%
А вот было бы там правильное условие и индекс, то может бы он у тебя быстро выполнился
источник

SM

Sergei Maximov in Saint P Ruby Community
vizvamitra
если надо то да, но тут не тот случай
А что такого? created_at вообще не должен меняться, индекс на 1 млн таймстампов много места занять не должен. Задача у тебя под этот индекс уже есть. Почему бы не попробовать?

А вообще странно, что тут не тот случай. Таблица events,  наверняка у тебя есть к ней обращения в порядке создания ивентов.
источник

SM

Sergei Maximov in Saint P Ruby Community
Сделай дамп этой таблицы (можно даже дампить не всю таблицу, а только нужные столбцы), разверни на другой БД/машине и протестируй.
источник

SM

Sergei Maximov in Saint P Ruby Community
Делов-то.
источник

v

vizvamitra in Saint P Ruby Community
да пофиг) я просто разбирался с тем, почему на проде вдруг производительность БД упала на пару порядков
источник

v

vizvamitra in Saint P Ruby Community
спасибо за помощь в расследовании
источник

EM

Eugene Maslenkov in Saint P Ruby Community
Обсуждали тут подсветку и я задумался....
1. полностью согласен, что иногда подсветка мешает. Помню в darkula по разному отмечались строки в обычных и двойных кавычках, при наличии рубокопа очень сильно раздражало. Было так же, что где-то комментарии слишком яркими были и я их делал "по темнее", в общем приходилось настривать.
2. Классно, когд подсветка может отобразить проблемы. На скриншоте подчеркнуто три места, аргумент функции с опечаткой, использования ее в правильном виде и использование локальной переменной с опечаткой. Да, это эликсир, и там все чуть более прозрачно чем руби, но пример показательный, сам не давно обратил, как это классно. Еще иногда бывает, что подсветка начинает ехать сразу после того места, где допущена грубая синтаксическая ошибка. (тут важно сделать ремарку, что в elixir term может быть опечатка и к сожалению он будет подсвечиваться корректно). В руби этот пункт почти не работает :(.
3. Эстетическое удовольствие. Возможно это дело привычки, но мне нравится работать с подсветкой
источник

EM

Eugene Maslenkov in Saint P Ruby Community
P.S. на скрине rubymine + elixir plug-in. Тема Material Solarized Dark.
источник

KB

Kirill Bobykin in Saint P Ruby Community
Anton Davydov
Если что, сидим тут
Я вас после 9 найду
источник

AD

Anton Davydov in Saint P Ruby Community
Kirill Bobykin
Я вас после 9 найду
👌
источник