Ответ Тома на вопрос о consistent write...

User avatar
tengiz
Уже с Приветом
Posts: 4468
Joined: 21 Sep 2000 09:01
Location: Sammamish, WA

Ответ Тома на вопрос о consistent write...

Post by tengiz »

...не заставил себя долго ждать. После бурной частной переписки в течение 3 дней и дополнительных запросов от Тома предоставить ему всё больше и больше подробностей, а также эмоциональных комментарев с дюжиной вопросительных и восклицательных знаков он наконец ответил официально на сайте. Вернее отписался. Но с пометкой "do not publish", т.е. его ответ не предназначен для общего просмотра. Поэтому эта страница не видна для других посетителей asktom.com.
Cheers
Merle
Уже с Приветом
Posts: 109
Joined: 26 Sep 2002 12:24

Post by Merle »

Опаньки... обидно.
А небыло никаких намеков, мол попозже обмозгую и напишу? Или все, этот вопрос широкой общественности теперь никогда доступен не будет?
User avatar
tengiz
Уже с Приветом
Posts: 4468
Joined: 21 Sep 2000 09:01
Location: Sammamish, WA

Post by tengiz »

Merle wrote:А небыло никаких намеков, мол попозже обмозгую и напишу? Или все, этот вопрос широкой общественности теперь никогда доступен не будет?

Не переживайте - ничего полезного, чего бы мы уже не знали или не предполагали, он не сказал. Я уже поместил свой вежливый по форме, но жёсткий по сути комментарий на его последний ответ-отписку. Посмотрим, будет ли продолжение.
Cheers
User avatar
tengiz
Уже с Приветом
Posts: 4468
Joined: 21 Sep 2000 09:01
Location: Sammamish, WA

Post by tengiz »

Том перестал отвечать окончательно... Поэтому я попробовал продолжить в usenet.

comp.databases.oracle.server - Single-statement 'write consistency' on read committed. Oh, really?
Cheers
Merle
Уже с Приветом
Posts: 109
Joined: 26 Sep 2002 12:24

Post by Merle »

Спасибо, очень интересно почитать...
Но.. На сколько я понимаю, при Read committed уровне изоляции, версионнику, при изменении данных, достаточно дождаться пока другая транзакция перепишет запись и зафиксируется, потом прочитать новое значение и если оно удовлетворяет предикату - изменить, если нет, то не менять.
Зачем вообще Ораклу нужно делать откат? Транзакция в любом случае будет обновлять зафиксированные данные и с точки зрения формальной теории все в поряке.. Или я ошибаюсь?
Да statement concistency таким образом не получится, но RC этого и не требует...
Или Ораклу нужно делать эти миниоткаты, чтобы просто поменять метки транзакций в уже обновленных данных, так как могут возникнуть проблемы при последующих чтениях?

И еще такой вопрос немного в сторону. Если при уровне изоляции RC запрос натыкается на запись измененную и зафиксированную уже после его старта.. Он все равно берет версию данных на момент начала выполнения своего запроса или берет уже зафиксированную версию? Или все это зависит от конкретной реализации, а с формальной точки зрения оба случая будут RC?
vc
Уже с Приветом
Posts: 664
Joined: 05 Jun 2002 01:11

Post by vc »

Merle wrote:...
И еще такой вопрос немного в сторону. Если при уровне изоляции RC запрос натыкается на запись измененную и зафиксированную уже после его старта.. Он все равно берет версию данных на момент начала выполнения своего запроса или берет уже зафиксированную версию? Или все это зависит от конкретной реализации, а с формальной точки зрения оба случая будут RC?


It depends on what you mean by 'request'. If it's a select statement, then the version as of the moment the select started is used. If it's an update/delete, naturally, the current version will be used.

Rgds.
User avatar
tengiz
Уже с Приветом
Posts: 4468
Joined: 21 Sep 2000 09:01
Location: Sammamish, WA

Post by tengiz »

Merle wrote:Зачем вообще Ораклу нужно делать откат? Транзакция в любом случае будет обновлять зафиксированные данные и с точки зрения формальной теории все в поряке.. Или я ошибаюсь? Да statement concistency таким образом не получится, но RC этого и не требует...

Вот это и есть суть одного из вопросов, ответ от которого я хотел получить от Тома. Зачем вообще возиться с перезапусками, если всё равно есть случаи, когда они нужны, но по факту не делаются? Почему тогда не перезапускать всегда когда это нужно? И даже если согласиться с таким половинчатым решением - в чём его смысл? Какие пользовательские сценарии покрывает их решение? Почему это всё недокументировано?

Или Ораклу нужно делать эти миниоткаты, чтобы просто поменять метки транзакций в уже обновленных данных, так как могут возникнуть проблемы при последующих чтениях?

Нет, эти миниоткаты не меняют метку тразнакции - транзакция ведь одна и та же.

Если при уровне изоляции RC запрос натыкается на запись измененную и зафиксированную уже после его старта.. Он все равно берет версию данных на момент начала выполнения своего запроса или берет уже зафиксированную версию? Или все это зависит от конкретной реализации, а с формальной точки зрения оба случая будут RC?

Данные для обновления вне зависимости от реализации или уровня изоляции нужно брать всегда текущие (последние зафиксированные) иначе будут аномалии не разрешённые ни одним стандартным уровнем изоляции.
Cheers
zVlad
Уже с Приветом
Posts: 15311
Joined: 30 Apr 2003 16:43

Post by zVlad »

tengiz wrote:...................

Если при уровне изоляции RC запрос натыкается на запись измененную и зафиксированную уже после его старта.. Он все равно берет версию данных на момент начала выполнения своего запроса или берет уже зафиксированную версию? Или все это зависит от конкретной реализации, а с формальной точки зрения оба случая будут RC?

Данные для обновления вне зависимости от реализации или уровня изоляции нужно брать всегда текущие (последние зафиксированные) иначе будут аномалии не разрешённые ни одним стандартным уровнем изоляции.


А как же Оракл то поступает - берет текущие или на начало транзакции? А есть ли этому выбору теоритическое обоснование?
Merle
Уже с Приветом
Posts: 109
Joined: 26 Sep 2002 12:24

Post by Merle »

zVlad wrote: А как же Оракл то поступает - берет текущие или на начало транзакции? А есть ли этому выбору теоритическое обоснование?

Естественно текущее, иначе от Lost Update'ов там было бы не отвертеться. Отсюда же и теоретическое обоснование. =)
Если для изменения брать не текущие данные, а на момент запроса, то можно нарваться на Lost update.
Но я вопрос задавал не про insert/update/delete, а про select, просто как всегда не очень четко сформулировал..
Merle
Уже с Приветом
Posts: 109
Joined: 26 Sep 2002 12:24

Post by Merle »

Нет, эти миниоткаты не меняют метку тразнакции - транзакция ведь одна и та же.

Я здесь, немного описАлся... Я имел ввиду не метку, а время транзакции. Я не знаю, каким образом Оракл определяет, что транзакция запущена раньше или позже, (как различает версии данных) И была мысль, что именно таким образом сдвигается один запрос относительно другого по времени.

Данные для обновления вне зависимости от реализации <...>

Да, это понятно, спасибо, но я в вопросе имел ввиду читающий запрос, а не пишущий..
Так, из области теоретических размышлений, на сколько корректным было бы брать уже зафиксированную версию...
Мне кажется, что вполне корректно, но по скольку брать версию на начало запроса не слишком накладно, но более согласованно, то большинство реализаций, в том числе и Оракл так и поступают..
zVlad
Уже с Приветом
Posts: 15311
Joined: 30 Apr 2003 16:43

Post by zVlad »

Merle wrote:
zVlad wrote: А как же Оракл то поступает - берет текущие или на начало транзакции? А есть ли этому выбору теоритическое обоснование?

Естественно текущее, иначе от Lost Update'ов там было бы не отвертеться. Отсюда же и теоретическое обоснование. =)
Если для изменения брать не текущие данные, а на момент запроса, то можно нарваться на Lost update.
Но я вопрос задавал не про insert/update/delete, а про select, просто как всегда не очень четко сформулировал..


Merle wrote: "...Но я вопрос задавал не про insert/update/delete, а про select, просто как всегда не очень четко сформулировал"
That's exactly why I was asking my questions. With update it is clear enough. I was asking (like you) keeping in my mind SELECT.
vc
Уже с Приветом
Posts: 664
Joined: 05 Jun 2002 01:11

Post by vc »

zVlad wrote:
Merle wrote:
zVlad wrote: А как же Оракл то поступает - берет текущие или на начало транзакции? А есть ли этому выбору теоритическое обоснование?

Естественно текущее, иначе от Lost Update'ов там было бы не отвертеться. Отсюда же и теоретическое обоснование. =)
Если для изменения брать не текущие данные, а на момент запроса, то можно нарваться на Lost update.
Но я вопрос задавал не про insert/update/delete, а про select, просто как всегда не очень четко сформулировал..


Merle wrote: "...Но я вопрос задавал не про insert/update/delete, а про select, просто как всегда не очень четко сформулировал"
That's exactly why I was asking my questions. With update it is clear enough. I was asking (like you) keeping in my mind SELECT.


I thought I'd already answered this ...

But anyway, under the RCIL, the select is processed with the database "frozen" at the moment when the statement started; under the SIL, data is selected based on the timestamp when the whole transaction started (the first select or other statement).

Rgds.
zVlad
Уже с Приветом
Posts: 15311
Joined: 30 Apr 2003 16:43

Post by zVlad »

vc wrote:
zVlad wrote:
Merle wrote:
zVlad wrote: А как же Оракл то поступает - берет текущие или на начало транзакции? А есть ли этому выбору теоритическое обоснование?

Естественно текущее, иначе от Lost Update'ов там было бы не отвертеться. Отсюда же и теоретическое обоснование. =)
Если для изменения брать не текущие данные, а на момент запроса, то можно нарваться на Lost update.
Но я вопрос задавал не про insert/update/delete, а про select, просто как всегда не очень четко сформулировал..


Merle wrote: "...Но я вопрос задавал не про insert/update/delete, а про select, просто как всегда не очень четко сформулировал"
That's exactly why I was asking my questions. With update it is clear enough. I was asking (like you) keeping in my mind SELECT.


I thought I'd already answered this ...

But anyway, under the RCIL, the select is processed with the database "frozen" at the moment when the statement started; under the SIL, data is selected based on the timestamp when the whole transaction started (the first select or other statement).

Rgds.


Sorry, vc. It was, actually, some sort of misleading (misunderstanding).
zVlad
Уже с Приветом
Posts: 15311
Joined: 30 Apr 2003 16:43

Post by zVlad »

I have just discovered article regarding Multi Version on IBM side and want to share it with you guys (I don't read it myself yet but it probably could be worth to read):

ftp://ftp.software.ibm.com/software/dat ... stency.pdf

Return to “Вопросы и новости IT”