
Макс
23.08.2017
19:09:55

Bandikoot
23.08.2017
19:10:07

Алексей
23.08.2017
19:10:32
да да. я понимаю. поэтому и предлагаю ассемблер. уж если городить то сразу везде.

Макс
23.08.2017
19:10:48

Google

Сергей
23.08.2017
19:10:52
Сразу оптимально чтобы

Макс
23.08.2017
19:13:03
А если у организации есть всякая сложная специфика с производством под конкретный запрос. То почему бы не сделать свой идеальный велосипед? ;)

Алексей
23.08.2017
19:13:23

Ilya
23.08.2017
19:15:35

Макс
23.08.2017
19:16:05
Тем более, что сдвиг платформы. 1С надоела, Web и мобилки - модно. Что тут думать. Надо делать )
Надо брать ОроПлатформ )

Evgeniy
23.08.2017
19:22:20
Всем привет. Ребят, столкнулся с такой ошибкой. Exception 'yii\db\Exception' with message 'SQLSTATE[08006] [7] fe_sendauth: no password supplied'
Гугл ничего не говорит((

Ilya
23.08.2017
19:25:46
только сегодня и только для вас. друг просил помочь. вкладка в браузере была открыта

Evgeniy
23.08.2017
19:26:21

Ilya
23.08.2017
19:26:34
08006 connection_failure

Evgeniy
23.08.2017
19:27:37

Google

Ilya
23.08.2017
19:27:45
у нас было другое приключение. как этот SQLSTATE смотреть в libpq в Сях

Evgeniy
23.08.2017
19:28:16

Ilya
23.08.2017
19:29:04
хз. я не пользуюсь обертками фреймворков. либо редко.
это коннект. либо порт не тот. либо еще что

Evgeniy
23.08.2017
19:29:26

Arthur
23.08.2017
19:32:38

Ilya
23.08.2017
19:34:10
не факт. это именно коннект. иначе бы вылезла ошибка по авторизации. в перечне есть
хотя мой ругаицо. клиенд

Evgeniy
23.08.2017
19:36:02

Arthur
23.08.2017
19:37:30
смотря, что вам нужно, если пароль не нужен, то в pg_hba.conf нужно указать строку типа:
# IPv4 local connections:
host all all 0.0.0.0/0 trust

Ilya
23.08.2017
19:37:51
дадада и порт наружу и нам всем сказать

Evgeniy
23.08.2017
19:41:54

Fike
23.08.2017
20:40:23

Aleksander
23.08.2017
20:42:08
изучу этот вопрос

Fike
23.08.2017
20:44:07
Да черт его знает, просто пинать ее за collection-level lock было модно черт знает в каком году. "For most read and write operations, WiredTiger uses optimistic concurrency control. WiredTiger uses only intent locks at the global, database and collection levels. When the storage engine detects conflicts between two operations, one will incur a write conflict causing MongoDB to transparently retry that operation." - видимо оно, https://docs.mongodb.com/manual/faq/concurrency/
(чуть выше на той же странице пишется, что wired tiger использует document-level lock)

Aleksander
23.08.2017
20:45:11

Pavel
23.08.2017
20:46:03
А где он быстрый?

Google

Aleksander
23.08.2017
20:46:25
В пг быстрее
Намного
делал лимит оффсет с записи номер 24 050 000 по запись с 24 051 000 - около 10 минут
если не больше
тоже самое в пг - это секунды

Pavel
23.08.2017
20:49:07
А длина строки в пг какая в таблице была?
Выглядит космически как-то

Fike
23.08.2017
20:49:25
не то чтобы я защищаю монгу, но где вы собрались получать двадцатичетырехтысячную страницу?

Pavel
23.08.2017
20:50:37
24 050 000 — он же прошерстит все эти строки, пока дойдёт до нужной

Fike
23.08.2017
20:50:51
да, а где это реально применять вообще?

Aleksander
23.08.2017
20:50:58

Fike
23.08.2017
20:51:15
у вас есть пользователи, которые прочитали предыдущие двадцать четыре тысячи страниц?

Pavel
23.08.2017
20:51:20

Aleksander
23.08.2017
20:52:40
да, а где это реально применять вообще?
Применение у нас это список с паджинацией. Но реально никто до той страницы не доходит. Пришлось применить такой лимит оффсет, когда мигрировал с монги на пг
Не знаю, как в пг реализованно, может он хранит данные пачками, и высчитывает номер пачки и уже от нее считает лимит оффсет
а не шерстит все записи
Я, конечно, не разработчик баз данных, но, наверное делал бы как-то так

Pavel
23.08.2017
20:56:00
120 байт на строку без учёта оверхеда, т.е. примерно по 65 записей на страницу, т.е. hit'ов было примерно ~370000
Ну в целом не очень долго должно было быть, да, если на SSD крутилось всё

Aleksander
23.08.2017
20:56:36
не hdd

Google

Pavel
23.08.2017
20:56:39

Aleksander
23.08.2017
20:57:48
где-то видел статью, вроде на хабре - в аннотации было написано, что-то вроде пг космос, у него быстрый лимит оффсет и какие-то замеры далее
надо найти

Ildar
23.08.2017
21:34:30
По идее если есть индекс + сортировка, то можно было бы использовать индекс для выбора страниц (bitmap scan), чтобы не шерстить весь хип. Не знаю, есть ли такое в пг. Можно попробовать
*Даже не bitmap, а обычный индекс скан

Pavel
23.08.2017
21:43:03
Да можно в принципе, да. Неприятности начинаются при фильтрации какой-нибудь.

Admin
ERROR: S client not available

Ildar
23.08.2017
21:54:42
пожалуй да. Но если использовать покрывающий индекс из pgpro, то это тоже можно обойти (правда ценой пожирневшего индекса)

Darafei
23.08.2017
22:00:28
кстати, а чем глобально покрывающий индекс из pgpro отличается от составного индекса по тем же полям?

Ildar
23.08.2017
22:16:05
я не знаю наверняка, как он устроен (@alubennikova_pgpro возможно поделится мудростью), но я так понимаю, что он должен быть компактнее, т.к. неключевые поля хранятся в листьях, эти поля не участвуют в поиске ключа (меньше операций сравнения), а также не мешают сделать unique констрейнт


Anufant
24.08.2017
07:01:10
Привет.
Подскажите, есть таблица-лог, в ней есть поля условно object_type, object_id,create_time. Таблица довольно большая, пара сотен миллионов записей. За месяц примерно 5 млн. Хочется быстро выбирать из таблицы записи определенного типа и с определенными object_id за, допустим, месяц. На таблице уже есть индекс по create_time Но он работает не очень быстро. Важно, что примерно 90% записей имеют type = 'type1', который меня не сильно интересует. Я создал индекс по ( object_type, create_time ) where object_type <> 'type1'. Пытаюсь сделать запрос по object_type и create_time, но в плане все равно используется медленный индекс только по create_time. Если удалить индекс по create_time, то запрос идёт по нужному мне индексу и гораздо быстрее.
Вопрос: почему так и можно ли на это повлиять как-то?


Anton [Mgn, az09@osm]
24.08.2017
07:54:49
Привет.
Подскажите, есть таблица-лог, в ней есть поля условно object_type, object_id,create_time. Таблица довольно большая, пара сотен миллионов записей. За месяц примерно 5 млн. Хочется быстро выбирать из таблицы записи определенного типа и с определенными object_id за, допустим, месяц. На таблице уже есть индекс по create_time Но он работает не очень быстро. Важно, что примерно 90% записей имеют type = 'type1', который меня не сильно интересует. Я создал индекс по ( object_type, create_time ) where object_type <> 'type1'. Пытаюсь сделать запрос по object_type и create_time, но в плане все равно используется медленный индекс только по create_time. Если удалить индекс по create_time, то запрос идёт по нужному мне индексу и гораздо быстрее.
Вопрос: почему так и можно ли на это повлиять как-то?
Партиционирование?


Darafei
24.08.2017
07:56:39
Привет.
Подскажите, есть таблица-лог, в ней есть поля условно object_type, object_id,create_time. Таблица довольно большая, пара сотен миллионов записей. За месяц примерно 5 млн. Хочется быстро выбирать из таблицы записи определенного типа и с определенными object_id за, допустим, месяц. На таблице уже есть индекс по create_time Но он работает не очень быстро. Важно, что примерно 90% записей имеют type = 'type1', который меня не сильно интересует. Я создал индекс по ( object_type, create_time ) where object_type <> 'type1'. Пытаюсь сделать запрос по object_type и create_time, но в плане все равно используется медленный индекс только по create_time. Если удалить индекс по create_time, то запрос идёт по нужному мне индексу и гораздо быстрее.
Вопрос: почему так и можно ли на это повлиять как-то?
analyze таблице делали? :)


Ilya
24.08.2017
08:04:47
Привет.
Подскажите, есть таблица-лог, в ней есть поля условно object_type, object_id,create_time. Таблица довольно большая, пара сотен миллионов записей. За месяц примерно 5 млн. Хочется быстро выбирать из таблицы записи определенного типа и с определенными object_id за, допустим, месяц. На таблице уже есть индекс по create_time Но он работает не очень быстро. Важно, что примерно 90% записей имеют type = 'type1', который меня не сильно интересует. Я создал индекс по ( object_type, create_time ) where object_type <> 'type1'. Пытаюсь сделать запрос по object_type и create_time, но в плане все равно используется медленный индекс только по create_time. Если удалить индекс по create_time, то запрос идёт по нужному мне индексу и гораздо быстрее.
Вопрос: почему так и можно ли на это повлиять как-то?
Индекс по типу смысла не имеет. У него селективность получается как его нет.


Anufant
24.08.2017
08:47:19

Ilya
24.08.2017
09:02:17
ну вот если оно внего полезет то сначала будет перебирать адову тучу данных одного типа а потом уже выбирать время.
причем в поиск загребется и то где время не нужное.
индекс по типу в таких случаях не имеет смысла

Google

Ilya
24.08.2017
09:03:45
один хрен ты тащиш временными интервалами и уже из ограниенного набора выгребаешь данные нужного типа. так быстрее
за тебя постгрес и решил как ему быстрее. правильно решил
а индекс тип-время можешь дропнуть. только табличку замедляешь

Darafei
24.08.2017
09:05:03
индекс время-тип пробовали? :)

Ilya
24.08.2017
09:07:13
а зачем?
у тебя вторая половина его не будет работать

Anton [Mgn, az09@osm]
24.08.2017
09:07:30

Ilya
24.08.2017
09:07:50
в случае лога нао по времени партицировать )
он один хрен будет интервалами тащить )

Anton [Mgn, az09@osm]
24.08.2017
09:09:59
Короче вариантов развития событий несколько и без стакана^wдеталей не разберёшься )

Ildar
24.08.2017
09:10:18

Ilya
24.08.2017
09:11:32

Ildar
24.08.2017
09:12:51
ну поскольку у аффтара это лог, то время скорее всего будет присутствовать в запросе почти всегда

Ilya
24.08.2017
09:13:59
ну вот и я про то. у него появляется ограничение выборки
https://www.postgresql.org/docs/9.6/static/row-estimation-examples.html
чо там мануал говорит
selectivity = (1 + (1000 - bucket[2].min)/(bucket[2].max - bucket[2].min))/num_buckets
= (1 + (1000 - 993)/(1997 - 993))/10
= 0.100697