
Alex
24.07.2018
08:21:20

ко?TEXHIK
24.07.2018
08:21:23
они же уроды шерстят чат и ссылки на другие чаты ищут небось

Alex
24.07.2018
08:21:58
а какая разница тебе будет, если скрыть этот хедер, боты же не спамят ничего

Google

Artem
24.07.2018
08:22:27

Alex
24.07.2018
08:22:44
от ботов в любом случае не избавиться до появления ИИ)

ко?TEXHIK
24.07.2018
08:23:14
они не должны тут сидеть и иметь возможность отрывать ссылки на другие чаты
в этом суть. чтоб у этих уродов база ссылок не росла

Alex
24.07.2018
08:23:54

ко?TEXHIK
24.07.2018
08:24:43

Jim
24.07.2018
08:40:01
я думаю саппорт телеги пинать лучше

Igor
24.07.2018
09:40:51
Подскажите, пожалуйста. Есть таблица, в которую пишется и удаляется много записей (транзакционная очередь), сама таблица почти пустая, но её toast стал 300 ГБ. Может ли это место освободить vacuum full? Если может, то он заблокирует таблицу на длительное время? Если так, то может, например, pg_repack помочь освободить это место не блокируя таблицу надолго?

Andrei
24.07.2018
09:57:31
вакуум фулл освободит
т.к. по сути создаст новую таблицу
но вам нужно на будущее разобраться с настройками автовакуума

Ketzal
24.07.2018
09:58:13
Vacuum full да, все поперелочит и освободит место. Лучше pg repack, он отдельно вытащит актуальные данные в другую таблицу, и перименует её, взяв короткий лок

Google

Andrei
24.07.2018
09:58:19
выставить более агрессивные

Nikita
24.07.2018
10:06:00
Есть, вот такой юзкейс: несколько параллельных транзакций которые потенциально модифицируют одно и то же, но при этом гарантируется что только одна применится. Можно ли как-то настроить постгрес чтобы эти транзакции не лочили ничего?

Ilia
24.07.2018
10:07:40
нет
Но я не уверен
Так что ты поищи обязательно

Alexander
24.07.2018
10:10:40
Добрый день!
использую базу данных на дроплете digital ocean
база на ssd, 64 Гб ОЗУ, 16 ядер
в пик нагрузки база упирается в IOPS (по мониторингу хостинга утилизация по IOPS до 160%), при этом память используется на 2-3 ГБ из 64 возможных
сама база занимает 10 Гб
Подскажите, пожалуста, какие параметры необходимы для более эффективного использхования памяти и настройк IO диска
спасибо!

Sergey
24.07.2018
10:12:27

Darafei
24.07.2018
10:17:50

Alexander
24.07.2018
10:19:43

Darafei
24.07.2018
10:20:58
а что такое 160% IOPS? ведь иопсы - это абсолютное значение
а насколько важна эта база?

Yaroslav
24.07.2018
10:22:17

Nikita
24.07.2018
10:33:31

Yaroslav
24.07.2018
10:35:51
Чтобы параллельно выполнять несколько транзакций
Ну так lock-и то используются для того, чтобы их результат был адекватным.
Кстати, почему у вас высокая конкуренция за один ресурс (иначе это вряд ли было бы проблемой)?
Может, модель как-то изменить?

Nikita
24.07.2018
10:37:35

Yaroslav
24.07.2018
10:39:08

Nikita
24.07.2018
10:41:11

Yaroslav
24.07.2018
10:42:39
Если блочатся, значит локи-то почти наверняка нужны (иначе у вас получаются lost updates... это как минимум).
> консенсус для распределенной системы
А подробнее?

Google

Nikita
24.07.2018
10:44:05
Соответственно конфликтов и проблем быть не должно
Можно сделать конечно несколько реплик но их надо синхронизировать, чего хотелось бы избежать

Ilia
24.07.2018
10:44:55

Nikita
24.07.2018
10:46:03

Ilia
24.07.2018
10:46:38
Ну ещё раз, думай глубже...

Yaroslav
24.07.2018
10:46:48

Nikita
24.07.2018
10:47:51

Yaroslav
24.07.2018
10:51:53


Nikita
24.07.2018
10:58:41
Такс, сейчас попробую пояснить, заранее извиняюсь за косноязычие. Есть пиры, это грубо говоря сервисы которые применяют команды пользователя. Эти команды в каком-то месте собираются, и генерируется транзакция. Она рассылается всем пирам. Сами команды это грубо говоря изменения состояния. Состояние хранится в постгресе. Как только пир получает транзакцию, ему ее нужно провалидировать. Валидация заключается в применении транзакции к базе. Если транзакция успешно применилась - она валидна и пир за нее голосует. Как только какая-либо из транзакций собрала определенное количество голосов, ее можно закоммитить в базу. Это считается одним раундом. В следующем раунде все повторяется. Так вот, есть желание чтобы в одном раунде было несколько транзакций, которые одновременно применяются и за них идут голоса. В итоге закоммититься должна только одна, которая быстрее собрала голоса. Проблема в том что несколько транзакций в одном раунде могут менять одно и тоже, что вызывает блокировку одной из них. Хочется как-то избавиться от этой блокировки.
Описал, как смог, если что непонятно спрашивайте
Ах да, под применением подразумевается исполнение всех квери, без коммита в конце


Nikita
24.07.2018
11:00:09
Конкретно сам коммит идёт после голосования

Denis
24.07.2018
11:00:36
о, это же типа блокчейн получается?
сорри за офтоп

Nikita
24.07.2018
11:01:31
Он и есть, только консенсус не proof of smth, а голосование

Darafei
24.07.2018
11:02:42


Yaroslav
24.07.2018
11:02:56
Такс, сейчас попробую пояснить, заранее извиняюсь за косноязычие. Есть пиры, это грубо говоря сервисы которые применяют команды пользователя. Эти команды в каком-то месте собираются, и генерируется транзакция. Она рассылается всем пирам. Сами команды это грубо говоря изменения состояния. Состояние хранится в постгресе. Как только пир получает транзакцию, ему ее нужно провалидировать. Валидация заключается в применении транзакции к базе. Если транзакция успешно применилась - она валидна и пир за нее голосует. Как только какая-либо из транзакций собрала определенное количество голосов, ее можно закоммитить в базу. Это считается одним раундом. В следующем раунде все повторяется. Так вот, есть желание чтобы в одном раунде было несколько транзакций, которые одновременно применяются и за них идут голоса. В итоге закоммититься должна только одна, которая быстрее собрала голоса. Проблема в том что несколько транзакций в одном раунде могут менять одно и тоже, что вызывает блокировку одной из них. Хочется как-то избавиться от этой блокировки.
> Если транзакция успешно применилась - она валидна и пир за нее голосует.
Вы в курсе, что до COMMIT-а это (теоретически) узнать нельзя?
Да, я знаю, что многие на практике делают вид, что это не так... но в сложных случаях (вроде вашего), это должно быть важно.


Nikita
24.07.2018
11:04:33
Ну поскольку голосование идёт раундами, то я точно знаю что во время раунда состояние не изменится
Поэтому тут в частном случае наверное могу гарантировать

Google

Yaroslav
24.07.2018
11:10:43
Поэтому тут в частном случае наверное могу гарантировать
Технически — не с MVCC (и с не 2PL, конечно). Тут, похоже, нужно было бы иметь несколько обновлённых версий той же записи / потенциальных "историй".
Вообще, то, что вы описываете, напоминает вариант optimitstic concurrency control... и из широко используемых СУБД его не поддерживает почти никто.
Может быть, у вас получится его как-то имитировать?


Nikita
24.07.2018
11:17:37
Технически — не с MVCC (и с не 2PL, конечно). Тут, похоже, нужно было бы иметь несколько обновлённых версий той же записи / потенциальных "историй".
Вообще, то, что вы описываете, напоминает вариант optimitstic concurrency control... и из широко используемых СУБД его не поддерживает почти никто.
Может быть, у вас получится его как-то имитировать?
Да, про несколько я записей я примерно об этом и думал. То есть с технической части это понятно как делается, просто раз уже используется постгрес, хотелось узнать можно ли его подогнать под это дело. Видимо просто так нет, спасибо, будем думать.

Gennady
24.07.2018
11:28:46

Alexander
24.07.2018
11:29:34

Denis
24.07.2018
11:30:53

Nikita
24.07.2018
11:32:04

Mike Chuguniy
24.07.2018
11:36:12

Alexander
24.07.2018
11:36:34

Admin
ERROR: S client not available

The
24.07.2018
11:50:06
Ребятки, подскажите по этим таблицам:
CREATE TABLE feature (
id BIGSERIAL PRIMARY KEY,
code TEXT NOT NULL,
name TEXT NOT NULL,
description TEXT NOT NULL
);
CREATE INDEX feature_code_idx ON feature USING hash(code);
CREATE TABLE feature_data (
feature_id BIGINT PRIMARY KEY REFERENCES feature(id),
values JSONB NOT NULL
);
Вопросов несколько:
1. Хэш индекс ок вешать на code? Сортировок не будет по этому полю, будет только прямая выборка WHERE code = $1
2. Имеет ли смысл делать PRIMARY KEY REFERENCES? Или убрать с него PRIMARY KEY, и повесить хеш индекс, он будет в джойне участвовать?
3. Или может вообще слить две таблицы в одну?
Речь идет о таблице с характеристиками товаров, в значение values будут попадать все значение для определенной характеристики.


Darafei
24.07.2018
11:52:55
1. хеш не надо, btree лучше
2-3. primary key references - это 1:1, то есть по сути одна таблица. такое стоит делать только если тебе мешают слить в одну таблицу это всё какие-то другие характеристики базы.

The
24.07.2018
11:55:26
короче, лучше слить. а хеш индекс почему не надо? или даже так, может есть под ругой какой-то материал по хеш индексам в постгрес, чтобы понять когда надо, когда не надо.

Darafei
24.07.2018
11:56:01
https://www.postgresql.org/docs/9.6/static/indexes-types.html
Hash index operations are not presently WAL-logged, so hash indexes might need to be rebuilt with REINDEX after a database crash if there were unwritten changes. Also, changes to hash indexes are not replicated over streaming or file-based replication after the initial base backup, so they give wrong answers to queries that subsequently use them. For these reasons, hash index use is presently discouraged.
их надо использовать никогда

The
24.07.2018
11:57:19
у меня 10, а там такой таблички нет)
это единственная причина?

Darafei
24.07.2018
12:00:04
я помню, что по бенчмаркам они то на то с btree, а умеют меньше

Google

Tolya
24.07.2018
12:02:33
хеш имеет смысл строить (если у вас версия 10+) по полям с уникальными значениями, потому что в этом случае они
- меньше чем btree займут места на диске
- быстрее доступ
если значения не особо уникальные, то хеш лучше не использовать
и мы пока еще не до конца для себя выяснили его влияние на операции изменения данных

Yaroslav
24.07.2018
12:05:10

Gennady
24.07.2018
12:05:36

Yaroslav
24.07.2018
12:06:02

Tolya
24.07.2018
12:06:25
Да, использовали в OLAP базе и получили несколько часов профит на аггрегациях
http://rhaas.blogspot.com/2017/09/postgresqls-hash-indexes-are-now-cool.html начали со статьи этой изучение
из минусов пока есть подозрения, что hash замедляет bulk-вставки по сравнению с btree, но на разных тестах выходило по разному
так как тестирование было не в вакууме, пока никак не подтвердили это ?

Yaroslav
24.07.2018
12:12:18

Tolya
24.07.2018
12:12:29
Подскажите, плиз, кто-то реализовывал партиционирование по служебному полю (дата последнего изменения)? На сколько это оправдано? Какие есть минусы? Лучше ли делать это по бизнесовым датам (которые +- не кочуют по партициям)? Допустим, версия PostgreSQL 11
Основная идея со служебным полем, чтобы в некоторых партициях были самые запрашиваемые данные, а другие разносить на медленные диски

The
24.07.2018
12:13:50

Tolya
24.07.2018
12:14:08

The
24.07.2018
12:14:25

Yaroslav
24.07.2018
12:14:40

The
24.07.2018
12:15:00

Darafei
24.07.2018
12:15:45

The
24.07.2018
12:15:58
так я вроде это и сделал, не?
ну кроме индекса
чуть позже его пропишу