
I
22.11.2016
08:23:33
"У меня не работает!"
"Сделай так"
"У меня не работает, помогите!"
"Да сделай же так. И скажи, что у тебя там"
"У меня не работает"

Michael
22.11.2016
08:24:55
Flight.unscope(:order).visible_only.explain
EXPLAIN for: SELECT "flights".* FROM "flights" WHERE ("flights"."invisible" != $1) [["invisible", "t"]]
QUERY PLAN
--------------------------------------------------------------
Seq Scan on flights (cost=0.00..297.97 rows=2887 width=132)
Filter: (NOT invisible)
(2 rows)
и
Flight.visible_only.explain
EXPLAIN for: SELECT "flights".* FROM "flights" WHERE ("flights"."invisible" != $1) ORDER BY "flights"."departure_time" DESC [["invisible", "t"]]
QUERY PLAN
--------------------------------------------------------------------
Sort (cost=463.91..471.12 rows=2887 width=132)
Sort Key: departure_time DESC
-> Seq Scan on flights (cost=0.00..297.97 rows=2887 width=132)
Filter: (NOT invisible)
(4 rows)

I
22.11.2016
08:25:48
а индекс где тут?)

Google

I
22.11.2016
08:26:39
как часто будут такие запросы выполняться?
а то мб навесить частичный составной индекс по invisible='t', 'departure_time'?

Michael
22.11.2016
08:27:26
Flight.where(origin_id: 103).explain
Sort (cost=456.93..463.16 rows=2494 width=132)
Sort Key: departure_time DESC
-> Seq Scan on flights (cost=0.00..316.21 rows=2494 width=132)
Filter: (origin_id = 103)
(4 rows)
вообще часто

Alex
22.11.2016
08:29:44
Пишет что у тебя всего 2500 строк

Michael
22.11.2016
08:30:11

Alex
22.11.2016
08:31:26
Лол, хочешь добавлю тебе проблем?
Может настало время для эластики?

I
22.11.2016
08:32:22
да ладно, рано еще эластик, как по мне
сперва индексы надо научиться использовать и работать с ними

Alex
22.11.2016
08:33:43
Релтсовый explain пишет какие индексы юзались?

I
22.11.2016
08:33:52
да

Google

Alex
22.11.2016
08:34:24
Я тогда в его explain не вижу юзания индексов.

Антон
22.11.2016
08:35:50
сдается мне что в сортировке индекс используется никак


Michael
22.11.2016
08:36:10
ну в схеме
add_index "flights", ["arrival_time"], name: "index_flights_on_arrival_time", using: :btree
add_index "flights", ["available"], name: "index_flights_on_available", using: :btree
add_index "flights", ["capacity_basic_volume"], name: "index_flights_on_capacity_basic_volume", using: :btree
add_index "flights", ["capacity_basic_weight"], name: "index_flights_on_capacity_basic_weight", using: :btree
add_index "flights", ["capacity_estimated_volume"], name: "index_flights_on_capacity_estimated_volume", using: :btree
add_index "flights", ["capacity_estimated_weight"], name: "index_flights_on_capacity_estimated_weight", using: :btree
add_index "flights", ["departure_time"], name: "index_flights_on_departure_time", using: :btree
add_index "flights", ["destination_id"], name: "index_flights_on_destination_id", using: :btree
add_index "flights", ["origin_id", "airline", "flight_number", "departure_time"], name: "index_departure", unique: true, using: :btree
add_index "flights", ["origin_id"], name: "index_flights_on_origin_id", using: :btree
add_index "flights", ["slug"], name: "index_flights_on_slug", unique: true, using: :btree
add_index "flights", ["invisible"], name: "index_flights_on_invisible", using: :btree


Alex
22.11.2016
08:36:39
А в базе они действительно есть?

Michael
22.11.2016
08:38:02
да, в базе тоже 12 индексов

I
22.11.2016
08:38:30

Антон
22.11.2016
08:39:14
ээээ, ну.... эээ... вообще если индекс не используется то его лучше не добавлять, например для поля created_at

I
22.11.2016
08:40:31
не, я о том, что индекс по departure_time desc или по departure_time desc + invisible='t'

Michael
22.11.2016
08:40:38

Антон
22.11.2016
08:42:29

Michael
22.11.2016
08:42:36
нет
на локале я этого почти не ощущаю, а на проде стазу видно, там записей намного больше
ребята, ковырялись, но так ничего сделать и не смоги, в итоге повесили задачу на меня((

I
22.11.2016
08:44:23
СОЗДАТЬ ИНДЕКС имя_индекса ДЛЯ flights (departure_time УБЫВ, invisible) ГДЕ invisible=ИСТИНА

Michael
22.11.2016
08:44:41

I
22.11.2016
08:45:03
да я код на 1с написал - и я не стесняюсь!)
но в 1с я не видел индексы, btw

Антон
22.11.2016
08:46:40
ну вообще да, больно
Index Scan using index_visits_on_created_at on visits Index Scan using index_visits_on_created_at on visits
не поможет индекс

Google

Alex
22.11.2016
08:50:35
а эластика поможет?

I
22.11.2016
08:50:45
а какой индекс именно?

Rafkat
22.11.2016
09:06:55
https://telegram.me/pgsql

Антон
22.11.2016
09:30:58

Alex
22.11.2016
09:31:10

Антон
22.11.2016
09:31:26
для поиска, а не для сортировки, во первых
во вторых, эластик использует субд

Rafkat
22.11.2016
09:32:13
Пускают джунов в сложный прект
А потом за голову хватаются

Антон
22.11.2016
09:32:29

Alex
22.11.2016
09:32:40

Alex
22.11.2016
09:32:49
"джун похапэ 30к гогого"

Adamtsov
22.11.2016
09:32:54
эластик субд только для индексации использует

Антон
22.11.2016
09:33:26

Adamtsov
22.11.2016
09:33:32
искать умеет
сортировать тоже умеет

Rafkat
22.11.2016
09:33:44

Антон
22.11.2016
09:33:44
по индексам?

Adamtsov
22.11.2016
09:34:08
смотря какой мапинг будет

Google

Rafkat
22.11.2016
09:34:23
В эластике можно обратный поиск юзать

I
22.11.2016
09:34:34
во, индекс заработал)
хуево, но заработал)

Антон
22.11.2016
09:34:35
сортировать тоже умеет
я не думаю что он сможет нормально сортировать
да и размеры индексов по полю с датой будут огого какие

Rafkat
22.11.2016
09:34:48
Короче эластик можно юзать, но задрачмваться надо

Adamtsov
22.11.2016
09:35:13
ну как минимум нагрузку на бд снимет

Rafkat
22.11.2016
09:36:08
Проблемы с костом?
Сделай вакуум и посмотри

Michael
22.11.2016
09:36:41

Admin
ERROR: S client not available

Rafkat
22.11.2016
09:37:13
То есть сравни explain

Igor
22.11.2016
09:39:17
записей то нифига нет
почему так медленно?
может стоит нормализовать таблицу чутка?

Rafkat
22.11.2016
09:39:58
EXPLAIN (ANALYZE,BUFFERS)
Попробуй так
Вообще надо смотреть запросы через psql

Igor
22.11.2016
09:40:46
add_index "flights", ["invisible"], name: "index_flights_on_invisible", unique: true, using: :btree


yopp
22.11.2016
09:40:49
ну в схеме
add_index "flights", ["arrival_time"], name: "index_flights_on_arrival_time", using: :btree
add_index "flights", ["available"], name: "index_flights_on_available", using: :btree
add_index "flights", ["capacity_basic_volume"], name: "index_flights_on_capacity_basic_volume", using: :btree
add_index "flights", ["capacity_basic_weight"], name: "index_flights_on_capacity_basic_weight", using: :btree
add_index "flights", ["capacity_estimated_volume"], name: "index_flights_on_capacity_estimated_volume", using: :btree
add_index "flights", ["capacity_estimated_weight"], name: "index_flights_on_capacity_estimated_weight", using: :btree
add_index "flights", ["departure_time"], name: "index_flights_on_departure_time", using: :btree
add_index "flights", ["destination_id"], name: "index_flights_on_destination_id", using: :btree
add_index "flights", ["origin_id", "airline", "flight_number", "departure_time"], name: "index_departure", unique: true, using: :btree
add_index "flights", ["origin_id"], name: "index_flights_on_origin_id", using: :btree
add_index "flights", ["slug"], name: "index_flights_on_slug", unique: true, using: :btree
add_index "flights", ["invisible"], name: "index_flights_on_invisible", using: :btree
мрак


Igor
22.11.2016
09:40:54
что это за индекс?
зачем invisible делать unique?

Google

Rafkat
22.11.2016
09:41:58
https://m.habrahabr.ru/post/203320/
Неплохая серия статей

Антон
22.11.2016
09:44:06
ну как минимум нагрузку на бд снимет
это зависит
у тебя система может остановится если ты пишешь в основную базу а эластик параллельно индексы строит
пстроение индеков тяжелая задача для эластика
все может встать колом

Adamtsov
22.11.2016
09:44:52
если делать переиндексацию то да, очень долго

Антон
22.11.2016
09:45:02
не переиндексацию
ну к примеру чистный инсерт 1мс инстерт с эластиком может быть 200
20 инсертов в минуту на 1t.nano не заметно, 200 инсертов - все падает

Adamtsov
22.11.2016
09:46:42
закидывать это в sidekiq, использую групировку

Антон
22.11.2016
09:47:08
да речеь не в том как это потимизировать
а в том что решая одну проблему - создаешь другую
и это не снимет нагрузку как минимум, некуда не девается нагрузку
она просто перераспределяется

Alex
22.11.2016
09:47:56
база плохо масштабируется, разве это плохо что ты снимешь с нее часть нагрузки?

Антон
22.11.2016
09:48:17

Alex
22.11.2016
09:49:58
Шард это когда неправильно выбранный ключ и у тебя многие дни геммороя.
??

Антон
22.11.2016
09:50:30
кароче по датам лучше вообще не сортировать :)

Alex
22.11.2016
09:50:37