powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Изменить все строки поля типа integer на заданную величину максимально быстро
15 сообщений из 40, страница 2 из 2
Изменить все строки поля типа integer на заданную величину максимально быстро
    #39636725
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochоператор изменённую запись записывает в свободное место на следующую страницу.

Так не бывает. Запись привязана к странице и не может перемещаться, поэтому natural не
зациклится хоть его режь.

Единственный способ зациклить простой update это получить ему plan index или order по
индексу на изменяемом поле.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Изменить все строки поля типа integer на заданную величину максимально быстро
    #39636735
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AriochНе может ли так получиться, что update вставит новую версию записи в свободное место впереди курсора, после чего бегущий fullscan'ом цикл снова на нее наткнётся?Физическая запись никогда не меняет своего адреса.
Она его получает при insert и освобождает только после delete + сборка мусора.
Апдейт создаёт бекверсии, но голова цепочки версий всегда живёт по старому адресу.
Поэтму fullscan мог зациклиться, только если создаются новые записи (insert into t select from t).
Т.е. update\delete + fullscan - не может зациклиться.

AriochВроде краем уха слышал, что записи помечались, что они изменены текущим оператором, чтобы этого избежатьНе так, но меры в 3-ке приняты и подобных побочных эффектов там нет.
...
Рейтинг: 0 / 0
Изменить все строки поля типа integer на заданную величину максимально быстро
    #39636746
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladАпдейт создаёт бекверсии, но голова цепочки версий всегда живёт по старому адресу.

ага, понятно, это я видимо после недавней статьи PostgresSQL vs InnoDB попутал

но тут тоже неполнятно, ведь записи в FB пакуются побайтово в RLE

это означает, что обновлённая запись может оказаться менее удачной для RLE и после упаковки стать длиннее старой версии, и просто "не влезть" в местое, которое занимала старая запись?
...
Рейтинг: 0 / 0
Изменить все строки поля типа integer на заданную величину максимально быстро
    #39636747
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovЗапись привязана к странице и не может перемещаться

а если изменённая запись стала длиннее (после упаковки, в байтах), а не странице свободного места нет ?

Будут другие записи выноситься на другие страницы ?
...
Рейтинг: 0 / 0
Изменить все строки поля типа integer на заданную величину максимально быстро
    #39636749
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

если для нового образа первичной версии нет места на странице, она будет фрагментированна и часть её переползёт на другую страницу.
Но голова всё равно останется на месте.
...
Рейтинг: 0 / 0
Изменить все строки поля типа integer на заданную величину максимально быстро
    #39636751
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad,

ага, так понятно, спасибо

сразу появляется тролльское желание зарезать кэш БД в ровно одну страницу и попробовать вычитать такую запись, сможет ли сервер разумно обработать такую ошибку
...
Рейтинг: 0 / 0
Изменить все строки поля типа integer на заданную величину максимально быстро
    #39636768
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochсразу появляется тролльское желание зарезать кэш БД в ровно одну страницуЕсть ограничение снизу = 50 страниц ;)
...
Рейтинг: 0 / 0
Изменить все строки поля типа integer на заданную величину максимально быстро
    #39636828
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad,

можно сказать, что уползание головы на другую страницу и/или на другое место в той же странице (в любой момент, по любой причине) - проявляется как изменение RDB$DB_KEY ? Что это один и тот же процесс ?

И соотв. читая рассуждения про как-бы-стабильность значений RDB$DB_KEY можно оценить, в каких случаях головы ползают, а в каких остаются на месте ?
...
Рейтинг: 0 / 0
Изменить все строки поля типа integer на заданную величину максимально быстро
    #39636831
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch что уползание головы на другую страницу и/или на другое место в той же странице (в любой момент, по любой причине) - проявляется как изменение RDB$DB_KEY
НЕТ. Ну что за попытки ересь какую-то сочинить. rdb$db_key - это номер записи, той самой головы, про которую hvlad уже два раза сказал.
Arioch в каких случаях головы ползают
ни в каких.
...
Рейтинг: 0 / 0
Изменить все строки поля типа integer на заданную величину максимально быстро
    #39636833
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RDB$DB_KEY состоит из номера страницы и положения записи на ней. Выводы сделать сумеешь?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Изменить все строки поля типа integer на заданную величину максимально быстро
    #39636843
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvArioch в каких случаях головы ползают
ни в каких.Именно так
...
Рейтинг: 0 / 0
Изменить все строки поля типа integer на заданную величину максимально быстро
    #39636999
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

если тебя и KDV объединить, то получается, что RDB$DB_KEY не меняется никогда.
а это не так, иначе бы его использовали вместо синтетических ПК и не парились

например, из известной статьи

This also leads well to a discussion why you cannot rely on the record position to persist
1) after a backup/restore
2) or after your transaction has committed
...
Рейтинг: 0 / 0
Изменить все строки поля типа integer на заданную величину максимально быстро
    #39637004
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch1) after a backup/restore
2) or after your transaction has committed
первое верно, потому что надо понимать, что такое restore (и это просто инсерт)
а второе - чешуя.
...
Рейтинг: 0 / 0
Изменить все строки поля типа integer на заданную величину максимально быстро
    #39637008
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
после коммита может быть собран мусор (после удаления записи) и на это же место может попасть другая запись, есс-но с тем же RDB$DB_KEY. Это как раз и нарушает его "стабильность", если держать ссылку "за щекой" между транзакциями - она может протухнуть.

Но у одной и той же записи RDB$DB_KEY не меняется никогда, заголовок записи не имеет права перемещаться (на самом деле - может внутри страницы, но это уже детали).

Вот и все.
...
Рейтинг: 0 / 0
Изменить все строки поля типа integer на заданную величину максимально быстро
    #39637021
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

с точки зрения пользователя, и вообще всех "снаружи" движка - запись идентифицирует её PK и только PK.
Для движка запись идентифицирует DB_KEY.
Никогда не путай эти понятия, они не обязаны никак соответствовать.
...
Рейтинг: 0 / 0
15 сообщений из 40, страница 2 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Изменить все строки поля типа integer на заданную величину максимально быстро
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]