@pgsql

Страница 143 из 1062
Марк ☢
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
Она часть из wal будет читать ?
она на локе повиснет

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
>райтерс блок ридерс в некоторых уровнях сериализации, нет? нет, получишь сериализейшон аномали и ролбек

представь что вала нет, и всё пишется в файлик с табличкой

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
так то блоки а то тюпли

но я понял что ты хочешь

ты хочешь аппенд онли

Страница 143 из 1062