
Evgeniy
02.05.2018
20:39:33
можно конечно тыкнуть два теста, один олтп, второй олап
чтобы показать проблемы фдв, но про них вроде и так знают, просто "не горело"
опять же с патчами на фдв можно попробовать показать что они ппц нужны

Stas
02.05.2018
20:40:10

Evgeniy
02.05.2018
20:40:44
и вот тут пул книжника!

Google

Evgeniy
02.05.2018
20:40:46
ггг

Stas
02.05.2018
20:40:51

Evgeniy
02.05.2018
20:41:33
энивей тебе придется защищать применимость клок-сиай а не другой штуки и на самом основном профиле нагрузки

Stas
02.05.2018
20:41:59

Evgeniy
02.05.2018
20:42:05
так что тесты делать надо и такие и такие, главное не преподносить как раньше
"на трех нодах всё хуже чем на одной"
шардить надо

Stas
02.05.2018
20:42:07

Evgeniy
02.05.2018
20:42:17
ну как же
http://cs-www.cs.yale.edu/homes/dna/pubs/displaypubs.cgi

Stas
02.05.2018
20:43:59
ну как же
ну Calvin и родственные штуки они очень далеки от модели постгреса, там переупорядочиваются транзакции перед тем как попасть в базу и тп

Evgeniy
02.05.2018
20:44:59
ну это да

Stas
02.05.2018
20:45:04
есть еще кучка вариантов с отдельной нодой для снапшотов типо PostgresXL или Greenplum (у них не отдельная правда, а координатор к которому ты подключен)
но оно совсем не про OLTP
я скорее боюсь, что могут времени физического испугаться

Google

Evgeniy
02.05.2018
20:51:34
я так понимаю что если не ждать, то можно только оптимистично выполняться и делать речек
но если большинство транзакций коммитится, то уж лучше ждать, чем цпу гонять
так что да, надо отдельно тестить перфоманс на разном кол-ве горячих ключей
http://cs-www.cs.yale.edu/homes/dna/papers/rethink-mvcc.pdf
слайд номер 9 например, на 11 странице
а как у тебя кстати транзакция узнает что хватит ждать?

Stas
02.05.2018
21:08:58

Evgeniy
02.05.2018
21:09:14
а, то ее разбудят по стандартному флоу?

Stas
02.05.2018
21:12:00

Evgeniy
02.05.2018
21:13:08
я тут недавно читал доки базенки от эпла, фаундейшон диби
там эту проблему круто решили - ты не можешь читать или писать больше мегабайта кажется в одной транзакции
чтобы не лочил лол
будет и снапшот ту олд и снапшот ту лардж

Stas
02.05.2018
21:15:33
а, то ее разбудят по стандартному флоу?
угу. Ждем постгресового коммита обычного. Но там есть тонкий момен, транзакция сначала становится видимой по постгресовомы снапшоту (удалили из procArray), потом ей ставится CSN и только после этого она отпускает локи. Поэтому этот трюк с локом на xid ждет чуть дольше чем до коммита, и этим снимается дырка, когда её закоммитили, но CSN еще не поставили
в вертике 100 апдейтов в секунду

Evgeniy
02.05.2018
21:16:57
и для csn надо сходить на все ноды кластера время узнать, то ждем + раундтрип

Stas
02.05.2018
21:17:21

Evgeniy
02.05.2018
21:17:26

Stas
02.05.2018
21:17:54
то есть кол-во хождений по сети такое же как и при обычном 2PC

Evgeniy
02.05.2018
21:18:32
а за временем надо идти на препаре же да?
и на коммит сказать с каким коммитить

Google

Stas
02.05.2018
21:19:06
ага, всё так

Evgeniy
02.05.2018
21:19:09
тогда между удалением из прокаррей и видимостью какая пауза?
удаляется же небось на коммите а не на препаре

Stas
02.05.2018
21:22:44
тогда между удалением из прокаррей и видимостью какая пауза?
удаление из прокаррей == видимость
пауза там у тех кто ждет InDoubt транзакций. Им нельзя просто подождать пока удалять из ProcArray, им надо ждать пока CSN появится. А появится он чуть позже. Но лок на xid транзакция отпустит еще чуть позже поэтому ок
можно было быть писать CSN под тем же локом, что и удаление из ProcArray, но это слишком
слишком дорого


Evgeniy
02.05.2018
21:24:15
и хочу еще узнать про то куда именно идти за координацией времени csn
если у меня есть ноды А Б и Ц, они пошаржены пополам и не пересекаются
я делаю какую-то работу на А и мне понадобилось сходить на Б за какой-то строкой
иду, а там транзакция которую мне надо ждать, пусть она будет Y
предположим что Y менял данные только на ноде Б и Ц
так вот, на коммите Y пойдет синкать время на А или только на Б и Ц?
и еще, если мы берем лок на чужой xid чтобы проверить когда транзакция закончится
предположим что у нас два читальщика ждали лок на писателя
они смогут одновременно начать работу после коммита писателя
или второму читальщику надо дождаться первого


Stas
02.05.2018
21:28:48


Evgeniy
02.05.2018
21:33:20
потому что в алгоритме ты пишешь что нода экспортирует глобал цсн
чото у меня всё запуталось

Stas
02.05.2018
21:35:13

Evgeniy
02.05.2018
21:35:45
а экспорт снапшот какое время пишем? свое только?

Stas
02.05.2018
21:35:53
а на импорт они сравнивают со своим

Evgeniy
02.05.2018
21:36:17
в пункте три ты просто пишешь
When local transaction imports foreign global snapshot with some GlobalCSN
и это сбивает

Google

Evgeniy
02.05.2018
21:37:16
ну и в пункте один кажется что indoubt это всё что сделало export snapshot
а не только между фазой препаре и коммит
или препаре это и есть у тебя экспорт снапшот

Stas
02.05.2018
21:40:02
indoubt только между препаре и коммит

Evgeniy
02.05.2018
21:40:06
супер
осталось письмо поправить :)

Stas
02.05.2018
21:41:21
просто видимость на CSN так устроена: CSN-ы это счетчик коммитов. Но если ты ведешь такой счетчик, то снапшот это просто значение этого счетчика на момента старта транзакции
без всяких массивов ксидов как сейчас в постгресе

Evgeniy
02.05.2018
21:42:08
меня путает цсн и глобалцсн
когда вижу глобал - читаю как "спросить всех"

Stas
02.05.2018
21:42:17
а
я вставлял глобал, чтоб подчеркнуть, что это время
на случай если обычные CSN-ы закоммитят)

Evgeniy
02.05.2018
21:43:14
то есть в пункте два, что такое each participant

Stas
02.05.2018
21:45:29

Evgeniy
02.05.2018
21:47:48
то есть если Y началась на Б, когда читала на Ц сделала экспорт и импорт снапшота туда. тут все понятно
потом она хочет коммитить на Б, на Ц ничего не меняли, только читали
тут будет какой-то препаре или просто коммит на Б?
или мы даже ничего экспортировать не будем потому что ходили только читать?

Stas
02.05.2018
21:56:52
чет сложно. Может с примером будет понятнее:
on nodeA:
begin;
export global snapshot; -> 3000
--some useful r/w work
prepape transaction 'mytx' returns snapshot; -> 4001
commit prepared 'mytx' with snapshot '4002';
on nodeB:
begin;
import global snapshot '3000';
--some useful r/w work
prepape transaction 'mytx' returns snapshot; -> 4002
commit prepared 'mytx' with snapshot '4002';
on nodeC:
begin;
import global snapshot '3000';
--some useful r/o work
commit; (или abort, без разницы, мы же ничего не писали)
транзакция началась на ноде_А, сходила и поменяла что-то на ноде_B и прочитала что-то с ноды_C

Evgeniy
02.05.2018
21:58:56
а если было только А с rw и С с ro

Stas
02.05.2018
21:58:58
импортим снапшот на все ноды, препарим только там где меняли, собирает CSN с препар (4001, 4002), коммитим с максимыльным 4002

Google

Evgeniy
02.05.2018
21:59:09
на А будет коммит локальный просто?

Stas
02.05.2018
21:59:24

Evgeniy
02.05.2018
22:00:01
вопросов больше нет, спасибо большое
про краш рекавери, нетворк сплит и репликацию потом

Stas
02.05.2018
22:02:35

Evgeniy
02.05.2018
22:04:37
ты можешь написать в хакерс по результатам моих распросов какие-то коммон сценарии работы
чтобы понятнее было почему клок-сиай 1. приемлемо 2. безопасно
ну и как вообще работает
потому что топик сложный
ну и это поможет бенчмарки объяснить/пояснить
что тестировали и зачем

Stas
02.05.2018
22:07:22

Evgeniy
02.05.2018
22:08:00
а без фдв ты как хочешь бенчмаркать? взять башку от координатора который вы писали?
я к тому что pgbench натравить надо как-то прозрачно людям
но если делать какой-то проксик, то для шардинга там надо пилить знание где что лежит
а без шардинга будет не так вкусно
а с шардингом фдв тормозит
ох

Stas
02.05.2018
22:11:15
там третий патч делаешь так что бы postgres_fdw сам эти ипорты/экспорты/препаре делал. Так что просто пгбенч можно по таблице с партициями, где часть партиций это fdw
а, вопрос был без fdw
без fdw я думал просто симулировать pgbench-ем принимающую сторону: после бегина всегда делать импорт

Evgeniy
02.05.2018
22:14:51
посмотри насколько сильно у тебя конфликт будет с патчем от хоригучи [HACKERS] asynchronous execution
интересуюсь тестом без фдв только для того чтобы можно было понять где лимиты у клок-сиай и где чинить фдв чтобы всё было чотенько