
Марк ☢
04.11.2016
20:11:59
Погодите. Если была космическая транзакция, потом комит, а потом другая, которая все это читает.
Она часть из wal будет читать ?

Evgeniy
04.11.2016
20:12:24
да не читает она ничего из вал
всё что нужно есть в табличках

Google

Марк ☢
04.11.2016
20:13:09
Если данные космической транзакции пишутся только в вал, то в табличном пространстве этих туплей нет. Верно ?

Evgeniy
04.11.2016
20:13:34
данные пишутся не только в вал
просто сперва в вал, а потом в табличку

Darafei
04.11.2016
20:13:49

Evgeniy
04.11.2016
20:14:04
ну ты кот даешь, какие нахуй локи
ридерс донт блок райтерс
mvcc

Марк ☢
04.11.2016
20:14:18
Погодите. Я спрошу.
Данные пишутся сначала в журнал а потом в таблицы. Эт понятно.
Вопрос в том, когда именно в таблицы? По каждой тупле ? По коммтту все разом ?

Darafei
04.11.2016
20:15:00

Марк ☢
04.11.2016
20:15:04
В фоне как получится ?

Evgeniy
04.11.2016
20:15:36
в памяти меняются данные сразу после вал записи, потом как получится данные пишутся на диск

Google

Марк ☢
04.11.2016
20:16:20
Недостаточно понятно

Evgeniy
04.11.2016
20:16:20
>райтерс блок ридерс в некоторых уровнях сериализации, нет?
нет, получишь сериализейшон аномали и ролбек
представь что вала нет, и всё пишется в файлик с табличкой

Марк ☢
04.11.2016
20:17:01

Evgeniy
04.11.2016
20:17:20
какой теперь твой вопрос?

Марк ☢
04.11.2016
20:17:34
Тогда вопрос про асинхронные коммиты.
Там типа коммит не коммит вобще. А чот типа барьера.
Хотя погоди. Щас подумаю.

Evgeniy
04.11.2016
20:18:41
при коммите в списоньке открытых транзакций помечается что всё закончилось
новая транзакция при снапшоте получит новый список и увидит что прошлые тюпли валидные

Марк ☢
04.11.2016
20:19:02
Во. Я сформулировал вопрос.
Допустим я делаю космическую транзакцию. Все пишется в журнал и в фоне еще и в табличное пространство по принципу "как получится" . Я делаю коммит. Постгрес дожидается пока бетонно запишется в журнал. И говорит мол коммит успешен. На этот момент времени в памяти туева хуча не прописанных в табличные данные туплей. Соответственно, пока они туда не пропишутся, другая транзакция делать ничего не может с этим набором данных. В итоге стоим и ждем.
О.

Evgeniy
04.11.2016
20:22:14
неверно
в табличку они пишутся прям сразу после вал, это они на диск фиксируются абы как
и новая транзакция увидит и старые и новые и любые версии строк

Марк ☢
04.11.2016
20:23:03
Хмммм. Тоесть держание в памяти не обязательное ?

Evgeniy
04.11.2016
20:23:08
и будет пробираться в них ища то что она видит в своём снапшоте

Марк ☢
04.11.2016
20:23:19

Evgeniy
04.11.2016
20:23:26
ну из памяти оно линуксом скинется на диск

Google

Evgeniy
04.11.2016
20:23:33
вот и всё

Марк ☢
04.11.2016
20:24:09
Тоесть буквально, запись каждой тупли происходит в два места. Вот прям два сисколла врайт.

Evgeniy
04.11.2016
20:24:20
вот прям два

Марк ☢
04.11.2016
20:24:28
Вот щас понятно
Спасибо.

Evgeniy
04.11.2016
20:24:59
просто нельзя не говорить про версии когда мы обсуждаем mvcc

Марк ☢
04.11.2016
20:25:46
Ну так там речь про метаинформацию. Мол какие тупли можно смотреть а какие нельзя. Эт другое.

Evgeniy
04.11.2016
20:26:52
ну вот есть мета инфа ака clog и куча говна в файликах
от всех прошлых транзакций
в иннодб говна нет, но там как раз есть ролбек сегмент. куда пишутся старые версии строк. и те кто должен видеть старые версии пробирается через него в поисках того что надо
например

Марк ☢
04.11.2016
20:30:57
вот прям два
А почему не сделать как в ext4 например? Там же данные в журнал не пишутся...

Evgeniy
04.11.2016
20:31:22
ну конечно, dataordered, writeback
нахрена эти опции

Марк ☢
04.11.2016
20:31:36
Это кагбе другое

Evgeniy
04.11.2016
20:31:49
а, потому что в фс нет mvcc!

Марк ☢
04.11.2016
20:32:21
Надо читать мне. Срочно.

Evgeniy
04.11.2016
20:34:02
ну фс она просто перезаписывает блочек данных и говорит что fsync прошел например
от постгреса порой хотят больше чем просто чтото записать

Марк ☢
04.11.2016
20:36:04
Я к чему. Почему бы не писать сразу в табличное пространство, а в журнал не писать данные. Только метаданные. При вырубании питания внезапном в бд просто останется ненужный трешачок. Но я видно недочитал.

Google

Evgeniy
04.11.2016
20:37:11
если писать данные в журнал и фсинкать его - он пишется последовательно. если писать данные в файлы и фсинкать - это рандом иопс

Марк ☢
04.11.2016
20:37:17
Тоесть тот самый redo. Он зачем ? Не нужно доделывать оборванную работу. Пусть откатывается целиком…

Evgeniy
04.11.2016
20:37:19
если не фсинкать - проебали то что закоммитли

Марк ☢
04.11.2016
20:38:20
Про фсинки эта тема понятна. Я про другое. Щас сформулирую.
Уф. Сложно. Проще спросить как и когда используются тупли из вала.

Evgeniy
04.11.2016
20:41:41
при рекавери читается вал, и если версия в вале больше чем версия на диске в табличке, то из вала приходит патчик на табличку!
больше вал никогда не читается
ну при условии конечно что тразакция из вала была закомичена

Марк ☢
04.11.2016
20:42:47
Окей. Теперь супервопрос
Реально. Понимание приходит.

Admin
ERROR: S client not available

Марк ☢
04.11.2016
20:43:03
Минутку.
Супервопрос. А если у меня только асинхронные коммиты, то по идее данные писать в журнал же не надо ? Ибо дажезакоммиченное в таблицы пихать не требуется. Верно ?
В случае рекавери журнала с 10 асинк транзакциями

Evgeniy
04.11.2016
20:44:54
в случае рекавери у тебя в асинк коммите не будет 10 транзакций и ты их проебешь
хотя сказал клиенту что всё записал!

Марк ☢
04.11.2016
20:45:03
Я понимаю
О чем и спрашиваю
Надо ли писать данные в журнал в этом случае? Мне кажется что нет.

Evgeniy
04.11.2016
20:45:37
ну так синк раз в секунду в асинке

Google

Evgeniy
04.11.2016
20:45:40
а не вообще никогда

Марк ☢
04.11.2016
20:46:14
Вопрос еще раз про писание туплей еще и в журнал для этого режима.

Evgeniy
04.11.2016
20:47:39
ответ в том что так ты потеряешь только секунду записей, а не вообще всё
потому что просто грязные страницы постгрес не фсинкает а отдает на участь линуксу
который фиксирует на диске как захочет
ты получишь солянку вместо данных после краша

Марк ☢
04.11.2016
20:48:24
Я понимаю. Я ожидаю что при крэше отпадет хз сколько последних транзакций
В случае с асинк коммитами.

Evgeniy
04.11.2016
20:49:04
может ты расскажешь что мы будем писать в вал, если не данные
ну то есть, чем это отличается от того что его нет воообще

Марк ☢
04.11.2016
20:49:18
Инфу о том где эти данные
И номер версии (или как там) которые можно считать засинкаными точно.
Соответственно фсинкать раз в секунду или раз в час. Кому как удобно.
Фстнкать таблицы

Evgeniy
04.11.2016
20:50:30
окей, давай представим такое
пришла транзакция и поменяла 10 блоков. они пометились как грязные
линукс взял и записал 5, а 5 не успел
крашнулись
открываем табличку, там 5 новых блоков, 5 старых
что теперь

Марк ☢
04.11.2016
20:50:58
Так помечено должно быть в журнале что все 10 блоков это трэш
А ка профсинкаются все 10 тогда в журнале и гасить флажок трешовости

Evgeniy
04.11.2016
20:51:20
а куда тогда 5 старых блоков деть, которые перезаписали

Марк ☢
04.11.2016
20:51:48
Дак не перезаписали же. А дописали в конец какогото табличного файла грубо говоря
Постгрес же не перписывает тупли поверх никогда.
Только поверх мусора (вроде) или вобще только всегда в конец. Я не знаю точно.

Evgeniy
04.11.2016
20:52:50
так то блоки а то тюпли
но я понял что ты хочешь
ты хочешь аппенд онли