172 похожих чатов

Вопрос по SERIALIZABLE TRANSACTION На первом скрине создаётся таблица из 184

элементов.
Всё пройдёт без ошибок.

На втором скрине создаётся аналогичная таблица, но из 185 элементов.
И тут появляется ошибка сериализации на 26 строке.

Если посмотреть взятые локи, то в обоих кейсах будет такой результат:
{ relation: 'status', locktype: 'tuple', page: 0, tuple: 1 },
{ relation: 'status_id_idx', locktype: 'page', page: 1, tuple: null },
{ relation: 'status_id_idx', locktype: 'page', page: 1, tuple: null }

Как объяснить то, что на втором скрине происходит ошибка сериализации при увеличении кол-ва элементов в таблице на 1?

23 ответов

28 просмотров

А давайте без "скринов" (текста!), а? Здесь их всё равно мало кто смотрит.

John-Doe Автор вопроса
Yaroslav Schekin
А давайте без "скринов" (текста!), а? Здесь их всё...

А что удобно будет смотреть? Текст в сообщении?

John-Doe Автор вопроса

-- Initialization DROP TABLE IF EXISTS "status"; CREATE TABLE "status" ("id" INT NOT NULL, "name" TEXT NOT NULL); CREATE INDEX ON status(id); INSERT INTO "status" SELECT id, 'some-value' as name FROM generate_series(1, 184) t(id); -- Transaction 1 BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE; SET enable_seqscan TO off; SELECT * FROM status WHERE id = 1; -- Transaction 2 BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE; SET enable_seqscan TO off; SELECT * FROM status WHERE id = 2; -- Transaction 2 UPDATE "status" SET name = 'changed' WHERE id = 2 -- OK; COMMIT -- OK; -- Transaction 1 INSERT INTO status (id, name) VALUES (1, 'some-value'); -- OK COMMIT -- OK; ------------- ------------- ------------- -- Initialization DROP TABLE IF EXISTS "status"; CREATE TABLE "status" ("id" INT NOT NULL, "name" TEXT NOT NULL); CREATE INDEX ON status(id); INSERT INTO "status" SELECT id, 'some-value' as name FROM generate_series(1, 185) t(id); -- Transaction 1 BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE; SET enable_seqscan TO off; SELECT * FROM status WHERE id = 1; -- Transaction 2 BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE; SET enable_seqscan TO off; SELECT * FROM status WHERE id = 2; -- Transaction 2 UPDATE "status" SET name = 'changed' WHERE id = 2 -- OK; COMMIT -- OK; -- Transaction 1 INSERT INTO status (id, name) VALUES (1, 'some-value'); -- could not serialize access due to read/write dependencies among transactions

это ужасно, на телефоне вообще невозможно, лучше скрин)

увеличение на 1 чего? счетчика в последовательности?

D
это ужасно, на телефоне вообще невозможно, лучше с...

Не умеете пользоваться телефоном — не читайте на телефоне, делов-то.

Ilya Anfimov
Не умеете пользоваться телефоном — не читайте на т...

что именно в данном контексте означает "умение" пользоваться телефоном?

D
что именно в данном контексте означает "умение" по...

Например, чтобы телеграм достаточно комфортно форматировал показанный текст.

Ilya Anfimov
Например, чтобы телеграм достаточно комфортно форм...

и как это сделать в телеграм? чтобы он мог "комфортно форматировать" текст в приложении на айфоне?

Ilya Anfimov
Например, чтобы телеграм достаточно комфортно форм...

Ой, да ладно. Текст или лезет в экран в ширину или нет. У меня не лезет и я с телефона не пытаюсь даже читать код. Зачем большой код смотреть с телефона — мне неведомо.

Роман Жарков
Ой, да ладно. Текст или лезет в экран в ширину или...

может мы просто "не умеем пользоваться телефоном", думаю он научит, и всем станет хорошо

D
может мы просто "не умеем пользоваться телефоном",...

А чё там учиться? С компа надо код смотреть/копипастить/проверять. Картинки такого кода не нужны.

Роман Жарков
А чё там учиться? С компа надо код смотреть/копипа...

с компом все понятно, я исхожу из заявления про телефон. С картинкой мне проще например понять код. Или вам важно только то, что комфортно лично вам?

John Doe
-- Initialization DROP TABLE IF EXISTS "status"; C...

Пока что моё предположэние — что в первом случае происходит HOT UPDATE (поскольку первая страница ещё не заполнена), соответственно, этот update не трогает индэкс и не меняет его заблокированную первую страницу. Во втором случае — для HOT UPDATE в первой страницэ нет места, соответственно, происходит проверка блокировок.

D
с компом все понятно, я исхожу из заявления про те...

Я думаю, что настолько безрукий айтишник, что он можэт лишь страдать по поводу того, что ЕГО ЛИЧНАЯ показывалка текстов показывает их на ЕГО ЛИЧНОМ устройстве ещё хужэ, чем рандомная картинка с этим текстом с интэрнета — низачем не нужэн в техническом чятике. ЗЫ И да, жду бана, тем более что наконец надо поработать бы сегодня.

John Doe
-- Initialization DROP TABLE IF EXISTS "status"; C...

А, недописал — для HOT UPDATE нет места, соответственно, меняется индэкс и происходит проверка блокировок (которые делаются по этому индэксу).

Ilya Anfimov
Я думаю, что настолько безрукий айтишник, что он м...

я думаю настолько безрукий айтишник, что он может лишь страдать по поводу того, что ему лично не удобно, и при этом даже не задумывается, насколько другим не удобно читать его издевательства над орфографией, тоже не нужен, но я не жду ничего и не учу никого как им пользоваться телефоном, только констатирую тот факт, что мне это удобно и понятно )

John-Doe Автор вопроса
Ilya Anfimov
А, недописал — для HOT UPDATE нет места, соответст...

Спасибо за наводку. Проверю позже и отпишусь

Роман Жарков
А чё там учиться? С компа надо код смотреть/копипа...

24" монитор к телефону подключаете и смотрите... и клавиатуру 20"... ;)

John Doe
-- Initialization DROP TABLE IF EXISTS "status"; C...

По идее, тут в первом случае (HOT) update T2 попадает на ту же страницу, а во втором — новые записи (как UPDATE T2, так и INSERT T1) попадают на новую страницу таблицы — эта ситуация обрабатывается особым образом, и может вызывать false positives, что и происходит. > Получается, если поиграться с fillfactor таблицы, то ошибка может появляться/пропадать, правильно? Да. Но на то, что подобные исключения будут происходить детерминированно в production, вообще рассчитывать не стоит (слишком много факторов влияет — последовательность транзакций; то, куда (в т.ч. в индексах) попадают записи... наличие ресурсов, наконец).

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта