
Maksim
27.06.2017
07:31:42
false типа?
угу, правда waiting - это флаг, что воркер ожидает освобождения блокировки

Mike Chuguniy
27.06.2017
07:36:34

Dmitry
27.06.2017
07:39:43
А, там виртулка какая-то. Тогда хз.

Google

Артур
27.06.2017
07:58:14
UUID против BIGINT - замерял кто нибудь скорость?
Нашел только такую статью.
Но она 2012 года
http://softblog.violet-tape.ru/2012/06/06/guid-as-pk/
Может что нибудь изменилось

Alexander
27.06.2017
08:05:43
а зачем вам uuid? стоит начать с этого
ибо если он будет первичным ключиком у множества таблиц... а потом внешние ключи-уиды поползут по всей базе... то нет, нет и еще раз нет.
очень много весит все это, с индексами даже страшно представлять

Артур
27.06.2017
08:07:03
в качестве PK таблицы лицевых интернет счетов.
Или сделать отдельную колонку просто?

Fike
27.06.2017
08:07:54

raksita
27.06.2017
08:08:34

Alexander
27.06.2017
08:09:38
128 бит против 64
арифметика простая. Представьте, к примеру, 8 внешних включей уидов. И 8 внешних ключей интов. И миллионы записей во всех связанных таблицах

Denis
27.06.2017
08:09:47

Google

Сергей
27.06.2017
08:10:26
Поиск как был log(n) так и останется

lemi
27.06.2017
08:10:41
Только размер индекса измениться

Alexander
27.06.2017
08:10:44
неплохой повод устроить холивар)

Сергей
27.06.2017
08:10:51
Константа немного вырастет просто. Возможно несущественно

lemi
27.06.2017
08:11:06
если и тот и тот в кэш помещаются

Fike
27.06.2017
08:11:07

Mike Chuguniy
27.06.2017
08:11:41
Не-не-не!
https://postgrespro.ru/docs/postgrespro/9.6/datatype-uuid
Тыц01
В Postgres Pro встроены функции хранения и сравнения идентификаторов UUID, но нет внутренней функции генерирования UUID, потому что не существует какого-то единственного алгоритма, подходящего для всех приложений.
Следствие тыц01
Сгенерировать UUID можно с помощью дополнительного модуля uuid-ossp, в котором реализованы несколько стандартных алгоритмов, а можно воспользоваться модулем pgcrypto, где тоже есть функция генерирования случайных UUID. Кроме того, можно сделать это в клиентском приложении или в другой библиотеке, подключённой на стороне сервера.

Айтуар
27.06.2017
08:12:15

Denis
27.06.2017
08:12:18
Количество слоёв в индексе и правда log, но вот сравнивать нужно в два раза большие по длине в индексе значения. Log это про сравнение с сексканом. Или я не прав?

Mike Chuguniy
27.06.2017
08:13:16
Т.е. налиТСо дополнительное рукоблудие в плане установки контрибов (а оные контрибы не всегда ставятся вместе с сервером) и последующего создания соответствующего EXTENTION-а в каждой базе, где этот UUID нужен.

Fike
27.06.2017
08:14:15
Вы правда думаете, что боттлнек будет из-за того, что процессор будет сравнивать в два раза большие значения?
Типа загрузить один регистр - нормально, два - уже медленно

Сергей
27.06.2017
08:15:18
Регистры же самые медленные

Fike
27.06.2017
08:15:23
Фрагментация индекса пока выглядит куда страшнее

Denis
27.06.2017
08:17:02
А мне кажется, что не в регистрах дело, а в том, что с диска придётся считать в два раза больше данных. Не зависимо индекс это или таблица

Fike
27.06.2017
08:18:38
Сколько бит занимает целиком запись в таблице? Лишние 64 бит будут сильно влиять на производительность? Серьезно?
Давайте тогда начнем с того, что любой текст перед отправкой в базу будем гзипать
А то чего он столько занимает, а мы за диск платим

Айтуар
27.06.2017
08:20:05

Fike
27.06.2017
08:20:27
Какая разница? Читать-то надо

Google

Denis
27.06.2017
08:20:59
Да, до них же надо добраться, прочитав другие кортежи. Я это к тому, что при считывании из нескольких миллионов строк uuid и guid разница становится очень заметна. Проверьте

Fike
27.06.2017
08:21:51
Зачем вы их храните строками

Denis
27.06.2017
08:22:09
Кого, простите? Строки в таблице?

Fike
27.06.2017
08:22:12
Это же просто шестнадцать байт
Uuid

Denis
27.06.2017
08:23:46
Вы меня не поняли. Возьмите создайте две таблице на 1кк каждая с одним столбцов. В одной будет uuid, в другой bigint. И сравните скорость запросов даже по равенству первичному ключу

Fike
27.06.2017
08:24:27
В реальном ворклоаде никто не выбирает просто uuid и просто бигинты

Denis
27.06.2017
08:25:02
Не понял вас. В плане не выбирают?

Fike
27.06.2017
08:25:38
В плане в реальном мире никогда нет таблицы из одних первичных ключей
Запись всегда весит в разы больше первичного ключа

Denis
27.06.2017
08:26:04
Но есть запросы по покрывающим индексам

Fike
27.06.2017
08:27:07
Относительные значения тоже как правило ни на что не влияют

Fike
27.06.2017
08:27:37
Потому что разницы между одной и двумя миллисекундами нет
И шансы того, что боттлнек будет именно в uuid - они невелики

Darafei
27.06.2017
08:28:09
У uuid есть приятные свойства, позволяющие не хранить, переносить и синхронизировать счетчики в больших системах

Ildar
27.06.2017
08:28:12
имхо основной профит uuid-ов в том, что их можно генерировать в разных несвязанных базах и чтобы они при этом не пересекались. Если база единственная, то смысла их использовать в общем-то немного

Denis
27.06.2017
08:29:49
Я просто говорю, что uuid медленнее bigint и на больших таблицах, где отбор сложнее, чем равенство первичному ключу - это сказывается. Сильно

Fike
27.06.2017
08:30:24
Отбор сложнее будет очевидно происходить по другим столбцам

Darafei
27.06.2017
08:31:06
"нам четные ууиды, пожалуйста"

Fike
27.06.2017
08:32:14
Зачем? Ну это нереальные все кейсы

Google

Denis
27.06.2017
08:32:44
Нам uuid,которые встречаются во второй таблице и не встречаются в третьей, которых атрибут такой-то. Вполне жизненный кейс

Darafei
27.06.2017
08:33:17
Так у ууидов же в постгресе abbreviated key compare, нет?
Он сравнивается префиксом как бигинтом вначале

Denis
27.06.2017
08:34:20
Но за счёт длины сравнивается дольше, так как поднимать с диска в два раза больше. Я не прав?
И поднимать придётся не один uuid

Fike
27.06.2017
08:34:55

Denis
27.06.2017
08:38:03

Айтуар
27.06.2017
08:39:59

Alexander
27.06.2017
08:40:51
я вам говорю, это боль. Особенно в условиях ограниченного дискового пространства

Admin
ERROR: S client not available

Артур
27.06.2017
08:49:06
подитог: BIGSERIAL
UIID только для наследуемых таблиц

blkmrkt
27.06.2017
08:53:19
не сервере пг 52% места занято и поэтому не работает вакум фулл. Можно как-то сделать фулл вакум не увеличивая место на диске?

Dmitriy
27.06.2017
08:57:59

blkmrkt
27.06.2017
08:58:36

Darafei
27.06.2017
08:58:52

Айтуар
27.06.2017
08:59:03

blkmrkt
27.06.2017
08:59:24

Айтуар
27.06.2017
08:59:58

blkmrkt
27.06.2017
09:00:02

Google

Mike Chuguniy
27.06.2017
09:00:11

Айтуар
27.06.2017
09:00:25

blkmrkt
27.06.2017
09:00:31

Mike Chuguniy
27.06.2017
09:02:46
угу так можно, но думаю не остановит ли это автовакум однажды?
Не знаю, но так "развлекались" ребята на одном проекте... ПАтАмуШтА "одарённые" начальнЕГЕ "успешно" сокращали затраты на инфраструктуру. Пока этого начальнЕГа не ткнули носом: а завтра (грубо утрируя) усё! Проект помре, пАтАмуШтА дисков нет и неизвестно.

blkmrkt
27.06.2017
09:05:08
есть вариант компрессию еще включить думаю

Mike Chuguniy
27.06.2017
09:07:56

Sergey
27.06.2017
09:13:01

Артур
27.06.2017
09:14:41
Странно
Очему меньше то?
Я думал от том что больше, вопрос размера этого "больше".
Но судя по стате все в триггеры надо пихать )

Mike Chuguniy
27.06.2017
09:15:54

Айтуар
27.06.2017
09:16:16

Sergey
27.06.2017
09:19:13
Кратенько - по 100 секунд pgbench -c 20 -j 4 -P 1 -T 100 postgres
Очему меньше то?
TPS (transactions per second) с триггером меньше, т.е. скорость работы меньше, запросы выполняются дольше.

Артур
27.06.2017
09:20:36
ааа ? тупанул
тогда все уложилось в голову

Mike Chuguniy
27.06.2017
09:21:23

Артур
27.06.2017
09:21:30
ато у меня крыша съезжать медленно стала, пытаясь понять: "КАК?"

Mike Chuguniy
27.06.2017
09:22:42

Артур
27.06.2017
09:31:39
@SergeyPpro спасибо за бенчмарк