powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Версионники и блокировочники
335 сообщений из 335, показаны все 14 страниц
Версионники и блокировочники
    #34011704
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На форуме "ERP и учетные системы" мимоходом возник диспут о достоинствах и недостатках версионников и блокировочников начиная вот с этого места.
цитата Пример : В базе данных в разных таблицах находятся значения A и B, которые исходя из их согласованности никогда не должны быть равны (что проверяется триггером). В исходном состоянии A=1; B=2.
На версионнике одновременно запускаются две транзакции. Одна пытается присвоить A:=5, другая пытается присвоить B:=5. В каждой из этих транзакций считываются значения A и B ДО их запуска. Срабатывает триггер в транзакции №1 и проверяет (А=5) != (B=2) - значит изменение A разрешено. Срабатывает триггер в транзакции №2 и проверяет (A=1) != (B=5) - значит изменение B тоже разрешено. Обе транзакции сохраняют новые значения A и B и закомичивают свои транзакции, новые версии A=5 и B=5 сохраняются в базе данных, нарушив согласованность данных. Такая ситуация не может произойти на блокировочнике.
Тема весьма неоднозначная. По моему убеждению "чистых" версионников сейчас практически не существует (не уверен, поскольку не со всеми СУБД знаком достаточно близко). В той или иной степени любай СУБД является гибридом версионника и блокировочника. На тех СУБД, которые принято считать версионниками, указанная в примере проблема разрешается с помощью блокировок , выполняемых принудительно или "на автомате". Или с помощью микрооткатов, выполняемых при обнаружении факта модификации ранее считанных данных и повторного выполнения транзакции (это может отрицательно сказаться на быстродействии, поскольку происходит лишняя загрузка сервера напрасно выполняемыми операциями). Многие "версионники" (точнее, полагаемые таковыми) могут попадать в дедлок, который возможен только по причине блокировок. То есть, "версионники" сближаются с "блокировочниками". "Блокировочники" в свою очередь делают шаги навстречу версионникам. В частности, в MS SQL Server 2005 реализована возможность выполнения транзакций аналогично версионнику. То есть, грани постепенно стираются. Это, собственно, моя точка зрения.

Опоненты считают (если я их правильно понял), что любой "версионник" в любом случае лучше блокировочника, и описанную мною в примере проблему может обойти методами именно "версионника", не превращаясь при этом в "немножко блокировочник". Прошу высказать свои мнения по этому вопросу.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34011772
cav_inc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уровни изоляции транзакций. В блокировочниках для отката транзакций приходится вести журнал транзакций (MS SQL). В версиониках "чистых" данная ситуация разруливатся на уровне изоляции транзакций. Вне зависимости от того какя транзакция завершилась первой, вторая будет откачена
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34011781
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Garya
Garya, для темы лучше конечно пример подобрать покорректней, а не с deadlock-ом.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34011846
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И тему лучше переместить в проектирование баз. Там ее затопчут с диким
гиканьем поскольку ограничения на триггерах ненадежны по определению, а
"В базе данных в разных таблицах находятся значения A и B, которые
исходя из их согласованности никогда не должны быть равны" попахивает
нарушением НФ.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34011874
AI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чистые "версионники" есть только в воспаленных мозгах теоретиков из-за чрезмерно большого количества накладных расходов. Поэтому в любой СУБД будут блокировки как простой и легкий способ обеспечения изолированности и согласованности транзакций. Триггеры тут абсолютно не при чем.

В общем, надо смотреть не на "версионник" или "блокировочник", а на правила работы читателя-писателя. Это определяет подход к разработке приложений под конкретную СУБД.

Для оракла (любой версии), например, правила доступа к одним и тем же данным таковы: "читатель не блокирует читателя", "читатель не блокирует писателя", "писатель не блокирует читателя", "писатель блокирует писателя". Неблокируемость читателя обеспечивается созданием нужной для него версии данных, писатели же работают с последней версией данных.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34011896
ЛП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Garya
Пример какой-то невнятный. Я бы даже сказал - неправильный пример.
Поставь блокировочнику уровень изоляции Read Committed - и будет тот самый описанный эффект, который якобы "не может произойти на блокировочнике".
Поставь версионнику уровень изоляции Repeatable Read или выше - будет все нормально, в смысле одна из транзакций отлуп получит на коммите (в гипотетическом "чистом" версионнике, в гибридном может и раньше отвалиться).

---------------------

2 Dimitry Sibiryakov
"В базе данных в разных таблицах находятся значения A и B, которые
исходя из их согласованности никогда не должны быть равны" попахивает
нарушением НФ.
Ну нарушение НФ, ну и что? Не все же в 5-ой НФ базы делают :)
К рассмотрению различий версионников и блокировочников - вопросы нарушения нормальных форм если и имеют, то какое-то весьма и весьма далекое отношение.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34011903
ЛП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AIДля оракла (любой версии), например, правила доступа к одним и тем же данным таковы: "читатель не блокирует читателя", "читатель не блокирует писателя", "писатель не блокирует читателя", "писатель блокирует писателя". Неблокируемость читателя обеспечивается созданием нужной для него версии данных, писатели же работают с последней версией данных.
Скажите, а Select For Update - эт в какой СУБД?
:)
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34011924
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GaryaНа форуме "ERP и учетные системы" мимоходом возник диспут о достоинствах и недостатках версионников и блокировочников
Хм. Когда я только появился на форуме, именно в "Сравнении СУБД" была тема страниц на двадцать, и там обсудили все мыслимые вопросы. Сказать имхо больше просто нечего.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34011940
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет, softwarer!
Ты пишешь:

softwarers> Хм. Когда я только появился на форуме, именно в "Сравнении СУБД"
s> была тема страниц на двадцать, и там обсудили все мыслимые
s> вопросы. Сказать имхо больше просто нечего.перефразирую известную советскую фильму:
"А настоящему Гаре всегда есть что сказать!
Если, конечно, он настоящий Гаря!.."

--
With best regards, Мимопроходящий.

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34011941
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛП
Ну нарушение НФ, ну и что? Не все же в 5-ой НФ базы делают :)
К рассмотрению различий версионников и блокировочников - вопросы
нарушения нормальных форм если и имеют, то какое-то весьма и весьма
далекое отношение.

Просто ни те ни другие не дадут нарушить unique constraint независимо от
уровня трансизоляции и фазы луны. А описанная проблема именно так и
решается.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34011953
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛПСкажите, а Select For Update - эт в какой СУБД?
Скажите, а select for update не пишет никуда ни байта данных? :)
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34011969
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cav_incУровни изоляции транзакций. В блокировочниках для отката транзакций приходится вести журнал транзакций (MS SQL). В версиониках "чистых" данная ситуация разруливатся на уровне изоляции транзакций.Уровни изоляции транзакций бывают разные. И для того, чтобы реализовать все возможные варианты уровней изоляции, приходится предпринимать в "блокировочниках некоторые гибридные решения. Кроме самих уровней изоляции, которые всего лишь декларируют наборы гарантий той или иной совокупности, в этих гарантиях ничего не сказано о механизмах разрешения возникающих конфликтов одновременного доступа к данным. Каждая СУБД решает такие конфликты немного по-своему. Блокировочники решают конфликты доступа ожиданием освобождения ресурса. Некоторые "версионники" (так называемые), решают эти конфликты точно так же - ожиданием (то есть блокировкой). Так что уровни изоляции уровнями изоляции, а конфликты одновременного доступа к данными - от них никуда не деться.

cav_incВне зависимости от того какя транзакция завершилась первой, вторая будет откаченаЭто в какой СУБД так произойдет? И можно поподробнее, каким образом произойдет откат. То есть, в транзакции стоит "commit", а выполняется "rollback", причем молча (клиент думает, что транзакция закоммичена, а на самом деле все не так)? Если не молча, то какого рода ошибка при этом возникает и можно ли ее каким-то образом обработать? Если можно, то что указывается в конце обработки ошибки - что-то вроде "commit commit" либо "rollback commit"? Если обработка ошибки невозможна, то это решение очень похоже на работу блокировочника с автоматическим "разруливанием" дедлока.

iscrafmGarya, для темы лучше конечно пример подобрать покорректней, а не с deadlock-ом.Нет, как раз именно этот пример и интересен! :) Кроме того, возникнет дедлок или не возникнет, на блокировочнике это зависит от установленного уровня изоляции транзакций. При разрешенном "грязном чтении" дедлока не будет. Что забавно, как раз "грязное чтение" разрешает выполняться транзакцияфм одновременно на блокировочнике и при этом обнаружить нарушение логической целостности. То есть, самостоятельно выдать команду "rollback" как минимум на одной из транзакций.

Dimitry SibiryakovИ тему лучше переместить в проектирование базА при чем тут "проектирование"? Речь идет именно о "сравнении СУБД", разве не так?

Dimitry SibiryakovТам ее затопчут с диким гиканьем поскольку ограничения на триггерах ненадежны по определению, а "В базе данных в разных таблицах находятся значения A и B, которые исходя из их согласованности никогда не должны быть равны" попахивает нарушением НФ.Разумеется, пример сильно упрощенный. Разумеется, в большинстве СУБД можно применить либо DRI, либо check conctraint, на работу которых уровни изоляции транзакций никаким образом не влияют - они выполнятся в любом случае, сгенерив ошибку либо до начала транзакции, либо при попытке ее закоммитить. Но большинство из присутствующих знают ограничения применимости DRI и check conctraint для многих СУБД, и смогут придумать аналогичный, но более сложный пример, требующий промежуточных вычислений и соблюдения более сложных условий, которые проверить можно будет только либо в триггере, либо в ХП. Дабы не отвлекать свои извилины на те многочисленные нюансы, которые не имеют непосредственного отношения к рассматриваемому вопросу, я привел максимально упрощенный пример, для которого, разумеется, есть альтернативные решения в большинстве СУБД. Но я предлагаю исходить из того, что их нет. Мы рассматриваем работу именно транзакций в рамках логики, которую прописываем руками в триггере, либо в ХП. Требование A!=B, разумеется, надуманное, и вполне может не соответствовать всяким там НФ, но в жизни могут быть ситуации со схожими условиями. Пример приводить не стану, а то некоторые заточенные на решение задач, а не на анализ причин их возникновения, начнут рассматривать варианты решения задачи уже в новом примере реорганизацией структуры данных, даже в сторону денормализации... :)
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34011979
ЛП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Dimitry Sibiryakov
Просто ни те ни другие не дадут нарушить unique constraint независимо от уровня трансизоляции и фазы луны.
А описанная проблема именно так и решается.

А при чем здесь unique constraint?
И чем, собственно, какой-то непонятно откуда взявшийся unique constraint лучше/хуже чем, скажем, обычный констрейнт типа FieldA <> FieldB?

------------------

2 softwarer
Скажите, а select for update не пишет никуда ни байта данных? :)
А моё то какое дело? Знать не знаю, и знать не хочу - куда и чего там пишет селект фор апдейт. Вижу "читателя", который исключительно читает данные, но для изменений записи блокированы.
В MS SQL Server'е селекты тоже много чего куда пишут, однако ж селектами не перестают быть, а их аффтары не перестают быть "читателями" (в традиционной терминологии).
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34011996
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛППоставь блокировочнику уровень изоляции Read Committed - и будет тот самый описанный эффект, который якобы "не может произойти на блокировочнике".Будет дедлок. Если есть механизмы автоматического выявления дедлоков, то одна из транзакций будет "насильно откачена" с возвратом клиенту сообщения об ошибке. Или Вы считаете иначе?

ЛППоставь версионнику уровень изоляции Repeatable Read или выше - будет все нормально, в смысле одна из транзакций отлуп получит на коммите (в гипотетическом "чистом" версионникеА что сделает "чистый версионник" на коммите, если он не выставляет блокировок чтения? Каким образом он определит, что транзакцию необходимо откатить?
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34012006
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GaryaА что сделает "чистый версионник" на коммите, если он не выставляет блокировок чтения?
Поскольку чистый версионник заведомо не выставляет блокировок чтения, вопрос избыточный.

GaryaКаким образом он определит, что транзакцию необходимо откатить?
Хм. Вот пользуюсь я такой замечательной программой StarTeam. И время от времени, когда я хочу сделать check in или check out, она говорит мне: не буду делать операцию, бикоз файл нидс ту би мержед. Тот же самый случай.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34012025
ЛП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Garya
ЛППоставь блокировочнику уровень изоляции Read Committed - и будет тот самый описанный эффект, который якобы "не может произойти на блокировочнике".Будет дедлок.

Да откуда же ему взяться - на уровне RC ?
Первый прочитал - все ок, блокировок еще никаких нет.
Второй прочител - все ок, блокировок еще никаких нет.
Первый проапдейтил первую запись - первая запись заблокирована.
Второй проапдейтил вторую запись - вторая запись заблокирована.
Первый коммит.
Второй коммит.
Где дедлок, я вас спрашиваю? :)

ЛППоставь версионнику уровень изоляции Repeatable Read или выше - будет все нормально, в смысле одна из транзакций отлуп получит на коммите (в гипотетическом "чистом" версионникеА что сделает "чистый версионник" на коммите, если он не выставляет блокировок чтения? Каким образом он определит, что транзакцию необходимо откатить?
Видать чего-нибудь сравнит, да и поймет чего-нить ненароком :)
Благо сравнивать ему есть чего, версии остались и "изначальная", и "текущая".
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34012106
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий
"А настоящему Гаре всегда есть что сказать!
Если, конечно, он настоящий Гаря!.."

Судя по всему, не только Гаре :)
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34012118
Yo.!!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у блокировочника RC не гарантирует даже то что обновляемая запись не будет прочитана из индекса, так что дедлок это не самый худщий вариант ...
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34012126
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛПЗнать не знаю, и знать не хочу - куда и чего там пишет селект фор апдейт.
Ну вот и не называйте его читателем, раз знать не хотите.

ЛПВижу "читателя", который исключительно читает данные,
Где?

ЛПВ MS SQL Server'е селекты тоже много чего куда пишут,
Думаю, правильнее будет сказать "могут писать".

ЛПоднако ж селектами не перестают быть, а их аффтары не перестают быть "читателями" (в традиционной терминологии).
"Слово сказанное есть ложь" - или как там звучала эта фраза? Традиционная терминология плохо отрабатывает этот аспект, что хорошо видно в Вашем примере к Гаре.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34012191
cav_inc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор cav_inc
Вне зависимости от того какя транзакция завершилась первой, вторая будет откачена
Это в какой СУБД так произойдет? И можно поподробнее, каким образом произойдет откат. То есть, в транзакции стоит "commit", а выполняется "rollback", причем молча (клиент думает, что транзакция закоммичена, а на самом деле все не так)? Если не молча, то какого рода ошибка при этом возникает и можно ли ее каким-то образом обработать? Если можно, то что указывается в конце обработки ошибки - что-то вроде "commit commit" либо "rollback commit"? Если обработка ошибки невозможна, то это решение очень похоже на работу блокировочника с автоматическим "разруливанием" дедлока.

Всю жизнь думал что так делает IB/FB. А тригер на таблице или некий глобальный сам по себе живущий тригер ? Если на таблице то при ReadCommited и следующей структуре:
автор/******************************************************************************/
/*** Generated by IBExpert 2004.03.29 26.09.2006 16:13:35 ***/
/******************************************************************************/

SET SQL DIALECT 3;

SET NAMES WIN1251;

CREATE DATABASE 'C:\Project\BugReport\Dbase\BG.FDB'
USER 'SYSDBA' PASSWORD 'masterkey'
PAGE_SIZE 8192
DEFAULT CHARACTER SET WIN1251;



/******************************************************************************/
/*** Exceptions ***/
/******************************************************************************/

CREATE EXCEPTION EXT 'Áëà-Áëà';



/******************************************************************************/
/*** Tables ***/
/******************************************************************************/

CREATE TABLE T1 (
ID INTEGER
);


CREATE TABLE T2 (
ID INTEGER
);





/******************************************************************************/
/*** Triggers ***/
/******************************************************************************/


SET TERM ^ ;




/* Trigger: T1_BU0 */
CREATE TRIGGER T1_BU0 FOR T1
ACTIVE BEFORE UPDATE POSITION 0
AS
declare variable id integer;
begin
/* Trigger text */
if (exists(select id from t2 where id=new.id)) then
exception ext;

end
^

/* Trigger: T2_BU0 */
CREATE TRIGGER T2_BU0 FOR T2
ACTIVE BEFORE UPDATE POSITION 0
AS
declare variable id integer;
begin
/* Trigger text */
if (exists(select id from t1 where id=new.id)) then
exception ext;

end
^


SET TERM ; ^


Возникает исключение на тригере :)
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34012267
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer GaryaНа форуме "ERP и учетные системы" мимоходом возник диспут о достоинствах и недостатках версионников и блокировочников
Хм. Когда я только появился на форуме, именно в "Сравнении СУБД" была тема страниц на двадцать, и там обсудили все мыслимые вопросы. Сказать имхо больше просто нечего.Я нашел обсуждение только различий в производительности. Меня же интересуют механизмы их работы. "Чистых" версионников, не использующих блокировки, мне неизвестно.

Мимопроходящий"А настоящему Гаре всегда есть что сказать!
Если, конечно, он настоящий Гаря!..""А настоящему Мимопроходящему всегда есть что сказать!
Если, конечно, он настоящий Мимопроходящий!.." :)

ЛПИ чем, собственно, какой-то непонятно откуда взявшийся unique constraint лучше/хуже чем, скажем, обычный констрейнт типа FieldA <> FieldBЭто Check conctraint. Поскольку FieldA и FieldB расположены в РАЗНЫХ таблицах, то не во всех СУБД его можно так просто реализовать. В MS SQL Server 2000, например, придется задействовать UDF, которая выполняется в транзакции и которая может работать по-разному в зависимости от установленного уровня изоляции транзакций. То есть, выйти на "затранзакционный" уровень, не зависящий от уровней изоляции, не удастся.

ЛПДа откуда же ему взяться - на уровне RC?
Первый прочитал - все ок, блокировок еще никаких нет.
Второй прочител - все ок, блокировок еще никаких нет.
Первый проапдейтил первую запись - первая запись заблокирована.
Второй проапдейтил вторую запись - вторая запись заблокирована.
Первый коммит.
Второй коммит.
Где дедлок, я вас спрашиваю? :)Пожалуй, Вы правы. Дедлок может и не возникнуть. И на уровне изоляции RC нарушение логической целостности возможно также на блокировочнике.

ЛПВидать чего-нибудь сравнит, да и поймет чего-нить ненароком :)
Благо сравнивать ему есть чего, версии остались и "изначальная", и "текущая".Сейчас много чего скажу...
Нормальный "псевдоверсионник" должен сравнивать не всё подряд, а флаги (признаки) изменения некоторых данных. Просто это гораздо менее затратно, нежели перелопачивать и сравнивать кучу версий (особенно, если этих версий не 2-3, а 20-30). А выставление подобных флагов - это и есть механизм установки блокировок.
Теперь рассмотрим "специфический случай" обработки транзакции блокировочником. Допустим, в начале транзакции мы создаем временные таблицы и переписываем в них все данные, которые нам потребуются в процессе выполнения транзакции. Измененные и новые значения мы также записываем во временные таблицы. Перед завершением транзакции переписываем результат в рабочие таблицы. Чем в корне такая работа отличается от работы "версионника"? Тем, что часть этой работы "версионник" выполняет сам, без дополнительных усилий со стороны разработчика. Но при этом операции чтения для снятия копий читаемых данных, а также операции записи остаются в рамках транзакции и подчиняются установленным уровням изоляции. Версионник, насколько я понимю, точно так же выставляет признаки блокировки и точно так же их проверяет как блокировочник - при попытке записи версии. Для разработчика же эта процедура КАЖЕТСЯ находящейся за пределами транзакции. Тем не менее, именно при выполнении этой процедуры может возникнуть три десятка разнообразных ошибок из-за конфликтов доступа к данным, обработать по-человечески которые, как правило, уже невозможно. Можно только ознакомиться с фактом возникновения ошибки и откатиться.
Теперь еще пара слов о быстродействии. Снятие копии с данных для формирование версии и сохранение данных версии (итого, две операции копирования) - это неизбежные потери на копирование информации. В некоторых случаях в таком копировании просто нет необходимости (например, при обращении к таблице, в которую информация никогда не пишется, а только читается). Версионник же "молча" производит такое копирование в любом случае (или не в любом? может быть, есть более "интеллектуальные" версионники?).
Вот чего я не понимаю, так это "грязное чтение" на версионниках. Оно там вообще не возможно? А ведь в некоторых (согласен, весьма редких) случаях оно может оказаться полезным. Например, в случае с данным примером оно может позволить выявить редактирование данных другой транзакцией и осмысленно обработать эту ситуацию.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34012300
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет, Garya!
Ты пишешь:

GaryaG> Версионник, насколько я понимю, точно так же выставляет признаки блокировки
G> и точно так же их проверяет как блокировочник - при попытке записи версии.
G> Для разработчика же эта процедура КАЖЕТСЯ находящейся за пределами транзакции.
G> Тем не менее, именно при выполнении этой процедуры может возникнуть три десятка
G> разнообразных ошибок из-за конфликтов доступа к данным, обработать по-человечески которые,
G> как правило, уже невозможно. Можно только ознакомиться с фактом возникновения ошибки и откатиться.

G> Версионник же "молча" производит такое копирование в любом случае
G> (или не в любом? может быть, есть более "интеллектуальные" версионники?).монетку бросает.
[удалено модератором]
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34012316
Yo.!!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Garya
Теперь рассмотрим "специфический случай" обработки транзакции блокировочником. Допустим, в начале транзакции мы создаем временные таблицы и переписываем в них все данные, которые нам потребуются в процессе выполнения транзакции. Измененные и новые значения мы также записываем во временные таблицы. Перед завершением транзакции переписываем результат в рабочие таблицы. Чем в корне такая работа отличается от работы "версионника"?
тем что "это" работать не будет, помнится Злой тут красиво расписал почему.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34012410
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор"Чистых" версионников, не использующих блокировки, мне неизвестно.
о каких блокировках идет речь? версионнику, чистому или "нечистому", блокировки по чтению не нужны, совсем. Блокировок по записи тоже как таковых нет, то есть "заблокированная" изменением запись обнаруживается только при попытке ее update/delete другой транзакцией.

Разумеется, в версионнике есть блокировки на уровне страниц, но это "не те" блокировки. они нужны только для сериализации изменений в пределах одной страницы, и пользователь их ни в каком виде не наблюдает.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34012417
Yo.!!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv
Разумеется, в версионнике есть блокировки на уровне страниц, но это "не те" блокировки. они нужны только для сериализации изменений в пределах одной страницы, и пользователь их ни в каком виде не наблюдает.
страницы чего ? а главное зачем страницы ? ну и о котором версионнике речь ?
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34012439
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторстраницы чего ? а главное зачем страницы ?

страницы данных и индексов. Две транзакции меняют данные на одной странице записей таблицы. Параллельно они же не могут это делать. соответственно доступ к странице в памяти сервера "монополизируется" на время изменения этой страницы одной транзакцией. Все.

авторну и о котором версионнике речь ?

фиг знает. я пытаюсь понять, что это за "блокировки" которых нет в "чистых версионниках", и которые якобы есть в "не чистых версионниках". потому и спрашиваю.

если иметь в виду IB/FB, то блокировок на уровне записей в нем нет. Тогда он "чистый версионник"? Или нет?
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34012566
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!! Garya
Теперь рассмотрим "специфический случай" обработки транзакции блокировочником. Допустим, в начале транзакции мы создаем временные таблицы и переписываем в них все данные, которые нам потребуются в процессе выполнения транзакции. Измененные и новые значения мы также записываем во временные таблицы. Перед завершением транзакции переписываем результат в рабочие таблицы. Чем в корне такая работа отличается от работы "версионника"?
тем что "это" работать не будет, помнится Злой тут красиво расписал почему.
Увсе замечательно работает. Особенно если прямыми ручками брать подходящее решение под подходящую задачу и пользоваться тем, что есть в арсенале СУБД. Я понимаю, что легче и быстрее всего "слить" решение проблемы на универсальный механизм и "радоваться" средней скорости выполнения, но иногда все таки бывает полезнее и самому думать головой. Вот простой пример - крутиться у меня сейчас на блокировочнике ASA 9 интернет магазин, где в обе стороны со стороны фронта веб пользователи резервируют товар на складе, а операторы/админы со стороны админки управляют каталогом товаров, складом и заказами. Иногда бывает раз в пару месяцев и деадлок проскочит, когда идет массовый ввод как новых товаров на склад, так и изменение информации по существующим благодаря тому, что оформление заказа в вебе затянутая по времени многошаговая операция (желание заказчиков). Но даже такой одинокий деадлок является правильным, так как он всегда откатывает сессию веба и никогда администраторской консоли, ни разу не было (и не будет), чтобы клиент заказал себе несуществующий или уже зарезервированный на складе товар (по условиям задачи товары появляются и изчезают со склада очень быстро). Причем на просмотр сайта вообще для веба стоит грязное чтение, ибо юзеру здесь не критично, поменялось ли тоже название товара, пока грузилась его страничка. А вот где начинается работа с ценами, наличием на складе и оформлением заказа - тут уже осуществляется нужный подьем уровней изоляций вплоть до SERIALIZABLE. Работает ... и ведь быстро работает, если учесть, что одновременно с базой работают порядка 30 операторов и в часы пик свыше сотни веб пользователей. И вот что интересно - недавно вышла ASA 10, в которой теперь есть поддержка уровня изоляции SNAPSHOP, где судя по куче способов управления видимостью информации этого уровня изоляции и штатным сборщиком мусора в БД, разработчики видимо решили реализовать не популярную примочку, а полноценный механизм ... но как бы до сих пор я так и не придумал, где мне этот SNAPSHOP может понадобиться, с учетом того, что включая этот режим я гарантированно потеряю скорость. Длинные отчеты вроде как у меня и на предрассчитанных аггрегатах неплохо недлинными получаются (опять же помимо версионности в 10-ке ввели материализованные представления, что позволит частично избавиться от своих решений аггрегатов).

Может быть Вы Yo! мне подскажите как человек с версионным опытом, почему я получил в довесок к блокировочнику версионник и никак не могу понять, зачем оно мне нужно и когда это стоит включать ? И почему кстати сколько я не видел БД на Оракле, написанных в том числе в стенах диллеров Оракла, всегда для большого обьема данных БД разделяют на 2 части - на ту, которая собирает и считает (для OLTP) и ту, которая хранит входящую информацию и предрассчитанные аггрегаты для отчетов (для OLAP). Зачем их разделять на Оракле, геммороится с синхронизацией между БД, если есть такая классная фича, как писатель, который не блокирует читателя ? ;)
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34012662
Yo.!!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv
страницы данных и индексов. Две транзакции меняют данные на одной странице записей таблицы. Параллельно они же не могут это делать. соответственно доступ к странице в памяти сервера "монополизируется" на время изменения этой страницы одной транзакцией. Все.

ну "типа" версионник оракл блокирует только на уровне строки.

kdv
фиг знает. я пытаюсь понять, что это за "блокировки" которых нет в "чистых версионниках", и которые якобы есть в "не чистых версионниках". потому и спрашиваю.

если чистый версионник это Timestamp ordering то там помоему просто по комиту откатывется та транзакция которая наткнулась конфликт.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34012675
ЛП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Garya
Это Check conctraint. Поскольку FieldA и FieldB расположены в РАЗНЫХ таблицах, то не во всех СУБД его можно так просто реализовать.
Пардон, я отвечал таки Dimitry Sibiryakov'у. Но раз уж речь зашла о разных таблицах, то тем более не понял - при чем тут был unique constraint.
А по сути возражения - возражений нет :)

Пожалуй, Вы правы. Дедлок может и не возникнуть. И на уровне изоляции RC нарушение логической целостности возможно также на блокировочнике.
Гммм... ща буду ругаться матом :)
На уровне RC описанный выше конфуз возможен в любой СУБД, если не предпринимать дополнительных усилий.
На уровне RR описанного выше конфуза не можен быть, опять таки в любой СУБД (реализующей RR, конечно).
А блокировочник или версионник - это уже детали реализации :). Для этого типа конфуза оно не важно.

Если уж беретесь что-то сравнивать, то при сравнении используйте одинаковый уровень изоляции - и в вышеприведенном примере все отличия в поведении версионника и блокировочника исчезнут.

Нормальный "псевдоверсионник" должен сравнивать не всё подряд, а ...
Неважно что он там должен сравнивать. Главное, что "чистый" (не-псевдо) версионник - могёт рулить конфликтами. Сопстна про что и речь была.

------------------------

2 kdv
о каких блокировках идет речь? версионнику, чистому или "нечистому", блокировки по чтению не нужны, совсем. Блокировок по записи тоже как таковых нет, то есть "заблокированная" изменением запись обнаруживается только при попытке ее update/delete другой транзакцией.
Неважно, берете Вы в кавычки слово "заблокировано", или не берете. Блокировка писателя другим писателем (еще не закомиченным) все равно есть - в "нечистых" версионниках. Хоть блокировкой её назови, хоть конфликтом версий, хоть синенькой пирамидкой.
Хотя вполне можно сделать систему и без этой блокировки, и отлупы слать в момент коммита, а не "при попытке ее update/delete другой транзакцией". Тока наверное это не нужно никому, что в общем-то и логично.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34012683
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторесли чистый версионник это Timestamp ordering
номера транзакций в ib/fb - это и есть timestamp. видимость версий определяется состоянием транзакций, в т.ч. и по "больше", "меньше".

автортам помоему просто по комиту откатывется та транзакция которая наткнулась конфликт.
есть нюанс. при read-committed можно повторить операцию, натолкнувшуюся на конфликт (если сервер по своей инициативе не занимается самодеятельностью типа отката транзакций). при snapshot - нет. потому что snapshot не увидит конфликтующую запись даже если ей сделать commit.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34012703
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛПБлокировка писателя другим писателем (еще не закомиченным) все равно есть - в "нечистых" версионниках.

мнение принято, спасибо, согласен. но мне бы хотелось услышать ответ на этот вопрос от Garya. что он имеет в виду "чистым" версионником и блокировками в версионнике.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34012719
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛП
Пардон, я отвечал таки Dimitry Sibiryakov'у. Но раз уж речь зашла о
разных таблицах, то тем более не понял - при чем тут был unique constraint.

При том что при правильном проектировании базы связанные атрибуты (а они
именно связанные) попадают в одну таблицу. И если стоит задача контроля
их уникальности, то эта задача возлагается на unique constraint.
А тем разработчикам БД, у кого руки кривые, не поможет никакой
блокировочник.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34012753
Yo.!!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv
номера транзакций в ib/fb - это и есть timestamp. видимость версий определяется состоянием транзакций, в т.ч. и по "больше", "меньше".

просто в ib/fb кроме TO еще похоже Two phase locking прикручен

kdv
потому что snapshot не увидит конфликтующую запись даже если ей сделать commit.
в смысле не увидит, snapshot это уже MVCC с блокировками на запись. к стате еще у MVCC был Conflict Graph Analysis который тоже кажется без блокировок умеет разруливать конфликты.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34012786
Yo.!!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUS
Может быть Вы Yo! мне подскажите как человек с версионным опытом, почему я получил в довесок к блокировочнику версионник и никак не могу понять, зачем оно мне нужно и когда это стоит включать ?

может вы хотите вернутся к той задачке снова ;) ? мне показалось вы все таки поняли чем такое "проэктирование" черевато в жизни ?
На счет магазина - я в полне допускаю что 100 вебных юзеров вполне могут создать аж 2 tps, которые вполне можно выстроить в очередь и обрабатывать через джоб, отказавшись от консистентных отчетов ... но то что это сейчас работает мало мне о чем говорит ...

ASCRUS
И почему кстати сколько я не видел БД на Оракле, написанных в том числе в стенах диллеров Оракла, всегда для большого обьема данных БД разделяют на 2 части - на ту, которая собирает и считает (для OLTP) и ту, которая хранит входящую информацию и предрассчитанные аггрегаты для отчетов (для OLAP).

вот уж не знаю почему у вас избирательное зрение ... могу только предположить.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34012804
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!! kdv
фиг знает. я пытаюсь понять, что это за "блокировки" которых нет в "чистых версионниках", и которые якобы есть в "не чистых версионниках". потому и спрашиваю.

если чистый версионник это Timestamp ordering то там помоему просто по комиту откатывется та транзакция которая наткнулась конфликт.А конфликто-то каким все-таки образом выявляется, если блокировок в принципе нет?
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34012879
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GaryaА конфликто-то каким все-таки образом выявляется
объясняю на примере IB/FB:

1. транзакция X выполняет update
2. движок находит обновляемую запись
3. находит запись или пакет версий
4. смотрит на состояние транзакции для самой свежей версии
5.
a) если эта транзакция не active, то update проходит (создается новая версия с идентификатором транзакции X)
b) если эта транзакция active - выдается отлуп. конкретно в IB/FB он звучит как deadlock, и используется в том числе для сообщения о реальных deadlock-ах (взаимоблокирование wait-транзакций на update/delete)
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34013008
Yo.!!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GaryaА конфликто-то каким все-таки образом выявляется, если блокировок в принципе нет?

http://www.osp.ru/text/302/185218/
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34013037
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛПЕсли уж беретесь что-то сравнивать, то при сравнении используйте одинаковый уровень изоляции - и в вышеприведенном примере все отличия в поведении версионника и блокировочника исчезнут.Ок, давайте рассмотрим уровень изоляции SERIALIZABLE. В моем примере всем всё разрешено. Обе транзакции модифицируют совершенно разные данные. Но уровень SERIALIZABLE просто НЕ ОБЕСПЕЧИВАЕТСЯ. Одна транзакция продолжает читать данные, модифицируемые другой транзакцией, она просто "плюет" на заданный уровень изоляции. Когда она дойдет до коммита, тогда - вот тогда ЧТО? Тогда она, наконец, "спохватится" и начнет выяснять, а правильно ли она делала, пока работала. На этом этапе она и проверяет блокировки. И выясняет, что неправильно. И откатывается...
Я согласен, что для приведенного мною примера, который должен вынудить одну из транзакций откатить (хотя бы из-за дедлока), плохо прослеживается одна вещь. Если бы пример был бы не "дедлочный", то стало бы ясно, что если бы СУБД немного "притормозила" одну из транзакций, ей не понадобилось бы ее аварийно откатывать. Возможно, сработал бы откат, но штатный - с адекватной обработкой ситуации. А может быть, удалось бы закомитить обе транзакции, но одной из них пришлось бы немного погодить.
Что лучше - когда СУБД не оценивает возможность параллельной обработки, а просто тупо ее выполняет, после чего часть проделанной работы забраковывает, либо когда СУБД критические операции "притормаживает" таким образом, чтобы они выполнялись не параллельно, а последовательно - но при этом дает возможность выполниться всем операциям?

ПМСМ, однозначного ответа на этот вопрос нет. Иногда хорошо первое, иногда второе.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34013102
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!! GaryaА конфликто-то каким все-таки образом выявляется, если блокировок в принципе нет?

http://www.osp.ru/text/302/185218/ Большое спасибо за ссылку на статью. Очень интересная статья!
И все-таки повторяю вопрос. Чем это не блокировки?:

ROMV
...
3) Завершение транзакции ti (commit) откладывается до того момента, когда завершатся все транзакции, записавшие версии данных, прочитанные ti.
...
2V2PL
...
если операция является финальной для транзакции ti, то она откладывается до тех пор, пока не завершатся: a) все транзакции tj, прочитавшие текущую версию данных, которую должна заменить версия, записанная ti (тем самым устраняется возможность неповторяющегося чтения); b) все транзакции tj, которые записали версии, прочитанные ti (это требуется только во втором варианте алгоритма)
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34013250
AI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Garya
...

Я согласен, что для приведенного мною примера, который должен вынудить одну из транзакций откатить (хотя бы из-за дедлока), плохо прослеживается одна вещь. Если бы пример был бы не "дедлочный", то стало бы ясно, что если бы СУБД немного "притормозила" одну из транзакций, ей не понадобилось бы ее аварийно откатывать. Возможно, сработал бы откат, но штатный - с адекватной обработкой ситуации.

...


Почему Вы считаете, что нужно откатывать всю транзакцию целиком? В случае дедлока достаточно откатить только последнюю операцию DML.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34013266
ЛП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Garya
ЛПЕсли уж беретесь что-то сравнивать, то при сравнении используйте одинаковый уровень изоляции - и в вышеприведенном примере все отличия в поведении версионника и блокировочника исчезнут.Ок, давайте рассмотрим уровень изоляции SERIALIZABLE.
Ну давайте рассмотрим, что-ли...
Не совсем понятно, что именно рассматриваем - версионник, или блокировочник?

В моем примере всем всё разрешено. Обе транзакции модифицируют совершенно разные данные. Но уровень SERIALIZABLE просто НЕ ОБЕСПЕЧИВАЕТСЯ. Одна транзакция продолжает читать данные, модифицируемые другой транзакцией
Судя по выделенной фразе - рассматривается нифига не блокировочник

, она просто "плюет" на заданный уровень изоляции. Когда она дойдет до коммита, тогда - вот тогда ЧТО? Тогда она, наконец, "спохватится" и начнет выяснять, а правильно ли она делала, пока работала. На этом этапе она и проверяет блокировки.
Судя по выделенному слову - нифига не гипотетический "чистый" версионник.

Так шта этта... давайте определимся сначала с предметом рассмотрения, а потом уже и порассматриваем чавой-нибудь :))
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34013270
ЛП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AIПочему Вы считаете, что нужно откатывать всю транзакцию целиком? В случае дедлока достаточно откатить только последнюю операцию DML.
Ахтунг!
Это Вы сами такую транзакцию выдумали, кусочно откатываемую???
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34013362
AI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛП AIПочему Вы считаете, что нужно откатывать всю транзакцию целиком? В случае дедлока достаточно откатить только последнюю операцию DML.
Ахтунг!
Это Вы сами такую транзакцию выдумали, кусочно откатываемую???

При чем тут кусочно откатываемая транзакция? Откат только последней в транзакции команды, в которой детектирована ошибка - нормальное явление в СУБД. Во всяком случае, в оракле, при обнаружении дедлока вся транзакция не откатывается.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34013365
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛП AIПочему Вы считаете, что нужно откатывать всю транзакцию целиком? В случае дедлока достаточно откатить только последнюю операцию DML.
Ахтунг!
Это Вы сами такую транзакцию выдумали, кусочно откатываемую???

Сам ты Ахтунг
в Oracle есть Savepoint-ы

В случае зафиксированного DeadLock-а откатываются изменения одного оператора. Дальше приложение решает делать commit или rollback предыдущих изменений
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34013466
ЛП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Gluk (Kazan)
Сам ты Ахтунг
От ахтунга слышу :)

в Oracle есть Savepoint-ы
Сейв-поинты - сейв-поинтами
Они не только в оракле есть.
В аксесе так вообще есть полноценные многоуровневые транзакции. Но откатываются то они целиком :).

В случае зафиксированного DeadLock-а откатываются изменения одного оператора. Дальше приложение решает делать commit или rollback предыдущих изменений
А при чем здесь "приложение решает"? Если, например, хранимка из пяти DML-стейтментов, обернутых в сериалайзбл-транзакцию. Четвертый из стейтментов рушится. Откуда возьмется какое-то приложение, решающее что-то про коммит и роллбак предыдущих (а заодно и последующих) изменений?
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34013551
AI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛП
...

А при чем здесь "приложение решает"? Если, например, хранимка из пяти DML-стейтментов, обернутых в сериалайзбл-транзакцию. Четвертый из стейтментов рушится. Откуда возьмется какое-то приложение, решающее что-то про коммит и роллбак предыдущих (а заодно и последующих) изменений?

Ну так, значит, приложение, то есть "хранимка" написана, что просто откатывает изменения.

Легко написать прикладу, которая будет ловить ошибку и передавать ее на рассмотрение персоналу для решения проблемы, оставляя успешно завершенные, но не "закоммиченные" операторы. Транзакция остается открытой и готовой для продолжения после исправления ошибки. Может, правда, это только у ораклоидов так принято приложения писать...
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34013638
ЛП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 AI
Легко написать прикладу
Написать можно все что угодно. Любую приладу. И ошибки от отдельных стейтментов можно ловить, и пользователю месседж-боксы можно выкидывать, и транзакцию в подвешенном состоянии можно оставлять, и все подвешенные изменения можно заблокированными держать, пока пользователь курит над месседж-боксом. Простор открыт, ничего святого.

Речь однако не про то, кто как может в клиентском приложении извратиться. И не про то, кто как может извратиться в управляющем PL/SQL-коде.

Если транзакция шла, шла, да на коммите навернулась (случай, описываемый Гарей), то СУБД, не обладающая искусственным интеллектом, не может сделать ничего, кроме отката транзакции целиком. Я так думаю.
Откуда взялось "достаточно откатить только последнюю операцию DML", что за мифические сейф-поинты на ровном месте выросли - загадка.

Может, правда, это только у ораклоидов так принято приложения писать...
Ну почему ж, среди аксесников тож хватает людей, страдающих избытком интелекта :)
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34013702
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЕсли транзакция шла, шла, да на коммите навернулась (случай, описываемый Гарей), то СУБД, не обладающая искусственным интеллектом, не может сделать ничего, кроме отката транзакции целиком. Я так думаю.

натюрлих, только если по commit эта транзакция что-то делает, кроме изменения состояния транзакции с "активной" на "committed".
То есть, если мы всю целостность проверяем только в момент выполнения операторов, то commit никак не может завершиться ошибкой, принципиально.

Кроме того, если в транзакции оператор НЕ ВЫПОЛНИЛСЯ по ошибке, то это означает только то, что именно оператор не выполнился, и ничего более. Транзакция как была жива так и может оставаться дальше живой, и ее можно завершить по commit/rollback. Если, конечно, commit при этом не нарушит логическую целостность блока действий, который под "транзакцией" подразумевает приложение.

одно дело это когда в транзакции выполняются два взаимозависимых update (классика перевода денег с одного счета на другой) - тут как ни крути, никаких commit делать нельзя.
Но если например идет "пакетное обновление" прайса, или вставка данных, то обрамление пакета в одну транзакцию необязательно делает пакет целостным блоком для его обязательного rollback. Приложение вполне может "понять", какой именно оператор не выполнился и почему, а все остальное успешное сохранить по commit.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34013712
AI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛП
Если транзакция шла, шла, да на коммите навернулась (случай, описываемый Гарей), то СУБД, не обладающая искусственным интеллектом, не может сделать ничего, кроме отката транзакции целиком. Я так думаю.
Откуда взялось "достаточно откатить только последнюю операцию DML", что за мифические сейф-поинты на ровном месте выросли - загадка.

Может, правда, это только у ораклоидов так принято приложения писать...
Ну почему ж, среди аксесников тож хватает людей, страдающих избытком интелекта :)

В свое время Гаусс сказал о парадоксах Зенона: "Этот грек - идиот!"

Теоретизировать можно сколько угодно. В случае с задачей Гари проблем особых нет. По той простой причине, что чистых версионников не существует. Поэтому всегда найдется оператор предварительного блокирования данных типа select for update, который сделает недоступным работу второй транзакции или вызовет deadlock, приводящий к откату команды, в которой этот самый deadlock найдется. Остальное - уже обсуждали.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34013762
ЛП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 kdv
Но если например идет "пакетное обновление" прайса, или вставка данных, то обрамление пакета в одну транзакцию необязательно делает пакет целостным блоком для его обязательного rollback.
Если у Вас "пакет" не есть что-то обязательно целостное для коммита или роллбака - то и не надо называть этот "пакет" транзакцией :). Оно определению противоречит.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34013883
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛПОткуда взялось "достаточно откатить только последнюю операцию DML", что за мифические сейф-поинты на ровном месте выросли - загадка.

Думаю, непонимание связано с тем, что oracle никогда не падает по "конфликтам" на commit . Ну если быть точным - то кроме случаев deferred constraints.
Так сделано :)

На счет отката DML и savepoints вот Вам пример:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
Connected to Oracle9i Enterprise Edition Release  9 . 2 . 0 . 7 . 0  

SQL> create table ane_t(a) as select rownum from all_objects where rownum <= 10 ;

Table created

-- В oracle ddl содержит внутренний commit

SQL> select * from ane_t;

         A
----------
          1 
          2 
          3 
          4 
          5 
          6 
          7 
          8 
          9 
         10 

 10  rows selected

SQL> update ane_t set a=-a where a= 5 ;

 1  row updated

SQL> savepoint s1; -- Создадим контрольную точку

Savepoint created

SQL> update ane_t set a=-a where a= 4 ;

 1  row updated

SQL> select * from ane_t;

         A
----------
          1 
          2 
          3 
        - 4  -- Обновление после контрольной точки
        - 5  -- Обновление до контрольной точки
          6 
          7 
          8 
          9 
         10 

 10  rows selected

SQL> update ane_t set a= 0  where a= 1 ; -- провоцируем deadlock. Шаг1.

 1  row updated

-- Session 2:
SQL> update ane_t set a=a where a= 10 ;

 1  row updated

-- Session 1:

SQL> update ane_t set a= 1000  where a= 10 ; -- Строка блокирована Session 2

-- Тут сессия зависла на блокировке

-- Снова Session2:
SQL> update ane_t set a=a where a= 1 ; -- строка заблокирована Session 1

-- Тут сессия зависла на блокировке

-- Session 1: До сих пор мы висели на блокировке строки where a=10. Но тут нас вышибают по дедлоку:

update ane_t set a= 1000  where a= 10 

ORA- 00060 : deadlock detected while waiting for resource

SQL> select * from ane_t;

         A
----------
          0  -- строка заблокирована Session 1 нами перед последним вызовом. Изменения не откатились
          2 
          3 
        - 4  -- Обновление после контрольной точки. Изменения не откатились
        - 5  -- Обновление до контрольной точки. Изменения не откатились
          6 
          7 
          8 
          9 
         10  -- На попытке обновления этой строки мы получили exception. ПОСЛЕДНИЙ DML ОТКАТИЛСЯ

 10  rows selected

SQL> rollback to savepoint s1; -- Откатимся до savepoint

Rollback complete

SQL> select * from ane_t;

         A
----------
          1 
          2 
          3 
          4 
        - 5 
          6 
          7 
          8 
          9 
         10 

 10  rows selected

SQL> commit;

Commit complete

-- Session 2, отвисает:

 1  row updated

...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34013933
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛПЕсли у Вас "пакет" не есть что-то обязательно целостное для коммита или роллбака - то и не надо называть этот "пакет" транзакцией :). Оно определению противоречит.
понятно, что противоречит, но никто ж не запрещает.
однако самостоятельное завершение транзакций сервером (по rollback) я не одобряю.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34014022
Фотография Anton Demidov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvРазумеется, в версионнике есть блокировки на уровне страниц, но это "не те" блокировки. они нужны только для сериализации изменений в пределах одной страницы, и пользователь их ни в каком виде не наблюдает. Вы наверное имели в виду Oracle Latches ? Это работает немного не так, как вы себе это представляете, но в целом идея вам понятна.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34014073
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anton Demidov kdvРазумеется, в версионнике есть блокировки на уровне страниц, но это "не те" блокировки. они нужны только для сериализации изменений в пределах одной страницы, и пользователь их ни в каком виде не наблюдает. Вы наверное имели в виду Oracle Latches ? Это работает немного не так, как вы себе это представляете, но в целом идея вам понятна.Поздравляю - вы по одной фразе в состоянии понять весь объём представлений говорящего :)

Page latches есть везде - и что ?

Когда речь идёт о блокировках и архитектуре СУБД, то как правило подразумевают именно блокирование выполнения операторов другими операторами . Page latches здесь не имеют никакого отношения к архитектуре СУБД. Впрочем так же как и любые другие ср-ва мультипоточной синхронизации

Если под "чистым версионником" кто-то понимает СУБД, в которой вообще никто никого никогда не блокирует, то такого не бывает. Вообще. Да и не надо - если разрешить редактировать одну запись всем одновременно, то ну его нафиг такой "сервер".

В FB, например, менеджер блокировок есть, но он никогда не используется для блокирования записей
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34014104
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot hvlad]по одной фразе в состоянии понять весь объём представлений говорящего :)
Page latches есть везде - и что ?[quot hvlad]
Вообще говоря в Вашем случае - да :)
Когда человек, рассуждая про oracle, произносит слово "page" - с этого момента уже становится понятно, что конкретно oracle он не владеет.
Ну нет там такого понятия, просто нет... :)
При этом, разумеется , никто не ставит под сомнение "весь объем представлений".
Что же до "в чистом версионнике не бывает блокировок" - то это не более чем смешение понятий.
Где, простите, хоть намек на "без блокировок" в слове "версионник"?
"Версия" - вижу, а вот "без блокировок" - не вижу, хоть тресните :)
Разрешение конфликтов встречных обновлений - обязанность СУБД и требует синхронизации доступа к данным, т.е. тех самых блокировок.
Альтернатив что-то не просматривается даже на горизонте.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34014128
Фотография Anton Demidov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladPage latches здесь не имеют никакого отношения к архитектуре СУБД. Впрочем так же как и любые другие ср-ва мультипоточной синхронизации Похоже, что у вас пока ещё весьма туманные представления о внутренней кухне СУБД.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34014175
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anton Demidov hvladPage latches здесь не имеют никакого отношения к архитектуре СУБД. Впрочем так же как и любые другие ср-ва мультипоточной синхронизации Похоже, что у вас пока ещё весьма туманные представления о внутренней кухне СУБД.Да конечно - я тут так - погулять вышел ;)
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34014203
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автори требует синхронизации доступа к данным, т.е. тех самых блокировок.
никто не спорит, однако под "блокировкой" обычно имеют в виду блокирование строки по чтению, строки по записи и т.п.
То есть, когда сервер где-то в памяти запоминает, кто чего читает и пишет.
И такая трактовка термина "блокировки" привычна большинству, в силу массового использования этих самых "блокировочников".

То есть, когда человек произносит "блокировки", непонятно, что он имеет в виду:
а) в терминах операций над строками, высокоуровнево, без подробностей сервера
б) в терминах "блокировка по чтению/записи", то бишь запоминание "номера" записи для предотвращения каких-либо операций с ней.
в) блокировка страниц БД
г) другие блокировки, которые я не знаю.

в IB/FB есть еще например блокировка таблиц целиком, но не об этом речь.

Так что, ну есть в Оракле какой-то там latch. речь-то не про него.

p.s. и с наездами поаккуратнее. ну не знает человек про latch, и что? А вы например знаете внутреннее устройство InterBase или Firebird? И какие там где блокировки происходят? IB/FB до лампочки? Ну так и нам Оракл аналогично, в этом самом смысле, по поводу специфических особенностей или глубочайших деталей реализации.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34014218
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv автори требует синхронизации доступа к данным, т.е. тех самых блокировок.
никто не спорит, однако под "блокировкой" обычно имеют в виду блокирование строки по чтению, строки по записи и т.п.
И такая трактовка термина "блокировки" привычна большинству, в силу массового использования этих самых "блокировочников".
Ну такая трактовка, вообще говоря, ничему не противоречит.
Да, действительно, "версионник" имеет возможность обойтись без блокирования строк и может игнорировать dml-блокировки при чтении. Именно ввиду того, что может реконструировать "снимок" (snapshot) данных на некоторый момент времени, индивидуальный для каждого из параллельно выполняющихся запросов. Но это совсем не значит, что "чистота" версионника определяется наличием или отсутствием механизмов блокирования.
Oracle - "чистый" версионник. В последних релизах - просто неправдоподобно "чистый", ибо может вернуть консистентный набор данных даже из дропнутых таблиц :)
kdvв IB/FB есть еще например блокировка таблиц целиком, но не об этом речь.И в oracle есть, ну и что? kdvТак что, ну есть в Оракле какой-то там latch. речь-то не про него.Совершенно с Вами согласен. К обсуждаемому вопросу эти механизмы не имеют никакого отношения. kdv
p.s. и с наездами поаккуратнее. ну не знает человек про latch, и что?
Мнэээ... А я разве на кого-то наезжал?
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34014348
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛПСейв-поинты - сейв-поинтами
Они не только в оракле есть.
В аксесе так вообще есть полноценные многоуровневые транзакции. Но откатываются то они целиком :).


На счет Accsess-а не скажу, а то недоразумение, что в MS SQL 2000 называется вложенными транзакциями, путать с SavePoint-ами никак не следует. SavePoint дает ИМЕННО возможность ЧАСТИЧНОГО отката транзакции до указанной точки (разумеется пока транзакция не завершена). Это позволяет выполнять в транзакции действия типа "ах так не получилось ? пойдем по другому".

В Oracle каждый DML предваряется неявным savepoint-ом, и если оператор валится, АВТОМАТИЧЕСКИ происходит частичный откат к последнему SavePoint-у. Это не плохо и не хорошо, это ЕСТЬ.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34014379
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluk (Kazan)а то недоразумение, что в MS SQL 2000 называется вложенными транзакциями, путать с SavePoint-ами никак не следует.

Я смотрю, Вы большой знаток MS SQL. :) Можно с этого момента по-подробнее про "недоразумение с вложенными транзакциями в MS SQL"???
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34014497
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous
Oracle - "чистый" версионник. В последних релизах - просто
неправдоподобно "чистый", ибо может вернуть консистентный набор данных
даже из /дропнутых/ таблиц :)

Охотно поверю в это если Вы скажете сколько таких (разных) консистентных
наборов он в состоянии вернуть одновременно. Т.е. есть таблица в миллион
строк которую проапдейтили в 128 подключениях, но транзакции не
закоммитили. Потом каждое из подключений выполняет селект в своей
транзакции. Что увидит каждое из подключений?
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34014613
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovОхотно поверю в это если Вы скажете сколько таких (разных) консистентных наборов он в состоянии вернуть одновременно. Т.е. есть таблица в миллион строк которую проапдейтили в 128 подключениях ...
Есть такой хороший старый анекдот. У попа спрашивают: "Батюшка, а вот сколько Вы можете выпить водки?". Продолжение напомнить?

Dimitry SibiryakovЧто увидит каждое из подключений?
Консистентный для себя набор данных.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34014755
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pkarklin Gluk (Kazan)а то недоразумение, что в MS SQL 2000 называется вложенными транзакциями, путать с SavePoint-ами никак не следует.

Я смотрю, Вы большой знаток MS SQL. :) Можно с этого момента по-подробнее про "недоразумение с вложенными транзакциями в MS SQL"???

мненежалка(с)

БОЛMarks the end of a successful implicit or explicit transaction. If @@TRANCOUNT is 1, COMMIT TRANSACTION makes all data modifications performed since the start of the transaction a permanent part of the database, frees the resources held by the transaction, and decrements @@TRANCOUNT to 0. If @@TRANCOUNT is greater than 1, COMMIT TRANSACTION decrements @@TRANCOUNT only by 1 and the transaction stays active.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34014808
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Gluk (Kazan)

Спасибо, но BOL я и без Вашей ссылки не плохо знаю. ;) Меня интересует, что для Вас является "недоразумение"? Т.е. какого поведения Вы бы хотели? Чтобы вложенный коммит коммитил перманентно?

Gluk (Kazan)SavePoint дает ИМЕННО возможность ЧАСТИЧНОГО отката транзакции до указанной точки (разумеется пока транзакция не завершена). Это позволяет выполнять в транзакции действия типа "ах так не получилось ? пойдем по другому".

ЛП правильно подметил, что Savepointы не только в Oracle есть.

SAVE TRANSACTION (Transact-SQL)
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34014835
x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
x
Гость
IMHO

Блокировка - это приостановление текущего процесса(транзакции) до завершения работы в некотором другом процессе(транзакции).


В это смысле у "чистого версионника" действительно нет никаких блокирок.
Транзакция (логически) выполняется без прерываний другими транзакциями.
Просто при коммите может возникнуть исключение.

У "блокировочника" транзакция может быть заблокирована даже при операции чтения.

У "нечистого блокировочника" чтение никогда не блокируется, а запись блокируется как у "блокировочника".
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34014983
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pkarklinЛП правильно подметил, что Savepointы не только в Oracle есть.

SAVE TRANSACTION (Transact-SQL)

а что, по ЭТОМУ поводу я возражал ??? не заметил :(
я сказал, только то, что в Oracle ЕСТЬ SavePoint-ы и благодаря ИМ возможен автоматический откат последнего DML при возникновении исключения (что исключения ПОЯВИЛИСЬ в TSQL я ТОЖЕ знаю, не трудитесь). Что тут непонятно.

В отношении ВЛОЖЕННЫХ транзакций, я заметил, что @@TRANCOUNT не стоит путать с SavePoint-ами, это разные вещи (эмоцирнальную окраску оставим в стороне, на вкус и цвет ...)

Я ясно изложил свою точку зрения ?

P.S. А что, в Access-е SavePoint-ы таки тоже появились ???
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34015034
AI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xIMHO

Блокировка - это приостановление текущего процесса(транзакции) до завершения работы в некотором другом процессе(транзакции).

В это смысле у "чистого версионника" действительно нет никаких блокирок.
Транзакция (логически) выполняется без прерываний другими транзакциями.
Просто при коммите может возникнуть исключение.

У "блокировочника" транзакция может быть заблокирована даже при операции чтения.

У "нечистого блокировочника" чтение никогда не блокируется, а запись блокируется как у "блокировочника".

Команда или вся транзакция (в зависимости от уровня изолированности) должна видеть данные на момент своего старта. Это правило для транзакции.

Значит, select видит свой собственный, согласованный на момент старта, набор данных. Другое дело, как технологически обеспечивается это согласование. Либо появляется новая версия данных где-нибудь в кеше, восстановленная из информации для отката ("версионники"). Либо просто селект не дает менять данные никому, блокируя строки ("блокировочники"). Для упрощения многих задач в "версионниках" дополнительно вводятся блокирующие select'ы (select for update), в то время как обычный select ничего и никого не блокирует.

А вот dml работает с последней (current) версией данных. Именно поэтому для предотвращения одновременного обновления и вводятся блокировки. Иначе придется потратить кучу ресурсов на разбор версий и разрешение конфликтов (как правило на commit'е), что недопустимо в промышленной эксплуатации. Пусть теоретики трындят о "предательстве чистых идеалов мировой революции" и отсутствии "чистых версионников".

Опять-таки, технологически можно проверять какие-то правила либо сразу после выполнения команды с откатом аварийно завершившейся команды, либо только в момент фиксации транзакции с откатом всей транзакции. Здесь все зависит от производителей СУБД и разработчиков приложений.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34015135
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет, AI!
Ты пишешь:

AIA> Команда или вся транзакция (в зависимости от уровня изолированности)
A> должна видеть данные на момент своего старта. Это правило для транзакции.в библятеку!
с Гарей вместе.
читать книжки.
он знает какие.
(наверное)

hint: Read Committed about...

--
With best regards, Мимопроходящий.

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34015256
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous[quot hvlad]по одной фразе в состоянии понять весь объём представлений говорящего :)
Page latches есть везде - и что ?[quot hvlad]
Вообще говоря в Вашем случае - да :)
Когда человек, рассуждая про oracle, произносит слово "page" - с этого момента уже становится понятно, что конкретно oracle он не владеет.
Ну нет там такого понятия, просто нет... :)От того, что вместо слова page ораклисты употребляют слово block , ничего не меняется. СУБД по-прежнему общается с файлами данных блоками\страницами и по-прежнему нуждается в механизме синхронизации доступа к страницам из разных потоков. И от версионной\блокировочной архитектуры СУБД этот факт никак не зависит.

Записи, транзакции со своими уровнями изоляции, dml\ddl блокировки - это совершенно другие слои абстракции (и реализации тоже).

Так шта... не надо путать понятия, ни конкретно , ни абстрактно :)
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34015456
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluk (Kazan)а что, по ЭТОМУ поводу я возражал ??? не заметил :(
я сказал, только то, что в Oracle ЕСТЬ SavePoint-ы и благодаря ИМ возможен автоматический откат последнего DML при возникновении исключения (что исключения ПОЯВИЛИСЬ в TSQL я ТОЖЕ знаю, не трудитесь). Что тут непонятно.

В отношении ВЛОЖЕННЫХ транзакций, я заметил, что @@TRANCOUNT не стоит путать с SavePoint-ами, это разные вещи (эмоцирнальную окраску оставим в стороне, на вкус и цвет ...)

Я ясно изложил свою точку зрения ?

P.S. А что, в Access-е SavePoint-ы таки тоже появились ???

Ну, относительно ясно. Хотя по предыдущему посту посторонним действительно могло показаться, что у MS SQL со влеженными транзакциями действительно "недоразумение."

Ибо упомянув про @@trancount и не упомянув про SAVE TRANSACTION - картина получилась неполной.

На счет Аксесса, сорри, не в курсе.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34015982
ЛП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 kdv
ЛПЕсли у Вас "пакет" не есть что-то обязательно целостное для коммита или роллбака - то и не надо называть этот "пакет" транзакцией :). Оно определению противоречит.
понятно, что противоречит, но никто ж не запрещает.
Здравствуй жопа новый год :)
Определение запрещает, а кроме него - нет, никто не запрещает :))
Еще раз. Если у вас есть "нечто" ("например обновление прайса"), состоящее из отдельных блоков, успешность или неуспешность которых не зависит друг от друга, то нафига это "нечто" засовывать в транзакцию? Чтобы потом с ненужной атомарностью бороться, писать код, который позволит этому "нечту" быть неатомарным набором блоков? Создали себе проблему, а потом мужыствина её решаем

------------------

2 Gluk (Kazan)
На счет Accsess-а не скажу, а то недоразумение, что в MS SQL 2000 называется вложенными транзакциями, путать с SavePoint-ами никак не следует.
В MS SQL Server'е и в Oracle - одинаковые "недоразумения". Сейв-поинты есть и там, и там, вложенных транзакций нет ни там, ни там.
Сравнивать то, чего нет, с тем, что есть (хоть и в убогеньком виде) - можете хоть на примере сиквела, хоть на примере оракла. Результат один.

P.S. А что, в Access-е SavePoint-ы таки тоже появились ???
Я по-моему русским по белому написал, что в аксесе есть полноценные вложенные транзакции.
Для тупых повторяю - в аксесе есть вложенные транзакции.
Соответственно нет нужды в паллиативах типа сейв-поинтов (и "неявных сейв-поинтов перед началом каждого стейтмента").
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34016009
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛПДля тупых повторяю

Ну ежель ты такой умный, почему у тебя вызвал вопрос частичный откат изменений, выполненных последним DML ???

Кстати, мог бы дать сцылку на это чудо в документации. От многократного повторения что "ОНИ ЕСТЬ", собеседнику ни тепло ни холодно
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34016206
ЛП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Gluk (Kazan)
Ну ежель ты такой умный, почему у тебя вызвал вопрос частичный откат изменений, выполненных последним DML ???
Если для тупых надо повторять по два раза, то для некоторых ораклоидов - по три :)
Итак.
Рассматривался случай, когда транзакция рушится на коммите. Соответственно надо её откатывать. Тут выползает какое-то чудо, и говорит, что откатывать транзакцию целиком не надо, а надо откатить её неполностью, типо только последний DML-стейтмент. Ахуеть.

Я ж не виноват, что некоторые ораклоиды не понимают, что падение может быть не только по последнему стейтменту, что никаких сейв-поинтов может не быть установлено (да собственно изначально про них ни слова и не было), и то, что паллиативные сейв-поинты тут вообще не при делах :).
Нет, блин, начинается цирк "можно написать приладу", "каждый стейтмент с неявным сейв-поинтом", "ах так не получилось ? пойдем по другому".

Кстати, мог бы дать сцылку на это чудо в документации.
У тебя есть документация по аксесу?
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34016244
protector
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Маниакальный бред в тяжелой форме, походу, не лечится...

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34016276
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
protector
Маниакальный бред в тяжелой форме, походу, не лечится...

А с чем Вы не согласны?
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34016348
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AI
Команда или вся транзакция (в зависимости от уровня изолированности) должна видеть данные на момент своего старта. Это правило для транзакции.



пример:

1. т1 произвела изменение данных, но не закомитила.
2. т2. началась(select for update) начала проставлять SCN в слоты транзакций
но до блока изменненого транзакцией 1 еще не дошла.
3. Т1 закомитила данные.
4. т.2 дошла до блока где т1 закомитила уже после начала т2.

Вопрос: как должан поступить транзакция t2?
1. Возьмет данные из undo.
2. Возьмет закомиченные данные.


Можете привести ссылку на офицальный документ предписывающий
соблюдать это правило?
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34016449
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Вопрос: как должан поступить транзакция t2?
Чудак человек.. прочитай про уровни изолированности..


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34016480
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrow
>Вопрос: как должан поступить транзакция t2?
Чудак человек.. прочитай про уровни изолированности..


Posted via ActualForum NNTP Server 1.3

Я знаю про уровни изоляции.
Я и спросил про документ который даст
понимание этого правила для разных уровней изоляции.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34016870
AI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat- ScareCrow
>Вопрос: как должан поступить транзакция t2?
Чудак человек.. прочитай про уровни изолированности..


Posted via ActualForum NNTP Server 1.3

Я знаю про уровни изоляции.
Я и спросил про документ который даст
понимание этого правила для разных уровней изоляции.

http://download-uk.oracle.com/docs/cd/B19306_01/appdev.102/b14251/adfns_sqlproc.htm#sthref271
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34016883
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovОхотно поверю в это если Вы скажете сколько таких (разных) консистентных наборов он в состоянии вернуть одновременно. Т.е. есть таблица в миллион строк которую проапдейтили в 128 подключениях, но транзакции не закоммитили. Потом каждое из подключений выполняет селект в своей транзакции. Что увидит каждое из подключений?
В Read Commited каждое из подключений увидит свои и только свои изменения.
Масштабы не те, чтобы oracle смутился ;)
Существует определенный предел "старости" snapshot, который диагностируется знаменитой ORA-1555: snapshot too old.
Но начиная с девятого сервера я его еще ни разу не встречал ;)
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34016902
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladОт того, что вместо слова page ораклисты употребляют слово block , ничего не меняется. СУБД по-прежнему общается с файлами данных блоками\страницами и по-прежнему нуждается в механизме синхронизации доступа к страницам из разных потоков. И от версионной\блокировочной архитектуры СУБД этот факт никак не зависит.
...
Так шта... не надо путать понятия, ни конкретно , ни абстрактно :)
Боюсь, прочтя это я лишь укрепился в ранее высказанном мнении.
Не все параллели имеют место быть параллельными ;)
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34016941
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет, andrey_anonymous!
Ты пишешь:

andrey_anonymousaa> В Read Commited каждое из подключений увидит свои и только свои изменения.
песец - маленький хищный зверёк, покрытый мехом!
андруша_анонимус тоже идёт в библятеку.
составлять компанию Гаре.
и читать буквари.

--
With best regards, Мимопроходящий.

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34016942
Yo.!!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous
В Read Commited каждое из подключений увидит свои и только свои изменения.
Масштабы не те, чтобы oracle смутился ;)

это оракловый Read Commited, а у блокировочника он будет видеть чужие изменения, читать заблокированые, зато полностью в соответствии со стандартом :)
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34016967
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий andrey_anonymousaa> В Read Commited каждое из подключений увидит свои и только свои изменения.
песец - маленький хищный зверёк, покрытый мехом!
андруша_анонимус тоже идёт в библятеку.
составлять компанию Гаре.
и читать буквари.
Вы бы это, проходили бы уже...
Сессия1:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
SQL> select * from ane_t;

        ID V
---------- ------------
          1  initial
          2  initial
          3  initial
          4  initial
          5  initial
          6  initial
          7  initial
          8  initial
          9  initial

 9  rows selected

SQL> update ane_t set v='sess №1 upd' where id < 5 ;

 4  rows updated

SQL> insert into ane_t values( 10 ,'sess #1 ins');

 1  row inserted

SQL> delete ane_t where id= 5 ;

 1  row deleted

SQL> select * from ane_t;

        ID V
---------- ------------
          1  sess № 1  upd
          2  sess № 1  upd
          3  sess № 1  upd
          4  sess № 1  upd
          6  initial
          7  initial
          8  initial
          9  initial
         10  sess # 1  ins

 9  rows selected

SQL> 
Параллельная сессия2:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
SQL> select * from ane_t;

        ID V
---------- ------------
          1  initial
          2  initial
          3  initial
          4  initial
          5  initial
          6  initial
          7  initial
          8  initial
          9  initial

 9  rows selected

SQL> update ane_t set v='sess#2 upd' where id between  6  and  9 ;

 4  rows updated

SQL> insert into ane_t values( 11 ,'sess#2 ins');

 1  row inserted

SQL> delete ane_t where id= 6 ;

 1  row deleted

SQL> select * from ane_t;

        ID V
---------- ------------
          1  initial
          2  initial
          3  initial
          4  initial
          5  initial
          7  sess# 2  upd
          8  sess# 2  upd
          9  sess# 2  upd
         11  sess# 2  ins

 9  rows selected

SQL> 
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34016980
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!! andrey_anonymous
В Read Commited каждое из подключений увидит свои и только свои изменения.
Масштабы не те, чтобы oracle смутился ;)

это оракловый Read Commited, а у блокировочника он будет видеть чужие изменения, читать заблокированые, зато полностью в соответствии со стандартом :)
:)
Вот только одного не понял - ежели read commited , то какого полинома он будет видеть чужие незафиксированные изменения?
Что-то тут не так :)
Ну или уважаемые господа во главе с мимопроходящим не до конца прочитали тесткейс Dimitry Sibiryakov
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34016993
ЛП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!! andrey_anonymous
В Read Commited каждое из подключений увидит свои и только свои изменения.

это оракловый Read Commited
Блеск! Йо превзошел сам себя

Можно подумать, что "не-оракловый" ридкомитед позволит увидеть чужие незакомиченные изменения. Или оракловый "не-ридкомитед" это позволит? Зогадка, б ля...

Йо, не кури больше такую траву.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34016995
Yo.!!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous
:)
Вот только одного не понял - ежели read commited , то какого полинома он будет видеть чужие незафиксированные изменения?
Что-то тут не так :)


не, незафиксированые это было бы слишком даже для МС :) может увидет закомиченые но уже после старта нашей транзакции или прочитать старое значение записи котрую уже проапдейтили но еще не закомитили (из индекса)
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34016999
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет, andrey_anonymous!
Ты пишешь:

andrey_anonymous Мимопроходящий andrey_anonymous
aa>> В Read Commited каждое из подключений увидит свои и только свои изменения.
песец - маленький хищный зверёк, покрытый мехом!
андруша_анонимус тоже идёт в библятеку.
составлять компанию Гаре.
и читать буквари.aa> Вы бы это, проходили бы уже...
aa> Сессия1:пацталом!
андруша, в библятеку, срочна!
читать буквари и стандарты.

таки прав ЛП, "неожиданное" знакомство с Oracle,
пагубно воздействует на неокрепший мозг...

то, что у Oracle по дефолту для Read Commited
гвоздиком прибит режим NO RECORD VERSION,
личный взбрык команды разработчиков Oracle.

но поскольку, для вас лично, Oracle - священная корова,
имеете полное основание продолжать заблуждаться как вам угодно.

вот только не надо свою пиписку считать МЕРИЛОМ, всего и вся.

--
With best regards, Мимопроходящий.

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34017005
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!!не, незафиксированые это было бы слишком даже для МС :) может увидет закомиченые но уже после старта нашей транзакции Ну так это и в oracle так, однако обсуждался вполне конкретный сценарий, фиксаций не предполагающий ;) Yo.!!или прочитать старое значение записи котрую уже проапдейтили но еще не закомитили (из индекса)
А вот это опять не понял... Какая разница откуда, ежели не зафиксировано?!
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34017013
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийи читать буквари.aa> Вы бы это, проходили бы уже...
aa> Сессия1:[/quot]пацталом! [/quot]
Ну вот там и оставайтесь, если не в состоянии следить за дискуссией
Песцов разводите или найдите еще какое занятие себе по силам.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34017014
ЛП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийтаки прав ЛП, "неожиданное" знакомство с Oracle,
пагубно воздействует на неокрепший мозг...
Тссс... А то ща придет добрый модератор, и начнет удалять все ответы. Жалко ведь будет, ораклоиды (некоторые) зажигают нипадецки.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34017018
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет, andrey_anonymous!
Ты пишешь:

andrey_anonymousaa> Ну вот там и оставайтесь, если не в состоянии следить за дискуссией
aa> Песцов разводите или найдите еще какое занятие себе по силам.
андруша, вот этот твой тезис есть полный песец.
будешь спорить?

--
With best regards, Мимопроходящий.

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34017028
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий andrey_anonymousaa> Ну вот там и оставайтесь, если не в состоянии следить за дискуссией
aa> Песцов разводите или найдите еще какое занятие себе по силам.
андруша, вот этот твой тезис есть полный песец.
будешь спорить?
Ну если Вы владеете каким-либо лексиконом кроме зоологического и сумеете пояснить, что конкретно Вам не понравилось - то я подумаю, стоит с Вами спорить или это бесполезно.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34017037
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет, andrey_anonymous!
Ты пишешь:

andrey_anonymousaa> Ну если Вы владеете каким-либо лексиконом кроме зоологического и сумеете пояснить,
aa> что конкретно Вам не понравилось - то я подумаю, стоит с Вами спорить или это бесполезно.
андруша, вести дискуссию с человеком, который [удалено модератором как переход на личности]

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34017064
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!!может увидет закомиченые но уже после старта нашей транзакции Это как-то противоречит описанию READ COMMITTED в ANSI ? Yo.!!или прочитать старое значение записи котрую уже проапдейтили но еще не закомитили (из индекса)Ё... Ссылку, плиз.. Пока помедитируй над этим
Соединение 1. Запускаем
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE TABLE t (id int primary key, n int)
CREATE INDEX tn ON t(n)
GO
INSERT INTO t (id, n) SELECT  1 ,  1 
BEGIN TRAN
UPDATE t SET n =  2 
WAITFOR DELAY '00:00:10'
COMMIT
GO
DROP TABLE t
Переключаемся в Соединение 2 и выполняем
Код: plaintext
SELECT n FROM t
. С удивлением ждем окончания WAITFOR из Соединение 1.
* Обновление идет по primary key, чтение по индексу tn, можешь заглянуть в планы запроса.

P.S. Соврамши или опять ненависть к MS одолела ?
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34017104
Yo.!!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous
А вот это опять не понял... Какая разница откуда, ежели не зафиксировано?!

ну разница в пару феноменов описаных в ANSI SQL типа phantom reads

2ChA
ненависть, только ненависть :) за слова то все равно отвечать прийдется
/topic/172639&pg=-1
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34017120
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AI onstat- ScareCrow
>Вопрос: как должан поступить транзакция t2?
Чудак человек.. прочитай про уровни изолированности..


Posted via ActualForum NNTP Server 1.3

Я знаю про уровни изоляции.
Я и спросил про документ который даст
понимание этого правила для разных уровней изоляции.

http://download-uk.oracle.com/docs/cd/B19306_01/appdev.102/b14251/adfns_sqlproc.htm#sthref271

Ознакомившись с документом, что я нашел:
автор
A read-only transaction does not acquire any additional data locks to provide transaction-level read consistency. The multi-version consistency model used for statement-level read consistency is used to provide transaction-level read consistency; all queries return information with respect to the system change number (SCN) determined when the read-only transaction begins. Because no data locks are acquired, other transactions can query and update data being queried concurrently by a read-only transaction.


Но ситуации опсанной мною в примере не нашел.
Единственной зацепкой есть
автор
all queries return information with respect to the system change number (SCN)

В качестве оффтопика прошу прокоментировать зантоков Английского эту фразу.



А эта цитата противоречит вашему правилу
автор
The return set for a SELECT... FOR UPDATE may change while the query is running; for example, if columns selected by the query are updated or rows are deleted after the query started. When this happens, SELECT... FOR UPDATE acquires locks on the rows that did not change, gets a new read-consistent snapshot of the table using these locks, and then restarts the query to acquire the remaining locks.

Может я ее неправильно понял?

Я надеялся что вы мне дадите ссылку на стандарт, так как oracle
для меня не есть "священной коровой", я на нем просто деньги зарабатываю.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34017122
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!!
/topic/172639&pg=-1
В этом небезынтересном обсуждении меня заинтересовало вот это сообщение: /topic/172639&pg=-1#1440243

ChA , не затруднит ли Вас сказать, действительно ли дела обстоят подобным образом; проверяли ли Вы это? Если я правильно понял, речь идет о том, что MSSQL на уровне RC не обеспечивает read consistency.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34017143
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat-
Но ситуации опсанной мною в примере не нашел.
Единственной зацепкой есть
автор
all queries return information with respect to the system change number (SCN)
В качестве оффтопика прошу прокоментировать зантоков Английского эту фразу.
А эта цитата противоречит вашему правилу
автор
The return set for a SELECT... FOR UPDATE may change while the query is running; for example, if columns selected by the query are updated or rows are deleted after the query started. When this happens, SELECT... FOR UPDATE acquires locks on the rows that did not change, gets a new read-consistent snapshot of the table using these locks, and then restarts the query to acquire the remaining locks.
Может я ее неправильно понял?
Ооооо... Тут мы попадаем в царство привидений.
Вы только что открыли для себя один из самых неоднозначных и малоизвестных широкой общественности механизмов oracle, который называется statement restart.
На стандарт кивать бесполезно, это проприетарное ноу-хау :)
Смысл в том, что ежели dml -запросу (включая select for udate) не удается заблокировать консистентный набор строк, то oracle... просто откатывает statement и начинает все сначала, смещая SCN на момент повторного старта ежели дело происходит в read commited или выкидывает "Can't serialize access" в serializable.
К readonly это все не относится, поскольку dml в такой транзакции запрещен, а читаемый набор набор просто реконструируется на заданный момент времени (раздел read consistency and concurrency в oracle concepts).
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34017234
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!!/topic/172639&pg=-1Судя по комментарию, Вы не совсем поняли смысл той дискуссии. softwarerMSSQL на уровне RC не обеспечивает read consistency.Это было лишь мое предположение, достаточно гипотетическое и ничем, кроме той дискуссии, не подтвержденное. Подозрение возникает на основании той самой оптимизации, которую, по словам Merle, выполняет сервер, т.е., в некоторых случаях он может не накладывать shared блокировку при чтении. Собственно, он там же, но чуть раньше, писал о том же самом. Сам лично специально не проверял, так как это поведение легко изменяется в желаемую сторону добавлением хинта HOLDLOCK для соответствующей таблицы. IMHO, подобное поведение формально не противоречит описанию READ COMMITTED, так как чтение происходит только данных из подтвержденных транзакций. Хотя, в целом, это, конечно, было несколько неожиданно. И хотя вероятность подобных несогласованностей на практике, опять же, IMHO, не велика, тем не менее неприятно, так как о такой "оптимизации" узнать практически невозможно, пока не натолкнешься на сам факт.
Насколько знаю, в 2005 read consistency на уровне оператора обеспечивается способом аналогичным Oracle при использовании механизма SNAPSHOT-ов. Впрочем, это на уровне знакомства с отдельными источниками, ничего более внятного предложить не могу, не имел дела.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34017289
Yo.!!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChAСудя по комментарию, Вы не совсем поняли смысл той дискуссии.
вполне вероятно, я имел ввиду вот эту фичу:
GreenSunrise Итак, в первом коннекте есть эксклюзивный лок на оба индекса - и кластерный и некластерный. Эксклюзивная блокировка означает, что все другие типы блокировок с ней несовместимы. Несмотря на это утверждение, второй коннект читает данные, опираясь на кластерный индекс. Для чтения необходимо наложить как минимум shared блокировку, поскольку хинта nolock нет.


ну и ваш вопрос о целостности на уровне одного запроса тоже очень интересует, может кто другой знает точный ответ ?

ChA
Насколько знаю, в 2005 read consistency на уровне оператора обеспечивается способом аналогичным Oracle при использовании механизма SNAPSHOT-ов. Впрочем, это на уровне знакомства с отдельными источниками, ничего более внятного предложить не могу, не имел дела.
угу, как говорится верной дорогой идете товарищи, говорят вот и Sybase (ASA) тоже MVCC добавила, даешь оракловый MVCC стандарт ! :)
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34017312
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не понимаю, чего тут такую кашу развели с несчастным READ COMMITED - ведь написанно же, читаем закомиченные данные. Хотим второй раз те же данные считать, ставим REPEATABLEREAD, боимсе при повторном чтении новые записи схлопотать - ставим SERIALIZABLE. Все как написано в стандарте, работать в любом сервере должно одинаково по смыслу. Не понятно к чему здесь можно спорить ... а то вон Yo! вообще уже по индексам незакомиченные данные читать начал прямо на RC, кошмар да и только
--
www.rusug.ru - портал русскоязычной группы пользователей Sybase
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34017360
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!!вполне вероятно, я имел ввиду вот эту фичу:
[quot GreenSunrise ]Итак, в первом коннекте есть эксклюзивный лок на оба индекса - и кластерный и некластерный. Эксклюзивная блокировка означает, что все другие типы блокировок с ней несовместимы. Несмотря на это утверждение, второй коннект читает данные, опираясь на кластерный индекс. Для чтения необходимо наложить как минимум shared блокировку, поскольку хинта nolock нет.Ну, пожалуйста, прочитай внимательнее дискуссию, не придумывай ничего своего. Повторяю, это не имеет ничего общего с твоим комментарием о возможности чтения незакомиченных данных на уровне RC. Yo.!!ну и ваш вопрос о целостности на уровне одного запроса тоже очень интересует, может кто другой знает точный ответ ?Не может, а наверняка знает кто-либо из разработчиков или лиц, к ним приближенных, одним из которых, насколько понимаю, является вышеупомянутый Merle, достаточно известная личность на RSDN. Многим его утверждениям вполне можно доверять, IMHO. Хотя возможно некоторые стоит и перепроверить...
Yo.!!говорят вот и Sybase (ASA) тоже MVCC добавила, даешь оракловый MVCC стандарт !Возможно неправ, но, по некоторым отрывочным сведениям, Oracle просто не имеет RC, он у него фактически эквивалентен RR. Другое дело, что существует критика существующих на сегодняшний день уровней изоляции в ANSI, но это уже совсем другоя тема.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34017379
Yo.!!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChAНу, пожалуйста, прочитай внимательнее дискуссию, не придумывай ничего своего. Повторяю, это не имеет ничего общего с твоим комментарием о возможности чтения незакомиченных данных на уровне RC.

блин еще один, непойму где вы (и остальные) увидели "чтения незакомиченных данных", я упомянул "прочитать старое значение записи котрую уже проапдейтили "

ChAМногим его утверждениям вполне можно доверять, IMHO. Хотя возможно некоторые стоит и перепроверить...

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

ChA
Возможно неправ, но, по некоторым отрывочным сведениям, Oracle просто не имеет RC, он у него фактически эквивалентен RR. Другое дело, что существует критика существующих на сегодняшний день уровней изоляции в ANSI, но это уже совсем другоя тема.
все проще, в оракле просто другие уровни изолированости. стандарт писался под блокировочник и ораклу просто пришлось называть свои уровни так, чтоб удолетворять требованиям стандарта.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34017427
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!!блин еще один, непойму где вы (и остальные) увидели "чтения незакомиченных данных", я упомянул "прочитать старое значение записи котрую уже проапдейтили "Да, sorry, был неправ. Было Yo.!!или прочитать старое значение записи котрую уже проапдейтили но еще не закомитили (из индекса)Где пример или ссылка ? Та которая давали ранее никак не относится к этому утверждению...

Yo.!!честно говоря он тут произвел неизгладимое впечатление обнаружив блокировки в читающих транзакциях оракла , может найдутся другие кандидатуры ?А шо, таки нету ? :)
Для меня, например, "читающая транзакция" есть нонсенс, хотя в понятиях работы версионного механизма Oracle, насколько понимаю, это вполне корректный термин.

P.S. Вообще говоря, можно было бы провести соответствующий тест, но, если честно, не вижу смысла, хотя методику, пожалуй, представляю.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34017431
Фотография Anton Demidov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChAДля меня, например, "читающая транзакция" есть нонсенс, хотя в понятиях работы версионного механизма Oracle, насколько понимаю, это вполне корректный термин. А если добавить "блокирующая", то будет понятнее?
Получится "блокирующая читающая транзакция" (та, что не даст в MSSQL другой транзакции обновить эти же строки)
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34017448
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anton DemidovА если добавить "блокирующая", то будет понятнее?
Получится "блокирующая читающая транзакция" (та, что не даст в MSSQL другой транзакции обновить эти же строки)Если не вдаваясь в определения, коим полон Инет, то для меня транзакция - это последовательность изменений БД из одного целостного состояния в другое. Соответственно, чтение, само по себе, транзакцией не считается. В блокировочниках, как правило, при любом чтении используемые данные блокируются, за исключением разве, особых условий, когда это не делается, наподобие упомянутых здесь ранее. Отсюда, нет необходимости изобретать эвфемизмов типа "читающая транзакция". Так что, возможно, надо было быть проще и прямо так и писать "блокирующее чтение", так как к транзакциям в прямом("классическом") смысле эта процедура никакого отношения не имеет, IMHO.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34017522
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChA Anton DemidovА если добавить "блокирующая", то будет понятнее?
Получится "блокирующая читающая транзакция" (та, что не даст в MSSQL другой транзакции обновить эти же строки)Если не вдаваясь в определения, коим полон Инет, то для меня транзакция - это последовательность изменений БД из одного целостного состояния в другое. Соответственно, чтение, само по себе, транзакцией не считается. В блокировочниках, как правило, при любом чтении используемые данные блокируются, за исключением разве, особых условий, когда это не делается, наподобие упомянутых здесь ранее. Отсюда, нет необходимости изобретать эвфемизмов типа "читающая транзакция". Так что, возможно, надо было быть проще и прямо так и писать "блокирующее чтение", так как к транзакциям в прямом("классическом") смысле эта процедура никакого отношения не имеет, IMHO.
Мне кажется, что для того чтобы произвести целостное состояние из одного в другое в первую очередь требуется чтение данных, а уж потом их изменение (даже на вставку таблиц с FK будут читаться родительские таблицы). Соответственно чтение должно обеспечить доступ к целостной информации, а значит так же включается в понятие транзакции. По стандарту допустимое качество целостности информации определяется уровнями изоляции, на практической реализации это разруливается shared-блокировками или работой с версиями записей для различных СУБД. Хотя конечно вопрос спорный.

Еще хотелось бы задать немного ламерский вопрос тем, кто работает с версионниками (так сказать для ликбеза) - как на версионнике обеспечить уровень изоляции SERIALIZABLE для гарантированного отсутствия фантомов.
К примеру мне нужно по условию задачи вставить в Таблицу1 запись и если это первая вставленная запись, то вставить запись в Таблицу2. Никаких уникальных индексов/ограничений на обеих таблицах нет. Для блокировочника даже на уровне RC этот вариант замечательно отработает. Что нужно сделать на версионнике, чтобы 2 сессии при одновременной вставке первой записи в Таблицу1 получили на выходе только 1 запись в Таблице2 ? (естественно без блокировки таблицы в эклюзивном режиме).
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34017632
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛПтранзакция рушится на коммите.


Специально для УМНЫХ аксессников - ТРАНЗАКЦИЯ не рушиться. Конкретный DML ловит Exception, вполне штатная ситуация (транзакции от этого не жарко и не холодно). Далее ПРИЛОЖЕНИЕ (или оператор, в случае тяжелой потологии, но опять эе через какое-то ПРИЛОЖЕНИЕ а не силой мысли) решает что делать с этой транзакцией, откатить, закомитить или попробовать что-то еще.

ЛП
что никаких сейв-поинтов может не быть установлено


Ишо раз (последний, потерпи) пабуквам:

Savepoint в Oracle выставляется АВТОМАТИЧЕСКИ, и откат к нему в случае неуспешного DML также производится АВТОМАТИЧЕСКИ

ЛП
У тебя есть документация по аксесу?

Ага, есть. Вместе с аксессом
ты ниумничай, ты сцылку дай. А то я фпервый раз пра такое чудо слышу.

Хочется какта приобщиться
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34017727
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUS
Что нужно сделать на версионнике, чтобы 2 сессии при одновременной
вставке первой записи в Таблицу1 получили на выходе только 1 запись в
Таблице2 ? (естественно без блокировки таблицы в эклюзивном режиме).

Не нужно ничего делать ибо полный облом: в таблице2 будет две записи в
силу одного из базовых принципов транзакций (не помню, правда которого
из ACID. Кажется, I): каждая транзакция работает с базой так будто
других транзакций не существует. Если блокировочники позволяют нарушать
ACID, это... их ниша.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34017737
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChAСудя по комментарию, Вы не совсем поняли смысл той дискуссии.
Почему-то я уверен, что если я попрошу Вас логически строго обосновать свое утверждение, мы придем к выводу, что Вы брякнули абы что.

ChAЭто было лишь мое предположение, достаточно гипотетическое и ничем, кроме той дискуссии, не подтвержденное.
То есть, если я правильно понял, Вы не производили экспериментов, не задавали вопросов и другими способами не выясняли, какой же все-таки результат запроса вернет Вам сервер.

Тогда вопрос: каким образом Вы добиваетесь того, что приложение ведет себя предсказуемым образом? Пихаете в каждый нетривиальный запрос хинт holdlock? Используете только простые запросы? Что-то другое? Оставляете на самотек, "авось не случится", наконец?

ChAНасколько знаю, в 2005 read consistency на уровне оператора обеспечивается способом аналогичным Oracle при использовании механизма SNAPSHOT-ов.
Нельзя ли ссылку?
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34017746
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUSЕще хотелось бы задать немного ламерский вопрос тем, кто работает с версионниками (так сказать для ликбеза) - как на версионнике обеспечить уровень изоляции SERIALIZABLE для гарантированного отсутствия фантомов.
Но-но, попрошу без провокаций :)
Согласованое изменение данных требует синхронизации, будь ты хоть десятирежды версионником.
С другой стороны, попробуйте приветси хоть одну реальную задачу, под которую требуется контроль количества записей в таблице и которую нельзя решить без такого контроля после небольшой нормализации :)
Что же до мнимых преимуществ блокировочников в плане соответствия стандарту - то я с удовольствием променяю это соответствие на возможность запустить отчет по оперативным OLTP-таблицам в разгар рабочего дня ;)
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34017826
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
ASCRUS
Что нужно сделать на версионнике, чтобы 2 сессии при одновременной
вставке первой записи в Таблицу1 получили на выходе только 1 запись в
Таблице2 ? (естественно без блокировки таблицы в эклюзивном режиме).

Не нужно ничего делать ибо полный облом: в таблице2 будет две записи в
силу одного из базовых принципов транзакций (не помню, правда которого
из ACID. Кажется, I): каждая транзакция работает с базой так будто
других транзакций не существует. Если блокировочники позволяют нарушать
ACID, это... их ниша.
Posted via ActualForum NNTP Server 1.3
С чего это вдруг нарушение ACID у блокировочников я не очень понял. На блокировочнике и будет, что транзакции обе отработают согласованно, как будто обе работают в монопольном режиме и во второй таблице будет только одна запись.

andrey_anonymous Но-но, попрошу без провокаций :)
Согласованое изменение данных требует синхронизации, будь ты хоть десятирежды версионником.
С другой стороны, попробуйте приветси хоть одну реальную задачу, под которую требуется контроль количества записей в таблице и которую нельзя решить без такого контроля после небольшой нормализации :)
Что же до мнимых преимуществ блокировочников в плане соответствия стандарту - то я с удовольствием променяю это соответствие на возможность запустить отчет по оперативным OLTP-таблицам в разгар рабочего дня ;)
Это не провокация, а вопрос. Задача приведена упрощенная, однако реально существует определенный круг таких задач, тот же биллинг. Я тоже как бы запускаю отчеты по оперативным OLTP таблицам на блокировочнике в разгар рабочего дня и проблем не наблюдаю, так как есть функционал сервера, позволяющий решать проблему блокирования читателей с помощью тех же времянок. И меня интересует не стандарт, а именно фантомы в чистых версионниках - хочется понять насколько сейчас по сравнению с ними выгоднее гибриды (тот же MSSQL 2005 или ASA10), которые позволяют одновременно работать на блокировках с честным SERIALIZABLE для OLTP и через версии записей/страниц организовывать SNAPSHOP для OLAP.

P.S. Я так правильно понимаю у чистых версионников моя поставленная проблема должна решается не сервером, а проектировщиком (как я решаю такую же проблему для OLAP на блокировочнике) ?
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34017830
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous
onstat-
Но ситуации опсанной мною в примере не нашел.
Единственной зацепкой есть
автор
all queries return information with respect to the system change number (SCN)
В качестве оффтопика прошу прокоментировать зантоков Английского эту фразу.
А эта цитата противоречит вашему правилу
автор
The return set for a SELECT... FOR UPDATE may change while the query is running; for example, if columns selected by the query are updated or rows are deleted after the query started. When this happens, SELECT... FOR UPDATE acquires locks on the rows that did not change, gets a new read-consistent snapshot of the table using these locks, and then restarts the query to acquire the remaining locks.
Может я ее неправильно понял?
Ооооо... Тут мы попадаем в царство привидений.
Вы только что открыли для себя один из самых неоднозначных и малоизвестных широкой общественности механизмов oracle, который называется statement restart.
На стандарт кивать бесполезно, это проприетарное ноу-хау :)
Смысл в том, что ежели dml -запросу (включая select for udate) не удается заблокировать консистентный набор строк, то oracle... просто откатывает statement и начинает все сначала, смещая SCN на момент повторного старта ежели дело происходит в read commited или выкидывает "Can't serialize access" в serializable.
К readonly это все не относится, поскольку dml в такой транзакции запрещен, а читаемый набор набор просто реконструируется на заданный момент времени (раздел read consistency and concurrency в oracle concepts).

Андрей,
поведение рестарта для меня логично и понятно,

Мне неясно откуда взялось правило:

AI

Команда или вся транзакция (в зависимости от уровня изолированности) должна видеть данные на момент своего старта. Это правило для транзакции.



ИХМО его практически не возможно выполнить в
любой многопользовательской(многонитевой) СУБД
при приемлимой производительности.

Я хотел найти этому подтверждение или опровержение.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34017921
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUS
С чего это вдруг нарушение ACID у блокировочников я не очень понял. На
блокировочнике и будет, что транзакции обе отработают согласованно, как
будто обе работают в монопольном режиме и во второй таблице будет только
одна запись.

"Согласованно" и "независимо" (вроде бы I это как раз Independency) это
как бы антонимы, ну да ладно...
ASCRUS
P.S. Я так правильно понимаю у чистых версионников моя поставленная
проблема должна решается не сервером, а проектировщиком (как я решаю
такую же проблему для OLAP на блокировочнике) ?

За все версионники не скажу, но для FB - да. SERIALIZABLE там в принципе
не поддерживается. Хотя... с транзакциями уровня "consistency" я не
работал. Впрочем, их не рекомендуют даже собаководы ибо ахтунг.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34017945
Yo.!!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUS
Это не провокация, а вопрос.

это провакация, у вас уже есть задача с которой вы так и не справились.

ASCRUS
Я тоже как бы запускаю отчеты по оперативным OLTP таблицам на блокировочнике в разгар рабочего дня и проблем не наблюдаю, так как есть функционал сервера, позволяющий решать проблему блокирования читателей с помощью тех же времянок.

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

ASCRUSИ меня интересует не стандарт, а именно фантомы в чистых версионниках - хочется понять насколько сейчас по сравнению с ними выгоднее гибриды (тот же MSSQL 2005 или ASA10), которые позволяют одновременно работать на блокировках с честным SERIALIZABLE для OLTP и через версии записей/страниц организовывать SNAPSHOP для OLAP.
ну и как вы это себе представляете ? OLPT задыхается в блокировок и дедлогах ставя на каждый чих локи и к тому же еще создает версии строк для MVCC режима, как вы думаете какой перфоменс будет у такого подхода ?

ASCRUS
P.S. Я так правильно понимаю у чистых версионников моя поставленная проблема должна решается не сервером, а проектировщиком (как я решаю такую же проблему для OLAP на блокировочнике) ?
еще раз, сформулируйте задачу из реальной жизни и вам все рассскажут, считать кол-во записей в таблице - это результат кривого проэктирования.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34017990
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat-Андрей,
поведение рестарта для меня логично и понятно,
Мне неясно откуда взялось правило:
AI Команда или вся транзакция (в зависимости от уровня изолированности) должна видеть данные на момент своего старта. Это правило для транзакции.
ИХМО его практически не возможно выполнить в
любой многопользовательской(многонитевой) СУБД
при приемлимой производительности.
А говорите понятно :)
Тут все просто. Запрос должен вернуть согласованный набор данный на некоторый момент времени.
Для "блокировочников" это момент окончания запроса, для "версионников" - момент начала. Просто ввиду особенностей технологии.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34018005
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUSP.S. Я так правильно понимаю у чистых версионников моя поставленная проблема должна решается не сервером, а проектировщиком (как я решаю такую же проблему для OLAP на блокировочнике) ?
Любая проблема в конечном итоге решается человеком.
Ваш конкретный задачк - тоже.
"На вскидку" можно предложить решения:
- на функциональных индексах
- на триггерах и пользовательских блокировках
- на материализованных представлениях и uniq
- перепроектировать.

... А про биллинг - это Вы зря. Нет там таких задач, я бы знал ;)
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34018018
Funny_Falcon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUS прав в элементарной вещи: эфективно работающий биллинг на чистом версионнике без блокировок не написать.
Ну ладно, скажем так: для всех проблем, что я увидел, блокировки были единственным мною замеченным корректно работающим решением.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34018124
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous
Что же до мнимых преимуществ блокировочников в плане соответствия стандарту - то я с удовольствием променяю это соответствие на возможность запустить отчет по оперативным OLTP-таблицам в разгар рабочего дня ;)

Андрей, разберемся в следующих вопросах.

1.Удобное формирование репортов.

Версионники действительно хорошо и удобно делают репорты в середине
рабочего дня на OLTP. С этим спорить трудно.

Теперь вопрос 2-й на основанни чего они его делают

Давайте рассмотрим задачу о "хлебе насущном"
Она заключается в слудующем
У нас есть гипотетических гиперрмаркет есть кассы( клиенты СУБД).
Условие задачи состоит в том что клиенты берут ~50 наименований товара и 90% клиентов супермаркетапокупают хлеб.
По другим позициям пересечений немного.
Что при этом происходит.
Если брать к примеру oracle
Все транзакции толкутся вокруг позиции хлеб(пытаясь установить
блокировку select for update) идет постоянный рестарт.
fetch по другим позициям в это время тоже зделать нельзя( курсор еще не готов), и записи по другим позиция уже заблокированы. И паралельно обрабатываться не могут.

Что при этом будет у блокировочника.
Остальные 49 позиций он будет(может) обрабатывать, когда останется только хлеб, он дождется своей очереди обработает и отпустит
(закомитит) все записы.

При этом oracle только начнет фетчить и обрабатывать, продолжая держать все записи курсора.

А что будет с версионником который не имеет рестарта я боюсь себе даже предствить.

Мое резюме по этому поводу:
Для каждой задачи можно найти свои достоинства и
недостатки в любой СУБД.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34018127
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Funny_Falcon
ASCRUS прав в элементарной вещи: эфективно работающий биллинг на чистом
версионнике без блокировок не написать.

А эффективно работающий биллинг позарез требует хранение текущих
остатков? Ну извините тады...
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34018135
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Funny_FalconASCRUS прав в элементарной вещи: эфективно работающий биллинг на чистом версионнике без блокировок не написать.
Ну ладно, скажем так: для всех проблем, что я увидел, блокировки были единственным мною замеченным корректно работающим решением.
Что-то мне подсказывает, что Вы более чем тенденциозны.
По крайней мере биллинги ведущих операторов сотовой связи РФ и многих (ну не всех же я знаю :) зарубежных писаны на оракеле, а не на MSSQL/DB2 ;)
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34018156
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat-Если брать к примеру oracle
Простите, но тут Вы пытаетесь навязать свойства какой-то очень неудачной реализации серверу БД.
Какой курсор "не готов"? Почему он "не готов"?
Если Вам интересны конкретные технические решения, которые могли бы работать в Вашей задаче - могу проконсультировать, но это уже оффтоп поэтому предпочтительно все-таки в личной переписке.
Могу даже спроектировать и сделать пилот, но уже за деньги :)
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34018168
Funny_Falcon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov А эффективно работающий биллинг позарез требует хранение текущих
остатков? Ну извините тады...
Более - менее RealTime биллинг для телефонной связи (с задержкой меньше минуты) требует хранения информации о текущих разговоров.

andrey_anonymous Что-то мне подсказывает, что Вы более чем тенденциозны.
По крайней мере биллинги ведущих операторов сотовой связи РФ и многих (ну не всех же я знаю :) зарубежных писаны на оракеле, а не на MSSQL/DB2 ;)
У меня тоже на PostgreSQL - а он еще больщий версионник чем Oracle :-)
На версионнике биллинг получается лучше (я и не спорю), но без блокировок по-любому не обойтись (моё мнение).
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34018173
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий
Боюсь, моих телепатических способностей недостаточно для беседы с Вами.
Вернемся к этой теме когда научитесь мычать более членораздельно.
С пожеланиями скорейшего выздоровления,
Андрей.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34018180
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Funny_FalconНа версионнике биллинг получается лучше (я и не спорю), но без блокировок по-любому не обойтись (моё мнение).
Я так до сих пор и не смог осознать связи "версионник значит без блокировок" :(
Ну откуда оно растет, кто-нибудь знает?!
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34018218
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous
А говорите понятно :)
Тут все просто. Запрос должен вернуть согласованный набор данный на некоторый момент времени.
Для "блокировочников" это момент окончания запроса, для "версионников" - момент начала. Просто ввиду особенностей технологии.

Я выше приводил конкрентый пример, и мне хотелось бы разобраться
в механизме работы oracle для этого примера и разных уровней изоляции.
Может я, читая сыылку, пропустил фразу о том что это набор
должен быть согласован на конкреный момент времени и СУБД это гарантирует.
Не могли бы Вы процитировать, если несложно.

Ихмо сам факт наличия рестарта противоречит
либо согласованности набора на конкретный момент времени,
либо логической целостности этого набора с точки зрения изоляции.

Можно вопрос поставить по другому.
На каких уровнях изоляции будет рестарт в ситуации описанной в моем примере?
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34018230
Funny_Falcon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2andrey_anonymous
andrey_anonymousЯ так до сих пор и не смог осознать связи "версионник значит без блокировок" :(
Ну откуда оно растет, кто-нибудь знает?!
мир, дружба, жевачка?!! :-)
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34018283
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous onstat-Если брать к примеру oracle
Простите, но тут Вы пытаетесь навязать свойства какой-то очень неудачной реализации серверу БД.

Какой курсор "не готов"? Почему он "не готов"?

Рассказываю:
При открытии курсора select for update
oracle не вернет управление из open до тех пор пока
для всех записей курсора в слоты транзакций в соответствующих
блоках не будет проставлен SCN.
Для того что бы проставить SCN предидущая транзакция
изменяющая эту запись должна быть уже закомичена или
откатана.

andrey_anonymous
Если Вам интересны конкретные технические решения, которые могли бы работать в Вашей задаче - могу проконсультировать, но это уже оффтоп поэтому предпочтительно все-таки в личной переписке.
Могу даже спроектировать и сделать пилот, но уже за деньги :)

Это гипотетическая задача разрешения конкурентного доступа к данным.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34018294
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat-Я выше приводил конкрентый пример, и мне хотелось бы разобраться
в механизме работы oracle для этого примера и разных уровней изоляции.

Вы про этот пример?
В oracle: в зависимости от уровня изолированности и характера изменений, произведенных t1 t2 может либо взять закоммиченные, либо рестартовать, либо выбросить "Can\'t serialize access". UNDO взять не может. onstat-Может я, читая сыылку, пропустил фразу о том что это набор
должен быть согласован на конкреный момент времени и СУБД это гарантирует.
Ищите по словосочетанию "Read Consistency" и обрящете. onstat-Ихмо сам факт наличия рестарта противоречит
либо согласованности набора на конкретный момент времени,
либо логической целостности этого набора с точки зрения изоляции.
Почему? В read commited рестарт для приложения выглядит как будто
этот dml-statement начал выполняться позже.
Т.е. переносится точка начала выполнения.
В serializable рестарта не будет - будет exception.
В readonly dml запрещен. onstat-
Можно вопрос поставить по другому.
На каких уровнях изоляции будет рестарт в ситуации описанной в моем примере?
Read Commited, при наличии конфликта по изменяемым данным.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34018331
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat- andrey_anonymous onstat-Если брать к примеру oracleКакой курсор "не готов"? Почему он "не готов"?

Рассказываю:
При открытии курсора select for update
Простите, а зачем пытаться заблокировать сразу все да еще и надолго в условиях высокой конкуренции?
Кстати, раз случай гипотетический, давайте для примера Вы расскажете как эту задачу решить на "блокировочнике" - чтобы понятнее было, что конкретно сравниваем. Я попробую предложить аналогичный функционал на oracle.
Похожие задачи решать приходилось, но не до конца ясен предложенный дизайн и суть затруднений.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34018541
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!!вы это у юзеров спросите, вы то может и не наблюдаете проблем, их юзера наблюдают. выстривать все транзакции в очередь и разгребать их одним джобом это "функционал сервера, позволяющий решать проблему" :)
Все ответы Yo.!! сводятся к 2 простым вещам:
1. Фигня, везде есть выделенка
2. Блокировочник это такая страшная штука с деадлоками, от которой все страдают. Сам я не пробовал, но читал рекламный проспект Ларри, где все это подробно описано (с картинками).

Ну ну
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34018631
Yo.!!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUS
2. Блокировочник это такая страшная штука с деадлоками, от которой все страдают. Сам я не пробовал, но читал рекламный проспект Ларри, где все это подробно описано (с картинками).

зачем же Ларри, про ужасы блокировок могу с MSDN, могу с ibm.com к стате интересно было бы почитать чем мотивирует Sybase введением MVCC ;)

ASCRUS, так что реальной задачи вы так и не смогли придумать ? поставте наместо злобных ораклойдов, дайте задачу которую на MVCC нельзя решить прямо. Ораклойды вам такую задачу дали, вы не справились, может стоит достойно ответить, а не лить тонны булшита на обстрактные темы ?
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34018674
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous
Ищите по словосочетанию "Read Consistency" и обрящете.

onstat-
Ихмо сам факт наличия рестарта противоречит
либо согласованности набора на конкретный момент времени,
либо логической целостности этого набора с точки зрения изоляции.



Почему? В read commited рестарт для приложения выглядит как будто
этот dml-statement начал выполняться позже.
Т.е. переносится точка начала выполнения.
В serializable рестарта не будет - будет exception.
В readonly dml запрещен.

[/quot]


Исходя из таблицы консистентный набор по времени для транзакции
можно получить только в Serializable.




Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
Operation                                          Read Committed                Serializable 
--------------------------------------------------------------------------------
Dirty write                                         Not Possible                    Not Possible
 
Dirty read Not                                     Possible                         Not Possible
 
Non-repeatable read                            Possible                         Not Possible
 
Phantoms                                           Possible                         Not Possible
 
Compliant with ANSI/ISO SQL 92             Yes                              Yes
 
Read snapshot time                             Statement                     Transaction
 
Transaction set consistency            Statement level                 Transaction level
 
Row-level locking                                   Yes                           Yes
 
 Readers block writers                               No                             No
 
Writers block readers                               No                             No  
Different-row writers block writers              No                             No
 
Same-row writers block writers                 Yes                             Yes
 
Waits for blocking transaction                  Yes                              Yes
 
Subject to "can't serialize access" error       No                             Yes
 
Error after blocking transaction aborts       No                               No
 
Error after blocking transaction commits     No                               Yes
 

Есть сомнения в правдивости таблицы для выденный параметров если 2
конкурентные транзакции находятся в Serializable
Я не могу поянть механизма, чем это достигается.

Если смотреть в комплексе, то достоинств по сравнению с блокировочниками, совсем не много.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34018684
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!!
ASCRUS, так что реальной задачи вы так и не смогли придумать ? поставте наместо злобных ораклойдов, дайте задачу которую на MVCC нельзя решить прямо. Ораклойды вам такую задачу дали, вы не справились, может стоит достойно ответить, а не лить тонны булшита на обстрактные темы ?
Если уж на такой примитивной человек признаётся, что на Оракл не может выполнить поставленных условий - то чего уж говорить про серьёзные :)

Это примерно как будущее предсказывать - на пару дней вперёд не могу, а вот лет на 100 - пожалуйста!
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34018726
Yo.!!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSuper
Если уж на такой примитивной человек признаётся, что на Оракл не может выполнить поставленных условий - то чего уж говорить про серьёзные :)

вот можно эту задачу сформулировать в терминах бизнес логики, а то в таком виде я не пойму чо куда а главное зачем.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34018733
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!! ASCRUS
2. Блокировочник это такая страшная штука с деадлоками, от которой все страдают. Сам я не пробовал, но читал рекламный проспект Ларри, где все это подробно описано (с картинками).

зачем же Ларри, про ужасы блокировок могу с MSDN, могу с ibm.com к стате интересно было бы почитать чем мотивирует Sybase введением MVCC ;)

ASCRUS, так что реальной задачи вы так и не смогли придумать ? поставте наместо злобных ораклойдов, дайте задачу которую на MVCC нельзя решить прямо. Ораклойды вам такую задачу дали, вы не справились, может стоит достойно ответить, а не лить тонны булшита на обстрактные темы ?
Гм, если фантомы это абстрактные темы, а реальные задачи только на отчеты ориентированы, то я умолкаю.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34018764
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous onstat- andrey_anonymous onstat-Если брать к примеру oracleКакой курсор "не готов"? Почему он "не готов"?

Рассказываю:
При открытии курсора select for update
Простите, а зачем пытаться заблокировать сразу все да еще и надолго в условиях высокой конкуренции?
Кстати, раз случай гипотетический, давайте для примера Вы расскажете как эту задачу решить на "блокировочнике" - чтобы понятнее было, что конкретно сравниваем. Я попробую предложить аналогичный функционал на oracle.
Похожие задачи решать приходилось, но не до конца ясен предложенный дизайн и суть затруднений.

Систематезируем условия абстрактной задачи.
Есть наборы товаров с количеством в таблице, они уже закомичены.
Нужно проводить по остаткам и по кассе эти наборы за одну транзакцию каждый, в паралельных сессиях, при том, что один одни товар
встречается в 90% наборов.
Такая постановка Вас устроит?
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34018809
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat- andrey_anonymous
Ищите по словосочетанию "Read Consistency" и обрящете.
Исходя из таблицы консистентный набор по времени для транзакции
можно получить только в Serializable.
Для транзакции - да, только в serializable или readonly. Не думаю, что это специфично для oracle.
Транзакция подразумевает некий набор операций.
Read commited в oracle предполагает согласованность данных на уровне statement. onstat-

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Operation                                          Read Committed                Serializable 
--------------------------------------------------------------------------------
Transaction set consistency            Statement level                 Transaction level
 
 
 Readers block writers                               No                             No
 
Writers block readers                               No                             No  
 
Есть сомнения в правдивости таблицы для выденный параметров если 2
конкурентные транзакции находятся в Serializable Я не могу поянть механизма, чем это достигается.Oracle concepts - документ достаточно толстый, но Вам нужна только глава "Data Concurrency and Consistency", там написано.
Сомнения напрасны.
onstat-Если смотреть в комплексе, то достоинств по сравнению с блокировочниками, совсем не много.
Вот чего-чего, а комплексного рассмотрения я что-то в этом топике не видел :)
Одни говорят про соответствие стандартам, другие - про блокировки, третьи - про версионность...
Применимость тех или иных СУБД для решения тех или иных задач (не придуманных задачек с искусственными ограничениями, а именно задач) не рассматривается :)
Лично мне кажется, что любую задачу в конце концов можно решить на большинстве существующих СУБД.
Вопрос надо ставить о стоимости оборудования, доступности персонала требуемой квалификации, сроках разработки и бюджете проекта.
Могу, конечно, и ошибаться - вдруг на блокировочниках чего-то в принципе сделать нельзя или по стандарту не положено :)
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34018827
DimaR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat-
Систематезируем условия абстрактной задачи.
Есть наборы товаров с количеством в таблице, они уже закомичены.
Нужно проводить по остаткам и по кассе эти наборы за одну транзакцию каждый, в паралельных сессиях, при том, что один одни товар
встречается в 90% наборов.
Такая постановка Вас устроит?

в лобовую, select for update на кассах, и система будет вести себя так же ка и блокировочник.
за исключением того, что другие пользователи, смотрящие текущие остатки и делающие отчеты будут видеть согласованный набор данных, и не будут блокироваться этими писателями.

(хотя для бизнес логики, когда кассы сами снимают остатки напрямую не очень красиво (к задаче это не имеет никакого отношения))
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34018866
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat-Систематезируем условия абстрактной задачи.
Есть наборы товаров с количеством в таблице, они уже закомичены.
Нужно проводить по остаткам и по кассе эти наборы за одну транзакцию каждый, в паралельных сессиях, при том, что один одни товар
встречается в 90% наборов.
Такая постановка Вас устроит?
Я их всех проведу за одну транзакцию (выборка наборов с агрегацией по товарам и merge в остатки - можно даже одним statement заколбасить :), в чем проблема-то? По масштабам супермаркета писюку работы секунд на несколько в сутки :)
При этом ничто не будет мешать в процессе регистрировать новые наборы.
Супермаркет - такая штука, где перерасход невозможен (покупатель с физически существующим товаром покидает магазин), что очень сильно облегчает задачу ;)
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34018890
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaRв лобовую, select for update на кассах, и система будет вести себя так же ка и блокировочник.
То есть мы выбрали набор данных через select for update по некоему условию и мне будет гарантироваться, что другие сессии не смогут вставить новые записи по этому условию, пока я не отпущу транзакцию ?
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34018926
DimaR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUSТо есть мы выбрали набор данных через select for update по некоему условию и мне будет гарантироваться, что другие сессии не смогут вставить новые записи по этому условию, пока я не отпущу транзакцию ?
При чем тут вставить? Я может неправильно понял условие.
Как я понял, узкое место при update в таблице остатков по товарам???
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34018950
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaR ASCRUSТо есть мы выбрали набор данных через select for update по некоему условию и мне будет гарантироваться, что другие сессии не смогут вставить новые записи по этому условию, пока я не отпущу транзакцию ?
При чем тут вставить? Я может неправильно понял условие.
Как я понял, узкое место при update в таблице остатков по товарам???
Ну остатки по идее то считать по товарам надо как бы с других таблиц. Значит до апдейта остатка нужно еще и гарантировать, что в этот момент никто не приведет эти таблицы к состоянию, где их данные не будут соответствовать записанному значению остатка, то есть в том числе и не вставятся новые.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34018978
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaR onstat-
Систематезируем условия абстрактной задачи.
Есть наборы товаров с количеством в таблице, они уже закомичены.
Нужно проводить по остаткам и по кассе эти наборы за одну транзакцию каждый, в паралельных сессиях, при том, что один одни товар
встречается в 90% наборов.
Такая постановка Вас устроит?

в лобовую, select for update на кассах, и система будет вести себя так же ка и блокировочник.


Нет не будет, читайте мое сообщение выше про установку SCN
в слотах транзакций и поведении open в курсоре на update.

Это плата за консистенность "на начало", которую мы обсуждали.
Зато они класно формируют репорты.


Блокировочники не пытаются создать консистентный набор на начало
и отадют первый fetch, при возможности добраться к первой же записи из набора, при этом остальных может еще не быть даже в кеше буферов
а обработка записей набора уже идет, и поиск остальных а также контроль уже установленных другими сессиями блокировок может
производится в фоновом режиме.
То есть если какаято конкрентаня запись сейчас заблокирована,
на следующий фетч она не пойдет а пойдет свободная, а через 5 фетчей ее уже закомитят.
Это поведение может элементарно убить order by, но это уже детали реализации приложения и использования возможностей СУБД.


Всязи с отсутствием ограничения по консистентности на начало,
с которым я лично мирюсь,
у разработчиков блокировочников
выше возможности по оптимизации обработки.

з.ы. Простите работать надо. Я еще вернусь.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34018987
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUS
Ну остатки по идее то считать по товарам надо как бы с других таблиц.
Значит до апдейта остатка нужно еще и гарантировать, что в этот момент
никто не приведет эти таблицы к состоянию, где их данные не будут
соответствовать записанному значению остатка

Вот поэтому-то и твердят все кому не лень, что хранимые (актуальные)
остатки - зло. Если хранить остатки, скажем, месячной давности, то такая
гарантия создается административно - запретом работать задним числом (и
подкрепляется соответствующими триггерами).
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34019017
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
ASCRUS
Ну остатки по идее то считать по товарам надо как бы с других таблиц.
Значит до апдейта остатка нужно еще и гарантировать, что в этот момент
никто не приведет эти таблицы к состоянию, где их данные не будут
соответствовать записанному значению остатка

Вот поэтому-то и твердят все кому не лень, что хранимые (актуальные)
остатки - зло. Если хранить остатки, скажем, месячной давности, то такая
гарантия создается административно - запретом работать задним числом (и
подкрепляется соответствующими триггерами).
Posted via ActualForum NNTP Server 1.3

Ну вот, отошли от субд и пришли к административным ограничениям.
Не коструктивно как то получается.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34019058
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer ChAСудя по комментарию, Вы не совсем поняли смысл той дискуссии.
Почему-то я уверен, что если я попрошу Вас логически строго обосновать свое утверждение, мы придем к выводу, что Вы брякнули абы что.Вы, простите, о чем ? Мое комментарий относился только к утверждению Yo.!!, когда он в качестве доказательства оного обратился явно не ту дискуссию. Или Вы там обнаружили доказательство его правоты ? Тогда, будьте любезны, ткните носом... softwarerТо есть, если я правильно понял, Вы не производили экспериментов, не задавали вопросов и другими способами не выясняли, какой же все-таки результат запроса вернет Вам сервер.Совершенно верно, если внимательно посмотреть на ранее упомянутую дискуссию, то Merle, в принципе, уже провел весьма убедительный эксперимент, хотя мое предположение касалось более сложной ситуации, причем оно было не первым. Мне его аргументы показались достаточно убедительными, чтобы перепроверять их.
softwarerТогда вопрос: каким образом Вы добиваетесь того, что приложение ведет себя предсказуемым образом? Пихаете в каждый нетривиальный запрос хинт holdlock? Используете только простые запросы? Что-то другое? Оставляете на самотек, "авось не случится", наконец?По разному, в некоторых случаях вместо хинта Holdlock проще сразу поставить уровень изоляции RR, иногда фиксируется план запроса таким образом, чтобы повторного чтения "опасных" мест не происходило, иногда же, действительно, можно пренебречь, так как подобная несогласованность либо элиминируется на последующих шагах, либо не важна, что в моей практике не редкость, так как она не касается ни ядерных реакторов, ни космических аппаратов. softwarerНельзя ли ссылку?Запросто. Одна из них уже приводилась. Можно здесь глянуть.
* Аналогичность способа подразумевается как использование версионности, при котором не происходит чтения измененных данных, а не точное копия механизма.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34019084
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovВот поэтому-то и твердят все кому не лень, что хранимые (актуальные)
остатки - зло. Если хранить остатки, скажем, месячной давности, то такая
гарантия создается административно - запретом работать задним числом (и
подкрепляется соответствующими триггерами).
Posted via ActualForum NNTP Server 1.3
А где я сказал про хранение актуальных остатков ? У меня по жизни фиксированные хранятся, а актуальные получаются как сумма последних зафиксированных остатков плюс все по таблицам движения (без разницы чего). Но однако проблемы это не снимает - кто сказал, что на момент фиксации остатков даже на месяц назад в этот момент у меня никто в БД не будет добавлять записи месячной давности ? Да запросто - начиная от самих пользователей и заканчивая вливом данных репликацией или импортом с другой системы. И на момент фиксации этих остатков с одной стороны все пользователи должны продолжать счастливо работать, с другой стороны остатки должны быть зафиксированны правильными, то есть не нарушена согласованная целостность данных.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34019207
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat- DimaR onstat-
Систематезируем условия абстрактной задачи.
Есть наборы товаров с количеством в таблице, они уже закомичены.
Нужно проводить по остаткам и по кассе эти наборы за одну транзакцию каждый, в паралельных сессиях, при том, что один одни товар
встречается в 90% наборов.
Такая постановка Вас устроит?
в лобовую, select for update на кассах, и система будет вести себя так же ка и блокировочник.
Нет не будет, читайте мое сообщение выше про установку SCN
в слотах транзакций и поведении open в курсоре на update.
Это плата за консистенность "на начало", которую мы обсуждали.
Зато они класно формируют репорты.
Ну не так все печально обстоит :)
Вы можете, конечно, заставить сервер работать так, как Вы привыкли на блокировочниках. Но это булет не самый верный подход.
В oracle, к примеру, выгоднее пользоваться тем, что он делает особенно хорошо - консистентными отчетами.
То есть кассы регистрируют покупки (это insert) и ни о чем более не заботятся.
Рабочие остатки в любой момент можно получить одним sql-запросом, сопоставив остатки от прошлой фиксации и товары, проведенные по кассе.
В любой момент так же консистентно можно зафиксировать рабочие остатки и опираться уже на них.
При этом вообще не требуется блокировка записей остатков при работе касс, а блокировка остатков очень кратковременна (на момент фиксации).
Вот и расскажите теперь про преимущества блокировочника в супермаркете ;)
onstat-То есть если какаято конкрентаня запись сейчас заблокирована,
на следующий фетч она не пойдет а пойдет свободная, а через 5 фетчей ее уже закомитят.А каким образом он запоминает пропущенные записи и как потом к ним обращается?
Допустим, есть табличка в 10 млн. строчек, под условия отбора попадает ~1млн, равномерно рассеянный по таблице 90% которых в текущий момент заблокированы. Запускаем запрос.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34019230
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUS
Но однако проблемы это не снимает - кто сказал, что на момент
фиксации остатков даже на месяц назад в этот момент у меня никто в БД не
будет добавлять записи месячной давности ?

Большой Босс. Если у вас данные за месяц не устаканиваются это всего
лишь означает что надо отодвинуть дату фиксации еще дальше. До тех пор
пока вероятность существования конкурентных транзакций не упадет до
приемлемого уровня. Цель-то - избавиться от одновременных апдейтов.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34019274
DimaR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Толком не пойму задачу, и мне что то лень втыкать :).

ps.
у нас остатки текущие.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34019336
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
ASCRUS
Но однако проблемы это не снимает - кто сказал, что на момент
фиксации остатков даже на месяц назад в этот момент у меня никто в БД не
будет добавлять записи месячной давности ?
Если у вас данные за месяц не устаканиваются это всего
лишь означает что надо отодвинуть дату фиксации еще дальше.
Да не надо тут никакой вероятностной мути.
Просто процедура, вливающая проводки в базу должна удалить все фиксации, помеченные более поздними датами, чем самая ранняя вливаемая проводка.
После влива проводок можно опять сделать нужные фиксации, но это проблемы не предавляет.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34019546
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousДа не надо тут никакой вероятностной мути.
Просто процедура, вливающая проводки в базу должна удалить все фиксации, помеченные более поздними датами, чем самая ранняя вливаемая проводка.
После влива проводок можно опять сделать нужные фиксации, но это проблемы не предавляет.
Ага, заодно баланс откатить к примеру. Для таких случаев существуют проверки и перерасчеты задними числами - то что зафиксено никем просто так на автомате не откатывается, что в налоговой декларации, что в балансе, что по остаткам на складе.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34019567
ЛП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 ASCRUS
Не понимаю, чего тут такую кашу развели с несчастным READ COMMITED - ведь написанно же, читаем закомиченные данные. Хотим второй раз те же данные считать, ставим REPEATABLEREAD, боимсе при повторном чтении новые записи схлопотать - ставим SERIALIZABLE. Все как написано в стандарте, работать в любом сервере должно одинаково по смыслу.
Поправочка - работать должно в любом сервере одинаково по смыслу, но только если этот сервер нужный уровень изоляции есть :)
А так да, если уровень изоляции есть - то (принципиальной) разницы быть не должно. Хотя как топик начался с того, что Гаря начал сравнивать разные сервера при разных уровнях изоляции, так оно и идет :).
Разруха - она не в сортирах.

Еще хотелось бы задать немного ламерский вопрос тем, кто работает с версионниками (так сказать для ликбеза) - как на версионнике обеспечить уровень изоляции SERIALIZABLE для гарантированного отсутствия фантомов.
Да нету в версионниках сериалайзбла. Последний раз когда тема фантомов поднималась, кто-то из лагеря ораклоидов (помоему это был товарисч Глюк Казанский) начал плакать, а дескать как мы это реализуем без просадок производительности и прочие сопли. Ну, хозяин барин. Если не хотят работать медленно, то всегда остается альтернатива - работать неправильно :))
Вот и Йо начал песни петь про перфоманс и про бизнес-логику в супермаркетах :)

Хотя, конечно, при наличии желания можно для каждого конкретного случая соорудить подобие сериалайзбла. Типа из огурца, петрушки и зеленого лука сделать себе маленького, но вполне съедобного Ктулху.

-----------------------------------

2 Yo!!
блин еще один, непойму где вы (и остальные) увидели "чтения незакомиченных данных"
Здесь
При обсуждении ситуации "128 сессий каждая в своей транзакции проапдейтила, но еще не закоммитила", ты высказал, что блокировочник "будет видеть чужие изменения, читать заблокированые" - типо в противопоставление оракловому Read Commited.
Возьми топор и попробуй вырубить :)

------------------------------------

2 Gluk (Kazan)
Gluk (Kazan)транзакция рушится на коммите.

Специально для УМНЫХ аксессников - ТРАНЗАКЦИЯ не рушиться. Конкретный DML ловит Exception, вполне штатная ситуация (транзакции от этого не жарко и не холодно).
Гыыыы... Товарисч Глюк, Вы тупой, или прикидываетесь?
Четвертый раз повторяю - Гаря описал случай, когда ошибка ловится в момент коммита. Претензии по абалденному частичному откату - конкретно для этого случая. Если не веришь, что транзакция может пасть именно на коммите, а не только на последнем стейтменте, то поинтересуйся у старших товарисчей. Или в библиотеку сходи.

Если ты рассматриваешь какой-то другой случай - то и рассматривай его себе в тряпочку, ко мне то какие вопросы?


У тебя есть документация по аксесу?
Ага, есть. Вместе с аксессом
Ну раз у тебя есть - ты и ищи. У меня, например, нету. Ни документации, ни аксеса :))
А раз оно у тебя оно есть вместе с аксесом, то можешь еще и эксперименты провести, если уж тебе так сильно "Хочется какта приобщиться".

--------------------------

2 andrey_anonymous
Я так до сих пор и не смог осознать связи "версионник значит без блокировок" :(
Ну откуда оно растет, кто-нибудь знает?!
Точно так же можно сказать, что "блокировочник - это не значит без версий".
Ну и о чем будем говорить? С одной стороны - гибрид, с другой стороны - гибрид. Не нужно обладать телепатическими способностями, чтобы понять, что под сравнением блокировочников с версионниками скорее всего подразумевается "чисто блокировочный" и "чисто версионный" подходы. Сравнивать гибриды разной степени гибридности никому не интересно :)
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34019703
AI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat-
...

Рассказываю:
При открытии курсора select for update
oracle не вернет управление из open до тех пор пока
для всех записей курсора в слоты транзакций в соответствующих
блоках не будет проставлен SCN.
Для того что бы проставить SCN предидущая транзакция
изменяющая эту запись должна быть уже закомичена или
откатана.

...


Разумеется. Это будет самое обычное ожидание освобождения блокировки. Затем будет получено текущее состояние записи (current read) и чтение или продолжится (при read commited), или даст ошибку (при serializable).

Я писал, что dml получает данные последней доступной версии. Что тут противоречащего логике или теории?
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34019705
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПретензии по абалденному частичному откату - конкретно для этого случая.
тогда о каком вообще "частичном откате" при ошибке по commit речь??? Сами себе выдумываете какие-то странные "постановки задачи".
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34019745
ЛП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 kdv
авторПретензии по абалденному частичному откату - конкретно для этого случая.
тогда о каком вообще "частичном откате" при ошибке по commit речь???
Вот и я не понимаю - какой такой частичный откат??? Кто его выдумал, зачем он его выдумал, и почему ораклоиды начали приплетать сюда какие-то бредни типа "написать приладу", "последний стейтмент", "неявный сейв-поинт", и прочий цирк.

Сами себе выдумываете какие-то странные "постановки задачи".
Я выдумываю??? Это Гаря выдумал. Гарин пост сами найдете, или пальцем показать?
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34019754
Yo.!!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛП
Здесь
При обсуждении ситуации "128 сессий каждая в своей транзакции проапдейтила, но еще не закоммитила", ты высказал, что блокировочник "будет видеть чужие изменения, читать заблокированые" - типо в противопоставление оракловому Read Commited.
Возьми топор и попробуй вырубить :)

зачем ? ИМХО это надо поставить в рамку и каждый раз тыкать лохов в нее :)
попробую еще раз так чтоб даже последнему лоху было понятно: моя фраза делалась на 2 части "будет видеть чужие изменения" - думаю тут понятно что read commited у блокировочника (и в стандарте) не обещает не увидеть чужие, закомиченые изменения во время исполнения стейтмента (оракл же консистентное чтение обещает). и вторая часть "читать заблокированые" - это фича mssql где транзакция может прочитать запись, залоченую эксклюзивной блокировкой, чужой транзакции.

ЛП
Поправочка - работать должно в любом сервере одинаково по смыслу, но только если этот сервер нужный уровень изоляции есть :)
А так да, если уровень изоляции есть - то (принципиальной) разницы быть не должно.

мда ... 5 страниц разжевывали, разжевывали что не будет одинаково работать, хоть и имеют одинаковые названия уровней, но походу в пустую :(
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34019819
DimaR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛП
Четвертый раз повторяю - Гаря описал случай, когда ошибка ловится в момент коммита. Претензии по абалденному частичному откату - конкретно для этого случая. Если не веришь, что транзакция может пасть именно на коммите, а не только на последнем стейтменте, то поинтересуйся у старших товарисчей. Или в библиотеку сходи.

Я не являюсь большим специалистом в этом вопросе, и может "старшие" товарищи поправят, я знаю только один вариант когда транзакция вылетет на коммите, это если будет нарушен deferred constraint, тогда вроде откатится вся транзакция, но это вроде немного из другой оперы (наверное есть еще ньюансы в распределенных транзакциях)
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34019837
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛПДа нету в версионниках сериалайзбла. Последний раз когда тема фантомов поднималась, кто-то из лагеря ораклоидов (помоему это был товарисч Глюк Казанский) начал плакать, а дескать как мы это реализуем без просадок производительности и прочие сопли.


Не песди, или сцылку дай. Не помню я такого

ЛП
Гыыыы... Товарисч Глюк, Вы тупой, или прикидываетесь?
Четвертый раз повторяю - Гаря описал случай, когда ошибка ловится в момент коммита.


Апять, же друк, пример нарисавать для Oracle руки не отсохнут ?
ато складывается впечатление, что вы пи...бол

ЛП
А раз оно у тебя оно есть вместе с аксесом, то можешь еще и эксперименты провести, если уж тебе так сильно "Хочется какта приобщиться".


Пальцем в доку ткнуть ламает ? Или по крайней мере сказать с какой ВЕРСИИ сие чудо появилось.

Я все больше убеждаюсь в том, что кроме бла бла бла вы ничего не могете
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34019858
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛПкакие-то бредни типа "написать приладу",

Эти бредни фтваей галаве, трук. Где говорилось "написать" приладу ???
Прилада ЕСТЬ всегда (даже если это SQL+)
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34019919
ЛП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Yo.!!
моя фраза делалась на 2 части "будет видеть чужие изменения" - думаю тут понятно что read commited у блокировочника (и в стандарте) не обещает не увидеть чужие, закомиченые изменения
Гыыы... с рассмотрения ста двадцати восьми незакоммиченных транзакций - плавный переход на чужие закомиченные изменения :). Ну да, оно конечно понятно, что так оно и подразумевалось с самого начала :))
Не отмазывайся, Йо.

----------------

2 Gluk (Kazan)
Не песди, или сцылку дай. Не помню я такого
Гыыы... Оракл плохо на память влияет?
"...Вы правы, если подобные аномалии недопустимы в Вашей задаче, следует совершать "дополнительные телодвижения". Теперь расскажите, как построить версионник без подобных аномалий и без отвратительных просадок по производительности при блокировании диапазонов ключей с соотвественно увеличивающеся вероятностью deadlock-ов ???"
Тут

Пальцем в доку ткнуть ламает ?
Ломает, конечно.
Кстати, сколько раз надо повторить, что у меня нет ни аксеса, ни доки к нему, прежде чем этот факт дойдет до пораженного ораклом мозга? :)

Или по крайней мере сказать с какой ВЕРСИИ сие чудо появилось.
Думаю, что с первой :)
По крайней мере в Access 2.0 оно уже было.

Эти бредни фтваей галаве, трук. Где говорилось "написать" приладу ???
Легко написать прикладу
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34019947
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛП2 Gluk (Kazan)
Не песди, или сцылку дай. Не помню я такого
Гыыы... Оракл плохо на память влияет?
"...Вы правы, если подобные аномалии недопустимы в Вашей задаче, следует совершать "дополнительные телодвижения". Теперь расскажите, как построить версионник без подобных аномалий и без отвратительных просадок по производительности при блокировании диапазонов ключей с соотвественно увеличивающеся вероятностью deadlock-ов ???"
Тут

ЛП, Вы производите впечатление разумного человека.
Я хотел бы услышать от Вас, какие именно выводы Вы сделали из данного высказывания Gluk (Kazan) в частности и из той дискуссии вообще.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34019955
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛП Легко написать прикладу

По данной ссылке написано нечто, понятное только автору. Вы основываете на этом какие-либо выводы? Может, лучше уточнить у автора что именно он имел ввиду?
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34019969
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUS andrey_anonymousДа не надо тут никакой вероятностной мути. Просто процедура, вливающая проводки в базу должна удалить все фиксации, помеченные более поздними датами, чем самая ранняя вливаемая проводка.
После влива проводок можно опять сделать нужные фиксации, но это проблемы не предавляет. Ага, заодно баланс откатить к примеру. Для таких случаев существуют проверки и перерасчеты задними числами - то что зафиксено никем просто так на автомате не откатывается, что в налоговой декларации, что в балансе, что по остаткам на складе.
Вы знаете хоть один способ не модифицировать баланс в случае появления начислений "задним числом"? Наверное, "блокировочник" волшебным образом сделает это за вас :)
Нет? Тогда к чему это замечание?
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34019985
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChAВы, простите, о чем ? Мое комментарий относился только к утверждению Yo.!!,
OK, понял. Я почему-то решил, что если ответ идет на цитату из моего письма, то он мне. Прошу прощения.

ChAто Merle, в принципе, уже провел весьма убедительный эксперимент
Спасибо, разобрался. К сожалению, текст оформлен чуть неудобно для восприятия человеком, у которого нет под рукой MSSQL, так что я пропустил его при ознакомлении.

Хм. Ядерные реакторы ядерными реакторами... не знаю, может это вопрос привычки, но после такого известия у меня было бы желание включить повсеместное использование repeatable read. Неконсистентный результат запроса - очень неуютная концепция, имхо.

ChAАналогичность способа подразумевается как использование версионности, при котором не происходит чтения измененных данных, а не точное копия механизма.
Признаться, сходу не нашел в первой названной ссылке описания названного Вами механизма (исключая возможность включить READ_COMMITTED_SHAPSHOT). Видимо, надо читать повнимательнее, так что ознакомлюсь позже.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34020007
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AI onstat-
...

Рассказываю:
При открытии курсора select for update
oracle не вернет управление из open до тех пор пока
для всех записей курсора в слоты транзакций в соответствующих
блоках не будет проставлен SCN.
Для того что бы проставить SCN предидущая транзакция
изменяющая эту запись должна быть уже закомичена или
откатана.

...


Разумеется. Это будет самое обычное ожидание освобождения блокировки. Затем будет получено текущее состояние записи (current read) и чтение или продолжится (при read commited), или даст ошибку (при serializable).

Я писал, что dml получает данные последней доступной версии. Что тут противоречащего логике или теории?

Абсолютно Ничем, кроме дополнительных накладных расходов
и эскалации блокировок на таблице остатков.

Чтобы получить консистентность данных на уровне транзакции
(а не dml), как писал Андрей, в первом сообщенни на данной странице,
нужно все делать в serializable.


Или все, что он написал делается одним dml?
типа

update remains r
set (cnt ......)=(select sum(fn)...... from tab1 t1.... group by.....)
where
<сумашедшая связка r и таблиц входящих в репорт)

Хороший запросец для OLTP , не правда ли?

Ихмо, чем дольше отягивается контроль логической целостности,
тем больше необходимо ресурсов чтобы ее достичь.
Ведь все сессии в ней нуждаются.
А ресурсы сейчас дешевые :)

Разруха она в головах, как правильно, кто то уже говорил здесь.


2 andrey_anonymous

Задача была о "хлебе насущном", а не о супермаркете.
Перевените ее наоборот в задачу выписки накладных по выдаче со склада
и приеме товара на хранение суть от этого не изменится.

По поводу пропуска записей решений может быть много,
для каждого сервера свое, я пока не разработчик СУБД, когда им буду
расскажу.



зы Снова ушел работать.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34020012
ЛП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 andrey_anonymous
Я хотел бы услышать от Вас, какие именно выводы Вы сделали из данного высказывания Gluk (Kazan) в частности и из той дискуссии вообще.
А какие выводы я должен был сделать из того высказывания и той дискуссии?
В том дискуссии было высказано мнение, что в оракле нету уровня изоляции Serializable патамушта есть фантомы. Все с этим согласились. Какие выводы из этого я должен сделать?
Теперь вот товарисч Глюк пытается открестится от авторства слов про всякие там слова про "просады производительности". Из этого я тоже должен какие-то выводы делать?

По данной ссылке написано нечто, понятное только автору. Вы основываете на этом какие-либо выводы?
Я делаю вывод что это - бредни. Но товарисч Глюк опять таки пытался авторство этих бредней приписать мне. С этим я согласиться не могу, потому что автор бредней совсем не я, но какие еще выводы я из этого должен сделать - обратно не понимаю
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34020113
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerХм. Ядерные реакторы ядерными реакторами... не знаю, может это вопрос привычки, но после такого известия у меня было бы желание включить повсеместное использование repeatable read. Неконсистентный результат запроса - очень неуютная концепция, имхо.Согласен, для меня это тоже было неприятным фактом, пусть даже он и не противоречил формальному определению RC. К счастью, в большинстве случаев, достаточно его знать, чтобы понимать последствия такого поведения в конкретной ситуации и, соответственно, реагировать на него должным образом. Или не реагировать :)

P.S. IMHO . Максимум производительности, в целом, лучше всего достигается тонкой настройкой, в том числе и хинтами. А "автоматика", а она и есть автоматика, она будет прекрасно работать в 90%(глядя на потолок) наиболее массовых и, как правило, более простых случаях, но в критичных ее лучше отключать и брать, что называется, дело в свои руки :)
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34020146
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat- AI onstat-При открытии курсора select for update
Разумеется. Это будет самое обычное ожидание освобождения блокировки. Затем будет получено текущее состояние записи (current read) и чтение или продолжится (при read commited), или даст ошибку (при serializable).
Я писал, что dml получает данные последней доступной версии. Что тут противоречащего логике или теории?Абсолютно Ничем, кроме дополнительных накладных расходов и эскалации блокировок на таблице остатков.Что Вы имеете ввиду под эскалацией блокировок на таблице остатков? onstat-Чтобы получить консистентность данных на уровне транзакции (а не dml), как писал Андрей, в первом сообщенни на данной странице, нужно все делать в serializable .Думаю, это слишком сильное утверждение.
Консистентность данных штука хорошая, но является лишь инструментом для достижения некоторых целей.
Если задача "внести расход и обновить при этом таблицу остатков" не поддается переформулировке (и такое бывает), то оперируем:
1) консистентным набором проводок, подлежащих внесению. Мы их вставили, но не зафиксировали - никто кроме нас их еще не видит.
2) актуальным значением остатков на момент внесения - согласованность на уровне dml statement.
3) не так страшен черт (рестарт), как его малюют. Его еще надо суметь спровоцировать :) Но если нагрузочные тесты и в самом деле выявили данную проблему при обновлении группы записей , то можно снизить накладные расходы посредством пользовательской блокировки. Та же сериализация доступа. Т.е. создать паритетную по отношению к "блокировочнику" ситуацию достаточно просто. Следующий вопрос - как оптимизировать процесс, чтобы хлебушек не застопорил торговлю.
Можно предложить несколько путей, но они будут одинаково эффективны (или одинаково неэффективны) что для блокировочника, что для версионника - посему оффтопик :)
Причем организовать обновление "редких" групп товаров и отложить обновление востребованных можно и в oracle, причем не так уж и сложно, но "руками".
С учетом Вашего дальнейшего замечания мне начинает казаться, что в "блокировочнике" дела обстоят не сильно лучше ;)
onstat-Ихмо, чем дольше отягивается контроль логической целостности, тем больше необходимо ресурсов чтобы ее достичь.
Ведь все сессии в ней нуждаются. Тут согласен.
Но еще разумнее, на мой взгляд, нерперывно обеспечивать целостность, чтобы не приходилось ее достигать "потом".
И тут очень часто помогает переформулировка задач.
onstat-2 andrey_anonymous
Задача была о "хлебе насущном", а не о супермаркете.
Перевените ее наоборот в задачу выписки накладных по выдаче со склада
и приеме товара на хранение суть от этого не изменится.
Изменится. Контроль остатка - задачка интересная, поскольку провоцирует "горячие" точки в системе и в приведенном сценарии еще и тяжело поддается масштабированию (а если касс - 1000 штук? 10000?).
Подходы есть, но они, как уже говорилось, будут схожи для любой СУБД.
onstat-По поводу пропуска записей решений может быть много,
для каждого сервера свое, я пока не разработчик СУБД, когда им буду
расскажу.
То есть Вы это придумали ?!
Или все-таки есть надежные источники информации?
Может, кто-нибудь из аудитории владеет вопросом?
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34020154
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛП2 andrey_anonymous
Я хотел бы услышать от Вас, какие именно выводы Вы сделали из данного высказывания Gluk (Kazan) в частности и из той дискуссии вообще.
А какие выводы я должен был сделать из того высказывания и той дискуссии?
В том дискуссии было высказано мнение, что в оракле нету уровня изоляции Serializable патамушта есть фантомы. Все с этим согласились. Какие выводы из этого я должен сделать?
То есть Вы никаких выводов делать не стали.
К чему тогда была эта ссылка? Просто показать, что Вы читали один из многочисленных топиков этого сайта?
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34020170
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛПВот и я не понимаю - какой такой частичный откат??? Кто его выдумал, зачем он его выдумал, и почему ораклоиды начали приплетать сюда какие-то бредни типа "написать приладу", "последний стейтмент", "неявный сейв-поинт", и прочий цирк.

а кто вообще выдумал какие-то действия при commit? Если НЕТ deferred constraints, то какая нафиг "ошибка при коммите", которая вообще не может возникнуть по определению?
про "стейтменты" имеется в виду вот что:

StartTransaction
insert - ok
insert - ok
insert - облом
Commit.
Все. во время последнего insert оператор не выполнился. никаких роллбэков. Все что сделал этот insert, отменилось автоматической отменой savepoint. Изменения сделанные первыми двумя insert УЖЕ сохранены в БД.
Commit лишь подтверждает вступление этих изменений в силу, а не "применяет их".

softwarerно после такого известия у меня было бы желание включить повсеместное использование repeatable read. Неконсистентный результат запроса - очень неуютная концепция, имхо.
фигня это, если речь идет о read-committed. сам уровень изолированности неконсистентный в отношении чужих commit-изменений. Почему оператор внутри такого уровня должен быть консистентным, и какую "уверенность" это даст, и в чем? Например, если некий select выполнен сейчас, секунду назад, или секундой позже?

рекомендую почитать тут:
http://www.sql.ru/forum/actualthread.aspx?tid=173455&pg=2
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34020192
ЛП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 andrey_anonymous
То есть Вы никаких выводов делать не стали.
К чему тогда была эта ссылка?
Абъисняйю
Это сцылко к таму шта таварисч Глюк Козанскей папрасил сцылку.
Глюк КозансейНе песди, или сцылку дай
Вот йа и непезжу, и сцылко тоже откапал, рас уш у Глюка Козанскаво праблемы с памятию.

------------

Скажите пожалуйста, у Вас тоже мозг поражен ораклом?
Или какие-либо другие причины, из-за которых затруднено понимание печатного текста?
Или почему надо по три раза объяснять одно и то же???
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34020204
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv softwarerно после такого известия у меня было бы желание включить повсеместное использование repeatable read. Неконсистентный результат запроса - очень неуютная концепция, имхо.
фигня это, если речь идет о read-committed. сам уровень изолированности неконсистентный в отношении чужих commit-изменений. Почему оператор внутри такого уровня должен быть консистентным, и какую "уверенность" это даст, и в чем?
Ну например оно даст уверенность, что запрос, вычисляющий текущий баланс как сумму баланса на начало дня, начислений покажет именно баланс, а не погоду в Африке.
А если хочется одновремено увидеть общую сумму по кассе + сумму товарных остатков и сопоставить с состоянием на утро, то вообще швах - мишшн импоссибл?
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34020251
ЛП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvа кто вообще выдумал какие-то действия при commit?
Абъисняйу...
Какийэ та деиствийа при камите выдумал Гаря, кагда расматривал нипаниатна какуйу субэдэ, в каторай фсе праверки и блакирофки правириайэт на камите.

И хуле фсе дружно на оракл переключились...
И хуле фсе дружно твердять "а вот так не бывает... но если деферед констрейнтс то бывает... но фсе равно не бывает, патамушта так не бывает никагда... но если дистрибьютед то бывает... но фсе равно не бывает"...
И хуле фсе какие-то сейв-поинты фспаминают...
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34020299
Фотография Zhora
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sorry за молдавский (old copy from sql.ru Sybase group):
Delo ne v blokirovkax (hotia vse eti deadlocki locki lezut otsuda) voobshe govoria , a v tom chto net priviazki ko vremeni. Na vihode iz prostogo selecta ASE (da i DB2 poka) produsaet v multiuser srede v obshem sluchae meshaninu (po vremeni) kotoraja vozmozhno nikogda ne bila predstavlena ni v kakoi moment vremeni v tablitse i tolko ne davaja drugim rabotat (isolation level 3 realizovannii na blokirovkah ) mozho ee izbezhat (nu ne schitaj zamorochek s timestampami, @@spidami, temp teiblami)

Resultat (po bolshomu schetu) zavisit ot takih faktorov kak CPU speed, indexi, plan optimizera i tp. i td. (tak natknulsia na blokirovku, zdesh(kak v traffice) , poluchil novoe znacheniee-radueshsia, a tak uspel shvatit staroe, tozhe neploho, ne beda chto ne consistent).


Dostatochno bilo bi prosto imet 2 formi selecta (da i vse):
1. Ne uchitivaet voobshe izmenenii vo vremia prohoda query (kak Oracle)
(chto-to tipa select from ... as of begin)

2. Uchitivaet vse zacomichennie izmenenia (kak dump Sybase-a).
(chto-to tipa select from ... as of end)

Vmesto etogo poluchaetsia ne to ni se ( kakieto starie znachenia, kakieto novie).
Etto sovershenno neverno prosto s tocki zrenia zdravogo smisla.

Po-vidimomu eto tianetsia ot rabot Gray v IBM (navrnoe vziali ot OS gde loks gorazdo koroche) , no facticheski on priznal chto bil ne prav (sm MSR-TR-95-51
A Critique of ANSI SQL Isolation Levels by Hal Berenson; Phil Bernstein; Jim Gray; Jim Melton; Elizabeth O'Neil; Patrick O'Neil June 1995 12p. http://research.microsoft.com/pubs/view.aspx?type=Technical%20Report&id=5) i Microsoft eto (MVCC) realizoval v Yukone, skolko zhe mozhno golovu ludiam (da i sebe) morochit realizacie vo obschem to neplohih isolation levelov s pomoshiu blokirovok bez ucheta point of time.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34020360
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous
Что Вы имеете ввиду под эскалацией блокировок на таблице остатков?

Записи на которых уже стоит SCN транзакции, которая
в свою очередь ожидает(рестартует) запись занятую другой транзакцией
не могут быть обработаны третьей или червертой.


andrey_anonymous
С учетом Вашего дальнейшего замечания мне начинает казаться, что в "блокировочнике" дела обстоят не сильно лучше ;)


Страдают те блокировочники которые не могут ставить блокировку на уровне строки, а только на страницы(блоки).

andrey_anonymous
onstat-Ихмо, чем дольше отягивается контроль логической целостности, тем больше необходимо ресурсов чтобы ее достичь.
Ведь все сессии в ней нуждаются. Тут согласен.
Но еще разумнее, на мой взгляд, нерперывно обеспечивать целостность, чтобы не приходилось ее достигать "потом".
И тут очень часто помогает переформулировка задач.

Взаимно согласен.


andrey_anonymous
То есть Вы это придумали ?!
Или все-таки есть надежные источники информации?
Может, кто-нибудь из аудитории владеет вопросом?


Надежных нет.
Я писал:

поиск остальных а также контроль уже установленных другими сессиями блокировок может
производится в фоновом режиме.


Я знаю, что Информикс не снимает блокировку
после освобождения записи, а уступает ее другой транзакции.
Логично предположить, что той которая в ней более всего нуждается(стоит в очереди на эту запись первой).
Если уступать некому, блокировка освобождается.
Точнее сказать не могу.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34020481
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat- andrey_anonymousЧто Вы имеете ввиду под эскалацией блокировок на таблице остатков?
Записи на которых уже стоит SCN транзакции, которая
в свою очередь ожидает(рестартует) запись занятую другой транзакцией
не могут быть обработаны третьей или червертой.
???????
Заблокированная запись и есть заблокированная.
И в блокировочнике, и в версионнике.
Словосочетание "ожидает (рестартует) запись" просто лишено смысла.
Никакой "эскалации блокировок" в обсуждаемой (судя по ошибочным референсам на "SCN") СУБД нет, не надо выдумывать непонятно что.
onstat-Страдают те блокировочники которые не могут ставить блокировку на уровне строки, а только на страницы(блоки).
И как спасают блокировки на уровне строки? Параллельные транзакции на них не останавливаются? :) onstat-[quot andrey_anonymous]
То есть Вы это придумали ?!
Или все-таки есть надежные источники информации?
Может, кто-нибудь из аудитории владеет вопросом?

Надежных нет.
Я писал:
поиск остальных а также контроль уже установленных другими сессиями блокировок может производится в фоновом режиме.

Слова "в фоновом режиме" ничего не объясняют.
Вы, если я не ошибаюсь, говорили, что транзакция, наткнувшись на заблокированную строку, пропускает ее и идет себе дальше, а дойдя до конца - как-то "вспоминает" о пропущенных строках, возвращается и снова пытается их блокировать.
И вроде как это дает блокировочнику существенное преимущество перед версионником типа oracle, который, наткнувшись на заблокированну строку, будет ждать завершения конкурирующей транзакции.
Получается, что это утверждение пока что очень похоже плод фантазии.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34020498
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНу например оно даст уверенность, что запрос, вычисляющий текущий баланс как сумму баланса на начало дня, начислений покажет именно баланс, а не погоду в Африке.

Андрюша, кто такие вещи в read_committed считает, а? какой в дупу баланс в RC???
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34020528
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv авторНу например оно даст уверенность, что запрос, вычисляющий текущий баланс как сумму баланса на начало дня, начислений покажет именно баланс, а не погоду в Африке.Андрюша, кто такие вещи в read_committed считает, а? какой в дупу баланс в RC???А в чем проблема? Неконсистентный результат? Ой, а что это такое?
Может, мы что не так делаем?
kdvшечка, голубчик, подскажите как правильно, а то вот почему-то баланс сходится, зараза, копиночка в копиночку...
Наверное, мозг ораклом испорчен.
Потому что если у кого мозг ораклом не испорчен, то данные должны кривиться, а вся работа - останавливаться ибо стандарт, омммммм!

Ну вас нафиг, пойду я лучше пива тяпну за здоровье Ларри, да продлится его снапшот на долгие годы, ибо от многия геморроя пришедших к нему он избавил :)
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34020547
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvсам уровень изолированности неконсистентный в отношении чужих commit-изменений.
Хм. Долго думал над смыслом этой фразы.

kdvПочему оператор внутри такого уровня должен быть консистентным, и какую "уверенность" это даст, и в чем? Например, если некий select выполнен сейчас, секунду назад, или секундой позже?
Даст уверенность, что селект, обращавшийся более чем к одной строке данных, вернет хоть сколько-нибудь осмысленный результат. Пусть на секунду раньше или на секунду позже, но осмысленный.

Для примера представьте себе, что есть две таблицы, связанные отношением "обязательная с обеих сторон один к одному". Представьте себе, что я решил выполнить к ним запрос с outer join. Так вот, описанная неконсистентность может привести к тому, что запрос вернет мне набор данных, прямо противоречащий действующему ограничению целостности. С моей точки зрения это... малость неудобно, назовем так.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34020554
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторДля примера представьте себе, что есть две таблицы, связанные отношением "обязательная с обеих сторон один к одному". Представьте себе, что я решил выполнить к ним запрос с outer join. Так вот, описанная неконсистентность может привести к тому, что запрос вернет мне набор данных, прямо противоречащий действующему ограничению целостности.

пример хороший, согласен. однако я все равно не считаю нестабильность курсора в RC чем-то страшным.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34020566
Фотография Anton Demidov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvпример хороший, согласен. однако я все равно не считаю нестабильность курсора в RC чем-то страшным. Привычка - вторая натура.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34020648
ЛП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 softwarer
С моей точки зрения это... малость неудобно, назовем так.
Неудобно штаны через голову одевать, а все остальное - исключительно дело привычки :)

На самом деле вопрос даже не филосовский, и исключительно простой.
Есть транзакция, работающая на уровне изоляции "Икс". Есть запрос, выполняющийся внутре этой транзакции. Какой уровень изоляции (по отношению к "чужим" изменениям) имеет этот запрос? Думаю, что не больше (но и не меньше) чем "Икс" родительской транзакции. Изолированность запроса в точности равна изолированности транзакции. Если, конечно, запрос не обернут во вложенную транзакцию с другим уровнем изоляции (случай гипотетический, ибо вложенные транзакции).

Если (вернее "так как") Read Commited разрешает (не запрещает) стейтментам транзакции видеть чужие закомиченные изменения - то и сам стейтмент (и части стейтмента) могут видеть чужие закомиченные изменения.
Если чужие закомиченные изменения не нужны, и даже противопоказаны - к вашим услугам всегда есть уровни изоляции выше RC.

Если я где-то не прав, то просьба меня где-то поправить.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34020794
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous ЛП2 Gluk (Kazan)
Не песди, или сцылку дай. Не помню я такого
Гыыы... Оракл плохо на память влияет?
"...Вы правы, если подобные аномалии недопустимы в Вашей задаче, следует совершать "дополнительные телодвижения". Теперь расскажите, как построить версионник без подобных аномалий и без отвратительных просадок по производительности при блокировании диапазонов ключей с соотвественно увеличивающеся вероятностью deadlock-ов ???"
Тут

ЛП, Вы производите впечатление разумного человека.
Я хотел бы услышать от Вас, какие именно выводы Вы сделали из данного высказывания Gluk (Kazan) в частности и из той дискуссии вообще.

+1 Не уловил как это соотносится с ТЕМОЙ текущей беседы
там мало мало об другом речь шла. И от тех слов я РАЗУМЕЕТСЯ отказываться не собираюсь

авторЛомает, конечно.
Кстати, сколько раз надо повторить, что у меня нет ни аксеса, ни доки к нему, прежде чем этот факт дойдет до пораженного ораклом мозга? :)
...
Думаю, что с первой :)
По крайней мере в Access 2.0 оно уже было.

Коментарии излишни, вы пиздабол батенька, если где то слышали но показать немогете

авторЛегко написать прикладу

Уел, уел. На афтора посмотри. Или для тебя фсе ораклоиды на одно лицо ?

P.S. Вы проигнорировали вопрос относительно примера для Oracle, где ошибка возникает на commit-е (кроме случай отложенной проверки ограничений, эта экзотика отношения к разговору не имеет). Что ищо раз падтверждаит, что вы пиздабол и путаете теплое с мягким (Oracle с IB)
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34021166
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous onstat- andrey_anonymousЧто Вы имеете ввиду под эскалацией блокировок на таблице остатков?
Записи на которых уже стоит SCN транзакции, которая
в свою очередь ожидает(рестартует) запись занятую другой транзакцией
не могут быть обработаны третьей или червертой.
???????
Заблокированная запись и есть заблокированная.
И в блокировочнике, и в версионнике.
Словосочетание "ожидает (рестартует) запись" просто лишено смысла.
Никакой "эскалации блокировок" в обсуждаемой (судя по ошибочным референсам на "SCN") СУБД нет, не надо выдумывать непонятно что.


Вы не учитываете то факт, что прежде чем наткнуться на заблокированную запись транзакция вероятнее всего уже удерживает определенное количство записей.
Я это имел ввиду.
Эти записи уже не могут быть заблокированы какой либо еще транзакцией.
Много сессии поставили блокировки, но ни одна из них не начала обработку.
Все ждут комита одной транзакции.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34021218
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет, ЛП!
Ты пишешь:

ЛПЛ> Если (вернее "так как") Read Commited разрешает (не запрещает) стейтментам
Л> транзакции видеть чужие закомиченные изменения -
Л> то и сам стейтмент (и части стейтмента) могут видеть
Л> чужие закомиченные изменения.
Л> Если чужие закомиченные изменения не нужны,
Л> и даже противопоказаны - к вашим услугам всегда
Л> есть уровни изоляции выше RC.как в анекдоте: "папа, а ты с кем это сейчас раговаривал?.."
не поймут они этого.
не хотят понимать.
и не могут.

--
With best regards, Мимопроходящий.

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34021268
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий
не поймут они этого.
не хотят понимать.

Может быть потому что у них есть только один уровень выше RC и
называется он SERIALIZABLE?..
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34021430
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat-Вы не учитываете то факт, что прежде чем наткнуться на заблокированную запись транзакция вероятнее всего уже удерживает определенное количство записей.
Я это имел ввиду.
Эти записи уже не могут быть заблокированы какой либо еще транзакцией.
Много сессии поставили блокировки, но ни одна из них не начала обработку.
Все ждут комита одной транзакции.
Я учитываю.
Я не вижу, чем тут поможет блокировочник.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34021457
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov Мимопроходящий
не поймут они этого.не хотят понимать.
Может быть потому что у них есть только один уровень выше RC и
называется он SERIALIZABLE?..
Скорее потому, что вообще не очень просто объяснить, почему следует предпочесть неудобную реализацию удобной.
Кивки на то, что "ибо формально не противоречит" как-то не убеждают :)
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34021519
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous onstat-Вы не учитываете то факт, что прежде чем наткнуться на заблокированную запись транзакция вероятнее всего уже удерживает определенное количство записей.
Я это имел ввиду.
Эти записи уже не могут быть заблокированы какой либо еще транзакцией.
Много сессии поставили блокировки, но ни одна из них не начала обработку.
Все ждут комита одной транзакции.
Я учитываю.
Я не вижу, чем тут поможет блокировочник.

Тем, что болкировочник ставит блокировку в момент fetch,
а не сразу на весь набор записей при открытии курсора.
Ихмо при этом не важно на каком уровень изоляции.
Блокаровка конкретной записи удерживается с момента fetch до комита( ролбека).

А в oracle ставит блокировку с момента open на весь набор записей.
Это плата за консистентность "на начало" о которой я уже писал.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34021523
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛПНеудобно штаны через голову одевать, а все остальное - исключительно дело привычки :)
Наверное. Но не каждой привычкой хочется обзаводиться :)

ЛПЕсли (вернее "так как") Read Commited разрешает (не запрещает) стейтментам транзакции видеть чужие закомиченные изменения - то и сам стейтмент (и части стейтмента) могут видеть чужие закомиченные изменения.

Если чужие закомиченные изменения не нужны, и даже противопоказаны - к вашим услугам всегда есть уровни изоляции выше RC.

Если я где-то не прав, то просьба меня где-то поправить.
В высказывании Вы правы, но оно немного не о том. И стейтмент, и части стейтмента отлично видят чужие закоммиченные изменения, и вопросов это не вызывает. Вопрос в том, что удобно, если стейтмент и его части видят их "под одним углом".

Уровни изоляции выше RC, конечно, есть, но тут есть одна неприятность: если подпрограмма неработоспособна на некотором уровне изоляции, она вообще говоря должна явно проверять текущий уровень изоляции. Мне неизвестен инструмент, в котором можно было бы удобно указать "вызов хранимки A на уровне изоляции Б должен трактоваться сервером как ошибка". Противный вариант - надеяться, что кто-то будет так любезен, что прочитает и запомнит комментарий, в котором написано "при вызове в RC функция может вернуть бред". Признаться, ни один из этих вариантов не представляется мне офигенно удобным и правильным, поэтому [в том числе поэтому] я предпочитаю минимизировать количество неRC-транзакций.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34021566
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat-Я не вижу, чем тут поможет блокировочник.
Тем, что болкировочник ставит блокировку в момент fetch,
а не сразу на весь набор записей при открытии курсора.
Ихмо при этом не важно на каком уровень изоляции.
Блокаровка конкретной записи удерживается с момента fetch до комита( ролбека).
А в oracle ставит блокировку с момента open на весь набор записей.
Это плата за консистентность "на начало" о которой я уже писал.[/quot]
Таки не вижу разницы. Все равно курсор будет полностью обработан не ранее, чем будут заблокированы все необходимые строки.
Про пропуски блокировочником записей, заблокированных соседями, насколько я понял, Вы уже не говорите, соответственно и тот и другой будут благополучно ждать освобождения первой же встреченной заблокированной записи.
Так в чем выигрыш-то?
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34022423
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerМне неизвестен инструмент, в котором можно было бы удобно указать "вызов хранимки A на уровне изоляции Б должен трактоваться сервером как ошибка"Это говорит лишь о том, что Вы с этим в своей практике не сталкивались, спасибо Oracle :)
В принципе, никто не мешает:
- установить уровень изоляции при входе в процедуру
- установить уровень изоляции при указании конкретного оператора
- установить уровень изоляции при указании конкретного таблицы
- ...

P.S. Собственно об этом уже неоднократно говорилось ранее, если есть проблема, практически всегда есть и решение.
P.P.S. В конце концов, в любой момент можно узнать текущий уровень изоляции и выдать ошибку, если он не устраивает.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34022578
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChAЭто говорит лишь о том, что Вы с этим в своей практике не сталкивались, спасибо Oracle :)
Безусловно. У меня хватает причин. говорить Oracle спасибо.

ChAВ принципе, никто не мешает:
- установить уровень изоляции при входе в процедуру
Хм. Опуская рвущиеся наружу слова "идеологический бред - менять уровень изоляции по ходу транзакции", стоит отметить, что не только устанавливать при входе, а еще и восстанавливать старый при выходе, в том числе при выходе по exception-у. Довольно хлопотное занятие.

ChAP.P.S. В конце концов, в любой момент можно узнать текущий уровень изоляции и выдать ошибку, если он не устраивает.
Можно. Но хлопотно и совершенно незачем. Из серии "удалять гланды бормашиной".
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34022850
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerХм. Опуская рвущиеся наружу слова "идеологический бред - менять уровень изоляции по ходу транзакции", стоит отметить, что не только устанавливать при входе, а еще и восстанавливать старый при выходе, в том числе при выходе по exception-у.Упс. Почему бред, да еще и идеологический ? Можно пояснить более аргументированно ? И, кстати, нельзя ли сделать еще более глубокий вывод, что деление на уровни изоляции - это тоже бред ?
* А восстанавливать не надо, при выходе из процедуры он автоматически возвращается к предыдущему, установленному до вызова, по крайней мере, в MSSQL, где так ведут себя практически все сессионные установки.
softwarer ChAв любой момент можно узнать текущий уровень изоляции и выдать ошибку, если он не устраивает.
Можно. Но хлопотно и совершенно незачем.Нехлопотно, если понимаю, установить один раз и навсегда уровень serialzable ? Но, допустим, это сделает один клиент, а другой, не мудрствуя лукаво, его не установит. И что тогда ?
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34022944
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChAУпс. Почему бред, да еще и идеологический ? Можно пояснить более аргументированно ? И, кстати, нельзя ли сделать еще более глубокий вывод, что деление на уровни изоляции - это тоже бред ?


Не деление бред, а перключение уровня изоляции в процессе самой транзакции. Это из цикла здесь играем, здесь не играем, а здесь рыбу заворачивали (с)

То есть именно так как любит делать M$
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34023038
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChAПочему бред, да еще и идеологический ? Можно пояснить более аргументированно ?
Я сдерживаю эти слова именно потому, что не хочу сейчас уходить в обсуждение этой темы. Тезисно... имхо несложно построить пример, когда у пары транзакций меняется уровень изоляции, например, serializable -> read uncommitted -> serializable, в результате чего обе они нормально завершаются с результатами, решительно не вписывающимися в понятие serializable.

ChAИ, кстати, нельзя ли сделать еще более глубокий вывод, что деление на уровни изоляции - это тоже бред ?
Cмотря какую систему мышления использовать. Если логическую - из сказанного такого вывода не сделаешь. Если какую-либо другую - может быть и удастся.

ChAА восстанавливать не надо, при выходе из процедуры он автоматически возвращается к предыдущему, установленному до вызова, по крайней мере, в MSSQL, где так ведут себя практически все сессионные установки.
Хм. Признаться, не понял, почему сессионные установки меняются при выходе из процедуры . Наверное в этом есть какая-то концепция, но звучит странно.

Что ж, половину задачи это решает.

ChAНехлопотно, если понимаю, установить один раз и навсегда уровень serialzable ?
Нехлопотно - использовать "консистентный read committed".

ChAНо, допустим, это сделает один клиент, а другой, не мудрствуя лукаво, его не установит. И что тогда ?
Хм. Не очень понял, о чем Вы. Если моя программа, либо например триггер на logon сделает ALTER SESSION SET ISOLATION_LEVEL = SERIALIZABLE, мне будет решительно наплевать, что там установил или не установил клиент. Собственно я не уверен, что клиент может "установить раз и навсегда уровень serializable".
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34023268
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluk (Kazan)Не деление бред, а перключение уровня изоляции в процессе самой транзакции. Это из цикла здесь играем, здесь не играем, а здесь рыбу заворачивали (с)

То есть именно так как любит делать M$Я просил - аргументированно. Хорошо, тогда ответьте на такой вопрос - почему в стандарте ANSI есть оператор SET TRANSACTION, если его применение идеологически неверно ? Кроме того, по стандартам ANSI рекомендуется вообще не допускать возможностей работы вне транзакций. В Informix, если правильно помню, он так и назывался ANSI mode, у MSSQL - implicit. Для такого режима вообще нет понятия начала транзакции, так как вы всегда работаете в транзакции. Единственное, что можно, это делать COMMIT или ROLLBACK, после которой автоматически начинается следующая транзакция. В этом режиме тоже будем запрещать менять уровень транзакций ?
* И, пожалуйста, больше не надо лозунгов про M$, не на демонстрации. На уровне "маздай" общаться в дальнейшем не намерен. sotwarerимхо несложно построить пример, когда у пары транзакций меняется уровень изоляции, например, serializable -> read uncommitted -> serializable, в результате чего обе они нормально завершаются с результатами, решительно не вписывающимися в понятие serializable.Тогда зачем вообще существует режим RU ? :)
Пример, наверное, построить можно, при условии взаимодействия данных между этими участками кода. Но возможность написание неверного кода вряд ли может говорить об идеологической неверности языка, разве нет ? Это могут быть совершенно изолированные участки, но выполняемые в рамках одной транзакции. Вас ведь не смущают автономные транзакции ? sotwarerПризнаться, не понял, почему сессионные установки меняются при выходе из процедуры.Они возвращаются к своему исходному состоянию, а внутри процедуры я волен устанавливать их в другое состояние, которое мне кажется более подходящим в конкретной ситуации. К ним относятся не только SET TRANSACTION LEVEL, но и многие другие. Если правда интересно, то посмотрите в BOL почти все начинающееся с SET. sotwarerНехлопотно - использовать "консистентный read committed"Это лишь потому, что он в Oracle такой, фактически эвивалентный RR. Таким образом, будет также нехлопотно поставить в MSSQL уровень RR. sotwarerНе очень понял, о чем Вы. Если моя программа, либо например триггер на logon сделает ALTER SESSION SET ISOLATION_LEVEL = SERIALIZABLE, мне будет решительно наплевать, что там установил или не установил клиент.И что ? Клиент, ничтожно сумняшеся, не сможет поставить другой уровень изоляции ? Он может совершенно не предполагать, что некий триггер на logon уже его устанавил. Более того, по задаче ему нужен другой уровень изоляции. К одной и той же БД может быть подключено несколько разных клиентов, написанных разными командами и решающими совершенно разные подзадачи, и у каждого из них могут быть свои требования.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34023374
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChA Gluk (Kazan)Не деление бред, а перключение уровня изоляции в процессе самой транзакции. Это из цикла здесь играем, здесь не играем, а здесь рыбу заворачивали (с)

То есть именно так как любит делать M$Я просил - аргументированно. Хорошо, тогда ответьте на такой вопрос - почему в стандарте ANSI есть
оператор SET TRANSACTION, если его применение идеологически неверно ?
SQL2002 (Working Draft)16.2 <set transaction statement>
Function
Set the characteristics of the next SQL-transaction for the SQL-agent.
NOTE 415 – This statement has no effect on any SQL-transactions subsequent to
the next SQL-transaction.Я, честно говоря, тоже в шоке от того, что MSSQL позволяет менять уровень изоляции тр-ций на лету

ChAКроме того, по стандартам ANSI рекомендуется вообще не допускать возможностей работы вне транзакций. А никто и не допускает :)
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34023376
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChAТогда зачем вообще существует режим RU ? :)
Для работы транзакций, которым нужен именно такой уровень изоляции.

ChAНо возможность написание неверного кода вряд ли может говорить об идеологической неверности языка, разве нет ?
Неудачная в данном случае аналогия, скрывающее суть.

Транзакция как понятие является чем-то вроде контракта: "если вы соблюдаете определенные правила, мы гарантируем такой-то результат". В обсуждаемом случае этот контракт нарушается, результат не гарантирован. Для ЯП такой контрактной схемой является, например, поведение конкретных операторов. И для соблюдения этого контракта точно так же накладываются ограничения, например запрет goto внутрь цикла или в другую подпрограмму.

ChAВас ведь не смущают автономные транзакции ?
Не смущают. Именно потому, что они автономные, и независимы от основной. Автономная транзакция - это просто удобный способ выполнить то, ради чего в противном случае пришлось бы поднимать второе соединение с БД.

ChAОни возвращаются к своему исходному состоянию, а внутри процедуры я волен устанавливать их в другое состояние, которое мне кажется более подходящим в конкретной ситуации.
Боюсь, быстро не найду, поэтому позволю себе задать вопрос: это относится к любому вызову процедуры или только к внешнему? То есть, если я вызываю процедуру А, из нее вызывается процедура Б - в какие моменты будет осуществляться возврат? И если после возврата из Б, то вернется ли он именно к сессионным установкам или же к текущим для А?

ChAЭто лишь потому, что он в Oracle такой, фактически эвивалентный RR.
Он заметно слабее RR, но безусловно, именно поэтому. Поэтому я и сказал начальную фразу - обнаружив неконсистентность селекта, я бы немедленно испытал желание работать в дефолтовом RR.

ChAТаким образом, будет также нехлопотно поставить в MSSQL уровень RR.
Хм. Тогда я не очень понимаю, что мы обсуждаем, если ветка началась именно с моей фразы, что я бы испытал желание именно это и сделать.

ChAИ что ? Клиент, ничтожно сумняшеся, не сможет поставить другой уровень изоляции ?
Как именно он сможет это сделать?

ChAК одной и той же БД может быть подключено несколько разных клиентов, написанных разными командами и решающими совершенно разные подзадачи, и у каждого из них могут быть свои требования.
Хм. Простите, не стоит ли читать повнимательнее? На всякий случай, напишу еще раз:

ALTER SESSION set isolation_level = serializable

И при чем тут разные клиенты разных команд разных задач?
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34023496
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad SQL2002 (Working Draft)16.2 <set transaction statement>
Function
Set the characteristics of the next SQL-transaction for the SQL-agent.
NOTE 415 – This statement has no effect on any SQL-transactions subsequent to
the next SQL-transaction.Спасибо ! Это вполне убедительно, насколько я понимаю английский. Значит MS в этом вопросе не придерживается стандарта. Жаль, так как это бывает иногда удобно, ведь для MSSQL это всего лишь обозначает продолжительность и диапазон накладываемых блокировок при чтении данных. Если отнять возможность играть уровнем изоляции, значит придется устанавливать уровень транзакций на допустимый минимум, и чаще использовать хинты, находящиеся вне юрисдикции стандартов. Увы...
sotwarerэто относится к любому вызову процедуры или только к внешнему? То есть, если я вызываю процедуру А, из нее вызывается процедура Б - в какие моменты будет осуществляться возврат? И если после возврата из Б, то вернется ли он именно к сессионным установкам или же к текущим для А?Установки возвращаются к тем, которые были на момент запуска процедуры. Т.е., если из A была вызвана B, то по окончанию B и возврата управления в A будут восстановлены все установки для A до запуска B. Иллюстрация такого поведения для TIL
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
CREATE PROC GCTIL @pNote varchar( 255 )
AS SELECT @pNote AS Note, [Value] AS TIL
FROM #t
WHERE [Set option] = 'isolation level'
GO

CREATE PROC CTIL @pNote varchar( 255 )
AS 
CREATE TABLE #t ([Set option] varchar( 255 ), [Value] varchar( 255 ))
INSERT INTO #t
EXEC ('DBCC USEROPTIONS')
EXEC GCTIL @pNote
GO

CREATE PROC b
AS 
EXEC CTIL 'b - init'
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
EXEC CTIL 'b - after set'
GO
CREATE PROC a
AS 
EXEC CTIL 'a - init'
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
EXEC CTIL 'a - after set'
EXEC b
EXEC CTIL 'a - after exec b'
GO

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
EXEC CTIL 'Start'
EXEC a
EXEC CTIL 'after exec a'
GO

DROP PROC a, b, ctil, gctil
Упрощенный выводStart : read uncommitted
a - init : read uncommitted
a - after set : read committed
b - init : read committed
b - after set : repeatable read
a - after exec b : read committed
after exec a : read uncommitted
softwarerне стоит ли читать повнимательнее?Извините, что не знаю, как работает ALTER SESSION set isolation_level. Судя по Вашей экспрессии, он заставляет любого клиента при подключении к Oracle иметь один единственный заранее установленный эээ...администратором уровень изоляции. Типа, у меня не забалуешь. Однако, тоже подход, иногда полезно.
* И, пожалуйста, больше так не надо, я же не тыкаю Вам в нос, что Вы не знаете, как работают установки сессии в MSSQL или какой-либо из его операторов.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34023560
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А можете показать по dml-операции между set transaction?
Оракель, for ex, обругает нехорошими словами, поскольку set transaction обязан быть первым statement в транзакции.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34023625
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChAУстановки возвращаются к тем, которые были на момент запуска процедуры. Т.е., если из A была вызвана B, то по окончанию B и возврата управления в A будут восстановлены все установки для A до запуска B.
То есть стек. Да, наверное это удобно.

ChAИзвините, что не знаю, как работает ALTER SESSION set isolation_level. Судя по Вашей экспрессии, он заставляет любого клиента при подключении к Oracle иметь один единственный заранее установленный эээ...администратором уровень изоляции. Типа, у меня не забалуешь. Однако, тоже подход, иногда полезно.
Признаться, мне бы и в голову не пришла столь фантастическая гипотеза. Моя экспрессия означает всего лишь, что эта строка работает в строгом соответствии с ее буквальным значением, если угодно с буквальным переводом на русский язык, и поэтому меня.. крайне удивила гипотеза, высказанная в ответе, поскольку она этому значению заведомо противоречит.

ChA * И, пожалуйста, больше так не надо, я же не тыкаю Вам в нос, что Вы не знаете, как работают установки сессии в MSSQL или какой-либо из его операторов.
Как Вам сказать... я совершенно не возражаю, если меня будут тыкать носом каждый раз, когда я позабуду нечто уже сказанное [а равно и в некоторых других случаях, например каждый раз, когда я скажу бред]. Как, скажем, недавно, когда я не обратил должного внимания на письмо Merle.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34023666
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousА можете показать по dml-операции между set transaction?Это устроит
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
BEGIN TRAN -- По умолчанию TIL = RC
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SELECT * FROM sysobjects WHERE id =  1 
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
SELECT * FROM syscolumns WHERE id =  1 
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
SELECT TOP  1  * FROM syscomments
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
SELECT * FROM syscolumns WHERE id =  2 
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SELECT * FROM sysobjects WHERE id =  2 
COMMIT
Разница, как говорилось выше, только в длительности и диапазоне блокировок при чтении.
При RU - блокировки не накладываются вовсе, читать можно практически все.
При RC - накладываются только на момент чтения данных. Как упоминалось ранее, в некоторых случаях сервер может этого и не делать.
При RR - до конца текущей транзакции.
При RS - до конца текущей транзакции + охватывается дополнительный диапазон, чтобы избежать появление феноменов вставки. Может произойти эскалация вплоть до блокировки таблиц.
softwarerПризнаться, мне бы и в голову не пришла столь фантастическая гипотеза.Наверное потому, что фактически Вы работаете только с Oracle. Мне это показалось лишь командой изменения текущей установки одного из параметров сессии. Т.е., если мне бы понадобилось изменить ее значение, то вызывал бы ее из клиента, установив другое значение TIL для моей текущей сессии, фактически, как аналог SET TRANSACTION ISOLATION LEVEL в MSSQL. Из русского буквального перевода совсем не следует ее глобальность и невозможность изменения для всех подключаемых клиентов, IMHO.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34023673
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChAOracle. Мне это показалось лишь командой изменения текущей установки одного из параметров сессии.
Вот теперь верно. И какое отношение к "текущей установке одного из параметров сессии" - подчеркну, моей сессии - имеют

ChAК одной и той же БД может быть подключено несколько разных клиентов, написанных разными командами и решающими совершенно разные подзадачи, и у каждого из них могут быть свои требования.

Да пусть они решают совершенно разные подзадачи со своими требованиями, мне-то что? Я сделал себе нужную установку и работаю в ней. Надеюсь, решать свои задачи они собираются не в моей сессии?

ChAфактически, как аналог SET TRANSACTION ISOLATION LEVEL в MSSQL.
Я подозреваю, что "аналог SET TRANSACTION ISOLATION LEVEL в MSSQL" в случае Oracle называется SET TRANSACTION ISOLATION LEVEL. Хотя лень проверять.

ChAИз русского буквального перевода совсем не следует ее глобальность и невозможность изменения для всех подключаемых клиентов, IMHO.
Мало того, если бы следовало, Ваш пассаж насчет разных задач и требований был бы обоснован. Но поскольку не следует и совершенно справедливо не следует....
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34023707
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerИ какое отношение к "текущей установке одного из параметров сессии" - подчеркну, моей сессии - имеют

ChAК одной и той же БД может быть подключено несколько разных клиентов, написанных разными командами и решающими совершенно разные подзадачи, и у каждого из них могут быть свои требования.

Да пусть они решают совершенно разные подзадачи со своими требованиями, мне-то что? Я сделал себе нужную установку и работаю в ней. Надеюсь, решать свои задачи они собираются не в моей сессии?
Сдается мне, мы просто друг друга не понимаем. Отсюда softwarerлибо например триггер на logon сделает ALTER SESSION SET ISOLATION_LEVEL = SERIALIZABLE, мне будет решительно наплевать, что там установил или не установил клиент.я делаю вывод, что после того, как любой клиент подключился к Oracle, ему тут же устанавливается определенный уровень TIL. Ведь это же триггер на logon, где можно, насколько понимаю, прописать некий контекст, в котором должен, по крайней мере - начать, работать клиент сразу после подключения. Но ведь БД может быть не одна, и даже на одной БД для работы разных клиентов(программ, а не пользователей(!)) может понадобиться различный TIL. Как же быть в этом случае ? Вы говорите "мне будет решительно наплевать, что там установил или не установил клиент ", откуда я делаю вывод, что команда ALTER SESSION SET ISOLATION_LEVEL препятствует изменению TIL. И тогда я Вас переспрашиваю ChAКлиент, ничтожно сумняшеся, не сможет поставить другой уровень изоляции ?. На что Вы мне отвечаете вопросом softwarer Как именно он сможет это сделать?и, более того, предлагаете внимательно прочитать и перевести буквально текст команды. После чего мне не остается ничего другого, как считать, что после задания в триггере на логон командой ALTER SESSION SET ISOLATION_LEVEL клиент не может поменять уровень изоляции своей сессии. И что же дальше ? Я пытаюсь пояснить ChAИз русского буквального перевода совсем не следует ее глобальность и невозможность изменения для всех подключаемых клиентов, IMHO.На что Вы отвечаете
softwarerМало того, если бы следовало, Ваш пассаж насчет разных задач и требований был бы обоснован. Но поскольку не следует и совершенно справедливо не следует....И вот тут я совсем перестаю Вас понимать.
Если TIL все-таки можно изменить после установки его в триггере логона командой ALTER SESSION SET ISOLATION_LEVEL, то значит клиент может выполнить какую либо из процедур БД не под тем TIL, который предполагал разработчик БД, а, соответственно, вольно или невольно нарушить логическую целостность БД, по причине того, например, что процедура прочитала незакоммиченные данные, в соответствии с текущим TIL, установленным им, - RU. Ведь проверку текущего TIL в процедуре Вы считаете хлопотным аналогом "гланды бормашиной". Установка TIL в процедуре тоже "идеологический бред". Как же тогда быть ? Можно конечно предположить, что в Oracle можно каким-то третьим способом зафиксировать TIL для конкретной процедуры, и все хлопоты побоку, но мне, увы, об этом неизвестно, но понять хотелось бы, как решаются подобные проблемы.
* Собственно, с этих "гланд" все и началось.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34023795
DimaR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
например, что процедура прочитала незакоммиченные данные соответствии с текущим TIL

В Oracle такого небывает

По умолчанию все сессии работаю в Read Commited (так сказать минимальный).

от повышения уровня изоляции в тригере может пострадать только производительность, если запускаемая задача ожидает Read Commited

Если же она ожидает работать в Read Commited и сама себе его установит, то опять же значит так и надо.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34023999
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaR
Код: plaintext
например, что процедура прочитала незакоммиченные данные соответствии с текущим TIL

В Oracle такого небываетЯ рад за Oracle, но это был пример. Не знаю я, что там бывает в Oracle, а чего нет. Хорошо, серверная процедура написана подразумевая RS, чтобы избегать фантомов вставки. А клиент установил себе RC и в какой-то момент запускает упомянутую процедуру. Она благополучно "хавает" фантом и опять же нарушает логическую целостность. Или такого тоже быть не может ?
И еще. TIL = RU в Oracle, насколько понимаю, вообще не бывает, краем же уха мелькало, что и с RS у него какие-то проблемы. Можно ли понять так, что фактически у него нет разных TIL, или их, по сути, не больше 2х: RC и RR, который несильно отличается от RC ? Только не воспринимайте это как наезд на Oracle, ради Бога. Всего лишь хочется понять, как он справляется с несогласованностью ожидаемого и реального TIL. DimaRЕсли же она ожидает работать в Read Commited и сама себе его установит, то опять же значит так и надо.Кому надо ? Значит ли это, что Oracle не гарантирует автоматически корректность работы при разногласии TIL подразумеваемой автором серверной процедуры и ее работы в контексте сессии клиентской части ? И она целиком зависит от согласованности действий разработчика БД и программиста клиентской части. Т.е., если автор серверной процедуры не предусмотрел никакого способа по проверке текущего TIL и/или явной установки TIL, то клиент может невзначай(ли) нарушить упомянутую целостность БД, вызвав ее при другом значении TIL.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34025002
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChAХорошо, тогда ответьте на такой вопрос - почему в стандарте ANSI есть оператор SET TRANSACTION, если его применение идеологически неверно ? Кроме того, по стандартам ANSI рекомендуется вообще не допускать возможностей работы вне транзакций. В Informix, если правильно помню, он так и назывался ANSI mode, у MSSQL - implicit. Для такого режима вообще нет понятия начала транзакции, так как вы всегда работаете в транзакции. Единственное, что можно, это делать COMMIT или ROLLBACK, после которой автоматически начинается следующая транзакция. В этом режиме тоже будем запрещать менять уровень транзакций ?
И, пожалуйста, больше не надо лозунгов про M$, не на демонстрации. На уровне "маздай" общаться в дальнейшем не намерен.

В Oracle SET TRANSACTION разрешается выполнять только непосредственно после завершения очередной транзакции и перед началом выполнения каких либо действий в новой транзакции. Если интересно, в теме Oracle есть продолжительное обсуждение на тему "Когда начинается транзакция", можно поискать. Кстати, не следует это путать с autocommit о котором вы говорите, когда каждый оператор выполняется в ОТДЕЛЬНОЙ транзакции, в Oracle именно потому и нет команды начала транзакции, что он всегда выполняет действия в транзакции, без всяких autocommit-ов (может себе это позволить).

P.S. Не хочешь лющаться - не общайся, кто же тебя заставит ???
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34025005
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChAВас ведь не смущают автономные транзакции ?

Не смущают. А вот возможность изменения уровня изоляции в ходе транзакции, смущает ОЧЕНЬ
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34025874
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChAСдается мне, мы просто друг друга не понимаем.
Видимо. Давайте смотреть.

ChAОтсюда ..... я делаю вывод, что после того, как любой клиент подключился к Oracle, ему тут же устанавливается определенный уровень TIL.
В целом верно.

ChAНо ведь БД может быть не одна, и даже на одной БД для работы разных клиентов(программ, а не пользователей(!)) может понадобиться различный TIL.
Как же быть в этом случае ?
А что мешает устанавливать каждой программе и/или каждому пользователю нужный TIL?

Я не понимаю, почему Вы говорите об установках сессии так, словно они едины для всех, кто работает с БД.

Также я не понимаю, почему по Вашим словам внутри сессии борятся разные клиенты. Такое впечатление, что моя программа установила нужный уровень изоляции, а все остальные лезут своими грязными руками в сессию моей программы и мешают ей работать. Вот я и спросил среди прочего - как они могли бы это сделать, даже имея такое желание?

Давайте пройдемся по пунктам с моей стороны. Прежде всего, Вы говорите:

Нехлопотно, если понимаю, установить один раз и навсегда уровень serialzable ? Но, допустим, это сделает один клиент, а другой, не мудрствуя лукаво, его не установит. И что тогда ?
Я в этот момент не совсем понимаю, что Вы имеете в виду под клиентом - то ли разные программы, подключающиеся к одной базе, то ли разные базы (например, разных пользователей программы, один из которых выполнил рекомендуемую настройку базы, а другой для своей БД проигнорировал рекомендацию). Но в обоих случаях действует один и тот же ответ:

Если моя программа .. сделает ALTER SESSION SET ISOLATION_LEVEL = SERIALIZABLE, мне будет решительно наплевать, что там установил или не установил клиент.
То есть: моя программа может настроить себе личный контекст работы, в который никто кроме нее, не залезет и который никому снаружи не помешает. Она работает как ей нужно, и на внешние настройки ей наплевать точно так же, как всем остальным наплевать на настройки ее сессии.

Как Вы сказали чуть позже, Вы поняли, что это именно настройки сессии. Я на это надеялся. Но тогда я совершенно не понимаю ответа:

И что ? Клиент, ничтожно сумняшеся, не сможет поставить другой уровень изоляции ? Он может совершенно не предполагать, что некий триггер на logon уже его устанавил. Более того, по задаче ему нужен другой уровень изоляции. К одной и той же БД может быть подключено несколько разных клиентов, написанных разными командами и решающими совершенно разные подзадачи, и у каждого из них могут быть свои требования.
Вот тут я просто не понимаю, что происходит. Мы говорим о настройках сессии, но откуда-то появляются "несколько разных клиентов", которые почему-то мешают уровню изоляции моей сессии, в моей сессии появляется какой-то другой клиент, который судя по всему написан не мной.... бред какой-то. Учитывая, что Вы похоже подразумеваете некие единые для всего сервера настройки TIL, я подчеркиваю, что речь идет о настройках сессии, не более того.

- RU. Ведь проверку текущего TIL в процедуре Вы считаете хлопотным аналогом "гланды бормашиной".
Да, определенно считаю. Писать регламент работы программистов типа "каждая ХП должна в начале работы проверять текущий TIL", потом придумывать как это требование будет проверяться - довольно дурное и хлопотное занятие.

Установка TIL в процедуре тоже "идеологический бред". Как же тогда быть ?
Не "установка TIL в процедуре", а "смена TIL по ходу транзакции". Если процедура выполняет транзакцию целиком, например для отчета - устанавливает RR, выполняет требуемые запросы, завершает транзакцию, возвращает результаты клиенту для отображения - не вижу ничего страшного.

Я уже сказал, как. Я предпочитаю работать так, чтобы в системе было малое количество не-RC транзакций и соответственно хранимок, требующих более чем RC. Также я избегаю хранимок, явно управляющих транзакциями (исключая savepoint-ы); это облегчает их повторное использование.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34026060
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerКак Вы сказали чуть позже, Вы поняли, что это именно настройки сессии. Я на это надеялся. Но тогда я совершенно не понимаю ответа:
И что ? Клиент, ничтожно сумняшеся, не сможет поставить другой уровень изоляции ? Он может совершенно не предполагать, что некий триггер на logon уже его устанавил. Более того, по задаче ему нужен другой уровень изоляции. К одной и той же БД может быть подключено несколько разных клиентов, написанных разными командами и решающими совершенно разные подзадачи, и у каждого из них могут быть свои требования.Вот тут я просто не понимаю, что происходит.
Александр, тут как раз все понятно.
Cha рассматривает сценарий, когда триггер on_logon устанавливает serializable, но приложение имеет собственное мнение по данному вопросу.
Вполне адекватный довод в контексте дискуссии о практичности изменения TIL непосредственно в ХП.
Другой вопрос, что системы слишком разные чтобы проводить подобные параллели - MSSQL не имеет аналога "ораклевого" RC, что и вынуждает менять TIL, oracle же не позволяет менять уровень изоляции посреди транзакции, что заставляет избегать управления уровнем изоляции внутри хранимых процедур.
Я лично не готов сказать какая из систем более "правильна" в данном вопросе, поскольку oracle слишком привычен и мнение будет предвзятым :)
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34026114
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousАлександр, тут как раз все понятно.
Cha рассматривает сценарий, когда триггер on_logon устанавливает serializable, но приложение имеет собственное мнение по данному вопросу.
Андрей, а кто пишет этот триггер? Каким образом мое приложение и мой триггер могут иметь различные собственные мнения на тему желаемого уровня изоляции? Это что, такое проявление шизофрении?

С другой стороны, если есть мое приложение, а кто-то другой, например администратор клиента, написал триггер на логон - именно этот кто-то и отвечает за последствия такого решения. Но именно поэтому я в первую очередь упомянул прямую установку параметра из программы, а триггер на логон - уже как возможную альтернативу для каких-то специфических ситуаций.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34026398
4321ё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarer если есть мое приложение, а кто-то другой, например администратор клиента, написал триггер на логон - именно этот кто-то и отвечает за последствия такого решения.
позвольте темному пояснить:

имхо очевидно, штаа ChA обсуждает случай, кады некая хапа делает именно то, что заявлено проектировщиком хапы, _независимо_ от того, кито писал (и буит пИсать) килиентаф. (что предпочтительно - "база и ее объекты поведенчески не зависят от настроения клиентов - и это праильно"). вы же - только соглассованную работу клиентаф и хапоф. вот сопсно и все. и я не думаю, что вы этого не поняли постов эдак эн тому взад. а домыслы про посторонних, лезущих хрясными ногхами в вашу рОдную зессию - вне фсякого контекста беседы. тут, как грицца ... нет злофф
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34026535
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChAЗначит ли это, что Oracle не гарантирует автоматически корректность работы при разногласии TIL подразумеваемой автором серверной процедуры и ее работы в контексте сессии клиентской части ? И она целиком зависит от согласованности действий разработчика БД и программиста клиентской части. Т.е., если автор серверной процедуры не предусмотрел никакого способа по проверке текущего TIL и/или явной установки TIL, то клиент может невзначай(ли) нарушить упомянутую целостность БД, вызвав ее при другом значении TIL.На этот вопрос кто-нибудь из знатоков Oracle способен внятно ответить или нет ?
Если вопрос поставлен некорректно, то просьба пояснить - почему.

P.S. В принципе, судя по некоторым оговоркам softwarer-а, подозреваю, что корректность таки не гарантируется, если нет согласованности действий разработчиков серверной и клиентской частей, но хотелось бы явного подтверждения.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34026661
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChAНа этот вопрос кто-нибудь из знатоков Oracle способен внятно ответить или нет ? Если вопрос поставлен некорректно, то просьба пояснить - почему.
Хм. Наверное, способен любой, хотя вопрос имхо бессмысленный.

Если хранимка, требующая для своей работы некоторого определенного контекста, вызвана в условиях, нарушающих этот контекст, и при этом не пытается ни установить нужный контекст, ни проверить его корректность, то результаты ее работы скорее всего непредсказуемы. Полагаю, это верно для любого сервера и любого контекста.

Я не понимаю, о чем Вы говорите, говоря о согласованности действий разработчика сервера и разработчика клиента. Если есть некоторое разделение полномочий, значит есть определенное API, которым пользуется разработчик клиента. Это API - единственный способ его общения с БД, и установка нужного контекста - задача именно этого API. Вся согласованность заключается в том, что клиент не лезет в базу мимо оговоренного интерфейса взаимодействия, что уже давно стало скорее элементом культуры, нежели требованием технологии.

Может быть, в этом и заключается причина нашего непонимания.

ChAP.S. В принципе, судя по некоторым оговоркам softwarer-а, подозреваю, что корректность таки не гарантируется, если нет согласованности действий разработчиков серверной и клиентской частей, но хотелось бы явного подтверждения.
Хм. Расскажите тогда уж, гарантируется ли то же самое в других реализациях и как именно.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34026992
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChA ChAЗначит ли это, что Oracle не гарантирует автоматическиНа этот вопрос кто-нибудь из знатоков Oracle способен внятно ответить или нет ?
Сервер может Автоматически Гарантировать только то, что соответствующим образом задекларировано.
Oracle PL/SQL не предусматривает каких-либо способов декларации TIL => запуск процедуры в среде с иным значением TIL может нарушить логику работы процедуры.
ЗЫ: мне интересно, к каким именно выводам это сообщение приведет уважаемого оппонента :)
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34027061
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerЕсли хранимка, требующая для своей работы некоторого определенного контекста, вызвана в условиях, нарушающих этот контекст, и при этом не пытается ни установить нужный контекст, ни проверить его корректность, то результаты ее работы скорее всего непредсказуемы. Ну, наконец-то. TIL в процедуре не проверяем, не устанавливаем, получаем ошибку. Все. Продолжать не надо.
* Именно это я и пытался выяснить. Одного не могу понять, почему смысл вопроса похоже был понятен почти всем, кроме Вас.
softwarerЯ не понимаю, о чем Вы говорите, говоря о согласованности действий разработчика сервера и разработчика клиента. Если есть некоторое разделение полномочий, значит есть определенное API, которым пользуется разработчик клиента. Это API - единственный способ его общения с БД, и установка нужного контекста - задача именно этого API.Искренне рад за Вас, что живете в идеальном мире и никогда не сталкивались с тем, что имея API, тем не менее, сплошь и рядом использующие его разрабочики делают ошибки при его использовании, не говоря уж о том, что и разработчики API далеко не безгрешны.
* Тему про то, что надо гнать таких разработчиков, предлагаю не развивать. Я тоже хотел бы жить в идеальном мире.

softwarerРасскажите тогда уж, гарантируется ли то же самое в других реализациях и как именно.Про всех не знаю, в MSSQL точно не гарантируется. Но есть возможность минимизировать влияние подобных ошибок, в частности, проверкой и/или изменением TIL. Теоретически, да и практически, наверняка это может привести к ошибках в некоторых ситуациях. Но тем не менее эта же возможность может дать в определенных ситуациях прирост производительности и/или гарантию целостности, если, разумеется, грамотно ею пользоваться, просчитывая последствия.
Практический пример: если известно, что данный отчет требует только TIL=RR, то в процедуре, реализующей такой отчет, несложно именно это и указать. И мне все равно, что клиентской части для большинства операций требуется всего лишь RC. Запуская мою процедуру, программист КЧ в любом случае получит вполне консистентный отчет, даже не задумываясь, а какой же он должен был проставить TIL для этого. Разумеется, можно его заставить в самом начале сессии установить RR и работать только под ним, но на большинстве операций это будет более чем излишне и даже вредно. В частности, может просесть проиводительность в многопользовательской среде, так как появится больше конфликтов на блокировках.
* В некотором смысле, мне кажется это более грамотный подход к API, чем меньше разработчику КЧ нужно знать о сервере, TIL и прочей лабуде, тем лучше. IMHO.
andrey_anonymousмне интересно, к каким именно выводам это сообщение приведетРовно к этим andrey_anonymousзапуск процедуры в среде с иным значением TIL может нарушить логику работы процедуры

P.S. В принципе, на этом предлагается закончить мой офтоп.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34027102
Фотография Anton Demidov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 ChA
Вы упустили один важный момент - в оракле TIL можно выставить только завершив предыдущую транзакцию и, соотв. автоматически начав новую.
Для вашего примера с ХП, эта процедура первой командой говорит COMMIT, потом SET TRANSACTION <то, что нам надо>. Последней командой тоже будет COMMIT, чтобы сбросить TIL в дефолтный. Этим и обеспечится независимость серверного кода от текущих настроек транзакции сессии вызывающего клиента.
Код: plaintext
1.
2.
--
Антон
Per rectum ad astrum
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34027189
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anton Demidov2 ChA
Вы упустили один важный момент - в оракле TIL можно выставить только завершив предыдущую транзакцию и, соотв. автоматически начав новую.
Я не упустил, я этого даже не знал. Поэтому и спрашивал - как ? Теперь знаю, собственно об этом уже несколько ранее сказал Gluk (Kazan). Anton DemidovДля вашего примера с ХП, эта процедура первой командой говорит COMMIT, потом SET TRANSACTION <то, что нам надо>. Последней командой тоже будет COMMIT, чтобы сбросить TIL в дефолтный. Этим и обеспечится независимость серверного кода от текущих настроек транзакции сессии вызывающего клиента.Но при этом, насколько понимаю, будет разорвана транзакция. Вообще, как обходить - это уже совсем другой вопрос, ответ на него сразу проистекает из Вашего предыдущего абзаца, но ранее мне на него уже четко ответили, что не царское это дело. Не соблюл, сам виноват, получи неявную ошибку. Это ни хорошо, это ни плохо - это так.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34027202
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChAЭто ни хорошо, это ни плохо - это так.
Вообще разница по отношению к MSSQL есть.
"Оракловый" RC - штука настолько удобная и сбалансированная, что потребность в serializable - скорее экзотика.
Если я правильно понял, то последовательность

Код: plaintext
1.
2.
3.
select from t1...
select from t2...
select from t3...

в MSSQL будет выглядеть примерно как

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
set transaction isolation level repeatable_read;
select from t1...
set transaction isolation level read_commited;
set transaction isolation level repeatable_read;
select from t2...
set transaction isolation level read_commited;
set transaction isolation level repeatable_read;
select from t3...
set transaction isolation level read_commited;

Ну и плюс блокировки...
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34027292
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChA * Именно это я и пытался выяснить. Одного не могу понять, почему смысл вопроса похоже был понятен почти всем, кроме Вас.
Я не понимаю, почему Вы ожидали от меня ответа на вопрос, адресованный не мне. Собственно, я не читал Вашу беседу с Димой, и увидел его только в Вашей же цитате.

Также меня удивляет, что Вы задали вопрос, ответ на который я практически дал еще пару страниц назад, и оказывается просили на него ответить.

ChAИскренне рад за Вас, что живете в идеальном мире
Хм. До сих пор я считал, что сталкиваюсь с кучей недоработок в технологии разработки. Но за последние несколько дней уже в третий раз слышу, что ситуация, которая с моей точки зрения кишит недостатками, с точки зрения MSSQL-разработчиков является недостижимым идеалом. Забавно...

ChAи никогда не сталкивались с тем, что имея API, тем не менее, сплошь и рядом использующие его разрабочики делают ошибки при его использовании, не говоря уж о том, что и разработчики API далеко не безгрешны.
Прежде всего, я прошу Вас не уводить разговор в сторону, и таки объяснить, что за взаимодействие Вы подразумеваете и какое место оно занимает в технологии разработки. Просто нарисовать картину: есть такие-то люди, у них такие-то обязанности, они делают то-то, и если не договорятся вот здесь вот об этом, будет плохо.

Далее, Вы в очередной раз рисуете некую странную картину. Раньше у нас была разделяемая сессия, теперь оказывается в результате "ошибки в использовании API" программист клиента по собственному разумению устанавливает уровень изоляции. Хотелось бы получить более подробное описание ситуации, как Вы ее видите.

Наконец, отмечу, что если мой программист начхает на оговоренный интерфейс и выполнит что-то, в том числе ALTER SESSION, в обход специфицированного взаимодействия - я, видимо, буду шокирован. До сих пор я так был шокирован единственный раз в жизни; отмечу, что те двое сотрудников - единственные до сих пор, кого я уволил. И надеюсь больше с таким не встретиться. Если хотите, считайте это идеальным миром.

ChAНо тем не менее эта же возможность может дать в определенных ситуациях прирост производительности и/или гарантию целостности, если, разумеется, грамотно ею пользоваться, просчитывая последствия.
Не знаю, пожалуй что не готов судить. С одной стороны, "фичи лишними не бывают", всегда можно не пользоваться теми, которые не подходят к ситуации. С другой стороны, я как-то затрудняюсь представить себя, объясняющим, когда и как стоит использовать эту фичу.

В целом, пожалуй, я бы отметил две вещи. Первая: как только мы говорим, что нужно грамотно пользоваться и просчитывать последствия, мы тем самым поднимаем требования к разработчику; об упрощении разработки речи не идет (согласен, вполне может идти об эффективности). Вторая: если вспомнить, что стартовали мы с консистентного чтения, то в целом я весьма рад, что его существование в Oracle избавляет меня от просчета подобных ситуаций. Что касается цены вопроса... в принципе, конечно, консистентность стоит определенных ресурсов, требуя дополнительных чтений. Я замерял производительность запросов в зависимости от количества старых данных, которые нужно поднять, и пришел к выводу, что в практически встречающихся ситуациях соответствующие потери пренебрежимо малы, меньше одного процента; чтобы получить серьезную разницу, надо специально моделировать ситуацию.

ChAЗапуская мою процедуру, программист КЧ в любом случае получит вполне консистентный отчет, даже не задумываясь, а какой же он должен был проставить TIL для этого.
Простите, я снова не понимаю технологии, которую Вы подразумеваете. Программист клиентской части никогда-никогда-никогда не устанавливает TIL, если, конечно, мы говорим о процессе разработки с четко очерченными полномочиями (то есть о процессе, где есть смысл говорить о "программисте КЧ"). Вместо этого программист КЧ вызывает специфицированные для него методы интерфейса; для простоты считайте, что это ХП. Программист серверной части реализует эти методы, в том числе распихивает по ним установку уровня изоляции, если это нужно. Скажем, если Вы будете программистом КЧ, получите от меня задание что-нибудь вроде "сразу после коннекта к БД вызвать ХП Init с такими-то параметрами". Эта процедура сделает много всего, скажем даст сессии полагающиеся роли, настроит row-level security, инициализирует серверные переменные и прочий контекст, в том числе, если нужно, выполнит ALTER SESSION SET ISOLATION_LEVEL. Вы как программист КЧ об этом думать не будете, а знать - только если полюбопытствуете.

ChA * В некотором смысле, мне кажется это более грамотный подход к API, чем меньше разработчику КЧ нужно знать о сервере, TIL и прочей лабуде, тем лучше. IMHO.
Возможно, это более грамотный подход, но я не понял, с какой хренью Вы его сравниваете и откуда Вы ее откопали.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34027375
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous"Оракловый" RC - штука настолько удобная и сбалансированная, что потребность в serializable - скорее экзотика.
Здесь я уже высказал такую гипотезу ChATIL = RU в Oracle, насколько понимаю, вообще не бывает, краем же уха мелькало, что и с RS у него какие-то проблемы. Можно ли понять так, что фактически у него нет разных TIL, или их, по сути, не больше 2х: RC и RR, который несильно отличается от RC ? Вы ее сейчас фактически подтвердили.
andrey_anonymousЕсли я правильно понял, то последовательность
Код: plaintext
1.
2.
3.
select from t1...
select from t2...
select from t3...
в MSSQL будет выглядеть примерно как
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
set transaction isolation level repeatable_read;
select from t1...
set transaction isolation level read_commited;
set transaction isolation level repeatable_read;
select from t2...
set transaction isolation level read_commited;
set transaction isolation level repeatable_read;
select from t3...
set transaction isolation level read_commited;
Почему ? Если для 3 идущих подряд селектов мне нужен RR, а после них надо вернуться к RC, то это может выглядеть так
Код: plaintext
1.
2.
3.
4.
set transaction isolation level repeatable read
select from t1...
select from t2...
select from t3...
set transaction isolation level read commited
andrey_anonymousНу и плюс блокировки...Что значит "плюс" ? Блокировки - неотъемлимая часть MSSQL, как блокировочника.
softwarerДалее, Вы в очередной раз рисуете некую странную картину. Раньше у нас была разделяемая сессия, теперь оказывается в результате "ошибки в использовании API" программист клиента по собственному разумению устанавливает уровень изоляции. Хотелось бы получить более подробное описание ситуации, как Вы ее видите.Вы просто смотрите странным взглядом. Это у Вас откуда-то появилась "разделяемая" сессия, которая появилась неизвестно каким боком.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34027377
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Случайно сохранил. Впрочем, это уже неважно. Господин softwarer, не вижу смысла в продолжении нашей беседы на эту тему, разрешите откланяться.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34027391
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChA andrey_anonymous"Оракловый" RC - штука настолько удобная и сбалансированная, что потребность в serializable - скорее экзотика.
Здесь я уже высказал такую гипотезу
Простите, но по ссылке Вы высказывали какие-то совсем другие гипотезы :) ChA.
andrey_anonymousЕсли я правильно понял, то последовательность
Код: plaintext
1.
2.
3.
select from t1...
select from t2...
select from t3...
в MSSQL будет выглядеть примерно как
Почему ? Если для 3 идущих подряд селектов мне нужен RR
Нет. Мне нужен RC, но каждый запрос должен вернуть консистентный набор.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34027408
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChAСлучайно сохранил. Впрочем, это уже неважно. Господин softwarer, не вижу смысла в продолжении нашей беседы на эту тему, разрешите откланяться.
Кланяйтесь.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34027410
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousПростите, но по ссылке Вы высказывали какие-то совсем другие гипотезыОК, другие. Можете их подтвердить или опровергнуть ? Впрочем, не надо. Мне будет проще прочитать в документации по Oracle, потому что устал от версий, что я спросил или что имел в виду. Возможно, у меня дар выражаться непонятно. andrey_anonymousМне нужен RC, но каждый запрос должен вернуть консистентный набор.Если Вам нужен консистентный набор, то, по стандарту и в MSSQL, нужно устанавливать TIL не ниже RR. Об этом уже говорилось, кажется, на 8 странице.
Если между выполнением селектов по каким-то причинам надо быть в RC, то Ваш первый скрипт был верным. Но это имеет смысл, только если между селектами, а точнее - между изменениями TIL, выполняется еще какой-либо осмысленный код, которому для корректного выполнения достаточно RC. В противном случае, смысл перехода в RC, чтобы следующей выполняемой строкой снова перейти в RR лично для меня непонятен, хотя такой код вполне возможен.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34027930
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousНет. Мне нужен RC, но каждый запрос должен вернуть консистентный набор.
Насколько я понимаю реализацию MSSQL, в приведенном ChA коде Вы получите именно то, что ожидаете.

Подозреваю, здесь снова различие в деталях реализации одинаково называемых TIL. Вы привыкли понимать RR как согласованность всех наборов данных в транзакции; как и в случае RC это более сильное требование, чем в RR в MSSQL-реализации. В последнем случае, как я понимаю, на прочитанные записи накладывается блокировка до конца транзакции, что обеспечивает неизменность данных до конца транзакции (и следовательно их повторное считывание, причем не только RR-транзакцией, а и всеми остальными тоже).
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34029072
pavelvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С большим интересом прочитал всё обсуждение. В процессе чтения меня постоянно не покидало ощущение абсолютной бессмысленности топика и полного непонимания оппонентами друг друга. А зачастую и непонимания предмета обсуждения.
Примеры.
ASCRUS называет фантомами то, что ими никоем образом не является. И все согласны...
ChA говорит что в Oracle RC фактически эквивалентен RR. И опять все согласны...
Ещё кто-то говорит, что в Oracle нет serializable, потому что там фантомы. И снова всё согласны...

Господа, но ведь всё это неправда.
RC в Oracle - нормальный RC, соответствующий требованиям согласованности. Как у нормального версионника это "честная" согласованность. Никаким RR тут и не пахнет. Это честный RC, в отличие от того же MSSQL. И других блокировочных серверов в которых понятие согласованности весьма относительно. И это их "плата".
В настоящем версионнике, как и в Oracle, нет и не может быть уровня изоляции repeatable read в принципе. Он там просто не получается! За RC сразу следует serializable. Естественно никаких фантомов в serializable нет и быть не может, по определению.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34029134
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pavelvpASCRUS называет фантомами то, что ими никоем образом не является. И все согласны...
ChA говорит что в Oracle RC фактически эквивалентен RR. И опять все согласны...
Ещё кто-то говорит, что в Oracle нет serializable, потому что там фантомы. И снова всё согласны...
Естественно никаких фантомов в serializable нет и быть не может, по определению.
Не то чтобы согласны, но не хотят разводить флейм :)
Однако serializable в Oracle действительно не соответствует последнему стандарту (чуть упростили определение). Действительно можно построить такую схему взаимодействия параллельных пишущих транзакций, в результате которой база данных перейдет в состояние, которое невозможно получить при последовательном их выполнении.
Правда, бизнес-смысл подобной конструкции несколько туманен, но факт есть факт - постороить можно :)
К читающим транзакциям это действительно не относится, но опять-таки тема слишком флеймоопасна :)
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34029918
pavelvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousДействительно можно построить такую схему взаимодействия параллельных пишущих транзакций, в результате которой база данных перейдет в состояние, которое невозможно получить при последовательном их выполнении. Не ради флейма, но всё же можно примерчик такой схемы взаимодействия? Для меня непонятно, что значит "схема взаимодействия параллельных пишущих транзакций"... Что это за такое взаимодействие параллельных транзакций?
Как-то нехорошо звучит эта фраза.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34029941
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pavelvp andrey_anonymous Не ради флейма, но всё же можно примерчик такой схемы взаимодействия?
Проще простого:
Код: plaintext
1.
2.
SQL> create table ane_t (id) as select  1  from dual;

Table created

Сессия1:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
SQL> set transaction isolation level serializable;

Transaction set

SQL> insert into ane_t select max(id)+ 1  from ane_t;

 1  row inserted

Сессия2:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SQL> set transaction isolation level serializable;

Transaction set

SQL> insert into ane_t select max(id)+ 1  from ane_t;

 1  row inserted

SQL> commit;

Commit complete

SQL> 

Снова сессия1:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SQL> commit;

Commit complete

SQL> select * from ane_t;

        ID
----------
          1 
          2 
          2 

SQL> 

Попробуйте получить аналогичный результат, выполняя транзакции последовательно :)
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34030047
Фотография Anton Demidov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей, что-то я ваш пример не понял. Нормальное поведение, причём не зависит от установок set transaction isolation level - проверил на 9.2.0.8
Код: plaintext
1.
2.
--
Антон
Per rectum ad astrum
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34030053
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anton DemidovАндрей, что-то я ваш пример не понял. Нормальное поведение
С какой точки зрения нормальное? С точки зрения определения сериализуемости - определенно нет.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34030089
Фотография Anton Demidov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В доке говорится про модификацию, у нас - вставка.
Код: plaintext
1.
2.
--
Антон
Per rectum ad astrum
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34030126
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anton DemidovВ доке говорится про модификацию, у нас - вставка.
Во-первых, как мне кажется, Вы привели не совсем удачный пример. "modify table" - это вовсе не только update.

Лучший линк - например, http://download-uk.oracle.com/docs/cd/B19306_01/server.102/b14220/consist.htm#sthref1981 Обратите внимание на Serializable isolation permits concurrent transactions to make only those database changes they could have made if the transactions had been scheduled to run one after another. - это фактически цитирование стандартного определения, и пример Андрея показывает, что все не так просто, а дальше там написано следующее:

Although Oracle serializable mode is compatible with SQL92 and offers many benefits compared with read-locking implementations, it does not provide semantics identical to such systems. Application designers must take into account the fact that reads in Oracle do not block writes as they do in other systems. Transactions that check for database consistency at the application level can require coding techniques such as the use of SELECT FOR UPDATE. This issue should be considered when applications using serializable mode are ported to Oracle from other environments.

Фактически Oracle подразумевает под "сериализацией" "сериализацию update/delete".
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34030188
Фотография Anton Demidov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SQL> commit;
Commit complete

SQL> select * from ane_t;
        ID
----------
          1 
          2 
          2 

SQL> 
Комит видишь? Он завершил нашу serializable транзакцию. Соответственно мы начинаем видеть строчку из другой сессии. Пока не было комита видели только себя и то, что было до начала нашей транзакции. Что неправильно?
Код: plaintext
1.
2.
--
Антон
Per rectum ad astrum
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34030195
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anton DemidovЧто неправильно?
Антон, попробуйте:
1) взять себя в руки
2) прочитать определение serializable в последней версии стандарта
3) получить аналогичный результат, выполняя, в соответствии с определением, данные транзакции последовательно
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34030247
Фотография Anton Demidov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Взял себя в руки, напряг гугл и нашел это . Наш любимый Том Кайт развенчивает очередной миф на нашем же примере.
Вот сам текст стандарта. В комментариях (конец стр. 68, начало стр. 69) отчетливо прописано, что :
SQL92Together with serializable execution, this implies that all read opera-
tions are repeatable within an SQL-transaction at isolation level
SERIALIZABLE, except for:

1) the effects of changes to SQL-data or schemas and its contents
made explicitly by the SQL-transaction itself,

2) the effects of differences in parameter values supplied to pro-
cedures, and

3) the effects of references to time-varying system variables such
as CURRENT_DATE and CURRENT_USER.
Как видите, первый пункт у нас не выполняется.
Код: plaintext
1.
2.
--
Антон
Per rectum ad astrum
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34030256
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anton DemidovВзял себя в руки
[quot SQL92]
Код: plaintext

Нет, Антон, не взяли.
SQL92 - это далеко не последняя версия стандарта.
Ищите лучше :)
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34030258
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anton DemidovКак видите, первый пункт у нас не выполняется.
Кстати, дело совсем не "в первом пункте" :)
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34030262
Yo.!!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Anton Demidov

вы не внимательно прочли даже этот топик. ситуация такая - есть стандарт 92 года, в нем serializable дефинируется через феномены, оракловый serializable полностью избавляет от всех феноменов из стандарта, поэтому полностью отвечает требованиям стандарта 92. однако позже (в 98-ом наверно) до них дошло, что у версионников вообще другие уровни и ввели новый уровень snapshot, а serializable в новом стандарте требует эфекта последовательного исполнения транзакций. наверно оракл мог бы ввести блокировки предикатов и новый уровень serializable98, чтоб удолетворить новое требование, но похоже это нафиг кому нужно и поэтому теперь вроде как получается, что serializable у оракла не честный ...
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34030282
Фотография Anton Demidov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей, я так понял, что "стандарт" неведомого нам года (вам, похоже тоже, т.к. иначе давно бы указали ссылку) требует блокировки чтения во второй сессии вашего примера.
andrey_anonymous
Сессия2:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SQL> set transaction isolation level serializable;
Transaction set

SQL> insert into ane_t select max(id)+ 1  from ane_t;
-- A.D. вот здесь нам бы подвиснуть до комита в первой сессии
 1  row inserted

SQL> commit;
Commit complete

SQL> 

Угадал?
Может не будете больше намёками говорить - вроде здесь все свои?
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34030299
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в InterBase/Firebird уровень изолированности SERIALIZABLE эмулируется при помощи явной блокировки таблиц. При старте транзакции есть параметр consistency, это то же самое что snapshot, но блокировки на таблицы накладываются не shared, а exclusive. и можно наложить блокировки по чтению и по записи для конкретных таблиц (перечислив при старте транзакции). А также поставить режим wait. В результате транзакция при старте повиснет на блокировке таблицы, если такая обнаружится, а при "отвисании" заблокирует нужные таблицы напрочь, до своего завершения.
Если же wait не ставить, то такая транзакция при обнаружении несовместимых конкурирующих транзакций будет обламываться сразу при старте.

таким образом доступ к таблицам можно обеспечить "последовательным" исполнением транзакций. Однако понятно, что в конкурентной среде при большом числе активных транзакций у таких транзакций-"блокировщиков" мало шансов стартовать (в смысле дождаться освобождения изменения нужных таблиц конкурирующими транзакциями).
В частности, этот режим можно использовать для редких операций, например монопольного редактирования справочников. Если редактирование справочника организовать в такой транзакции, то оно всегда будет монопольным. По чтению конкурирующие транзакции в этом случае блокировать не обязательно (как этого требует стандарт).

www.ibase.ru/devinfo/ibtrans.htm , см. set transaction ... reserving.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34030404
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!!вы не внимательно прочли даже этот топик. ситуация такая - есть стандарт 92 года, ...... однако позже (в 98-ом наверно) до них дошло, что у версионников вообще другие уровни ...
Я бы чуть иначе расставил акценты. Понятие serializable существует давно, придумано задолго до 92-го года, со вполне четким определением. Когда творили стандарт'92, как и в других подобных случаях, пошли на очень неудачные компромиссы, основной целью которых было хоть чучелом, хоть тушкой, но впихнуть существующие реализации в этот стандарт. В том числе поэтому стандарт до сих пор, включая SQL2003, серьезного практического смысла не имеет, хотя надо сказать, он намного лучше SQL92.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34030744
pavelvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!!наверно оракл мог бы ввести блокировки предикатовА у Oracle нет блокировки предикатов?
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34030753
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!!2Anton Demidov

вы не внимательно прочли даже этот топик. ситуация такая - есть стандарт 92 года, в нем serializable дефинируется через феномены, оракловый serializable полностью избавляет от всех феноменов из стандарта, поэтому полностью отвечает требованиям стандарта 92 .


Позвольне несогласиться.
Приведенный Андреем пример полностью противоречит
следующим строчкам стандарта:

SQL92

The execution of concurrent SQL-transactions at isolation level
SERIALIZABLE is guaranteed to be serializable. A serializable exe-
cution is defined to be an execution of the operations of concur-
rently executing SQL-transactions that produces the same effect as
some serial execution of those same SQL-transactions. A serial exe-
cution is one in which each SQL-transaction executes to completion
before the next SQL-transaction begins.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34030771
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pavelvpА у Oracle нет блокировки предикатов?
Нет. Наличие блокировки предикатов в точности и означает наличие "честного" serializable. Я не интересовался состоянием дел в последние годы, а по старым воспоминаниям, никто пока не придумал способа реализовать ее с приемлимой эффективностью.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34030981
Yo.!!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat-
Позвольне несогласиться.
Приведенный Андреем пример полностью противоречит
следующим строчкам стандарта:

тогда вам прийдется не согласится за одно с IBM, Microsoft, HP и прочими членами tpc council. ;) откройте любой их отчет они все пишут что оракловый serializable полностью удолетворяет стандарту 92. там буквально абзацем ниже дается дефениция всем уровням изолированости через феномены
The isolation level specifies the kind of phenomena that can occur during the execution of concurrent SQL-transactions.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34031109
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!! onstat-
Позвольне несогласиться.
Приведенный Андреем пример полностью противоречит
следующим строчкам стандарта:

тогда вам прийдется не согласится за одно с IBM, Microsoft, HP и прочими членами tpc council. ;) откройте любой их отчет они все пишут что оракловый serializable полностью удолетворяет стандарту 92. там буквально абзацем ниже дается дефениция всем уровням изолированости через феномены
The isolation level specifies the kind of phenomena that can occur during the execution of concurrent SQL-transactions.

Я не вижу противоречий между приведенной Вами цитатой и
стандартом.
SQL92
The four isolation levels guarantee that each SQL-transaction will
be executed completely or not at all, and that no updates will be
lost. The isolation levels are different with respect to phenomena
P1, P2, and P3. Table 9, "SQL-transaction isolation levels and the
three phenomena" specifies the phenomena that are possible and not
possible for a given isolation level.


Разница только в том, что цитата говорит о каких-то абстрактных типах феноменов которые могут быть в принципе,
А стандарт описывает правила поведения для уровней изоляции
для конкретных феноменов.

з.ы. В подтверждение Ваших слов, пожалуста, потрудитесь привести более точную цитату и ссылку.
Мне некогда искать tpc репорты, которым лично я не доверяю,
потому что в этих репортах ничего рекламы не вижу.
Что бы проверить их прадивость, нужно потратить миниум сумму с 5-ью нулями
для каждого репотра.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34031170
Yo.!!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat-
з.ы. В подтверждение Ваших слов, пожалуста, потрудитесь привести более точную цитату и ссылку.
Мне некогда искать tpc репорты, которым лично я не доверяю,
потому что в этих репортах ничего рекламы не вижу.

надеюсь за мои труды мне воздастся ;)
авторSerializable Transactions:
Oracle supports serializable transaction isolation in full compliance with the SQL92 and
TPC-C requirements. This is implemented by extending multiple concurrency control
mechanisms long supported by Oracle.

Fujitsu: http://tpc.org/results/FDR/TPCC/fujitsu_primequest480_tpcc_fdr.pdf
HP: http://tpc.org/results/FDR/TPCC/tpcc.hp.rx6600.fdr.pdf
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34031193
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!!
надеюсь за мои труды мне воздастся ;)


Спасибо, будет у нас в Днепропетровске, сообщите в личку.
Пива выпьем ;)
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34031208
Yo.!!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нее ... уж лучше вы к нам (C)
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34031343
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!!
Fujitsu: http://tpc.org/results/FDR/TPCC/fujitsu_primequest480_tpcc_fdr.pdf
HP: http://tpc.org/results/FDR/TPCC/tpcc.hp.rx6600.fdr.pdf

fujitsu_primequest480_tpcc_fdr.pdf
Serializable Transactions:
Oracle supports serializable transaction isolation in full compliance with the SQL92 and
TPC-C requirements. This is implemented by extending multiple concurrency control
mechanisms long supported by Oracle.
.......
Oracle implements SERIALIZABLE mode by extending the scope of read consistency
from individual query to the entire transaction itself
. ALL reads by serializable
transactions are therefore repeatable, as the transaction will access prior versions of data
changed (or deleted) by other transactions after the start of serializable transactions.
Thus, a serializable transaction sees a fixed snapshot of the database, established at the
beginning of the transaction.


Еще раз спасибо, за подтверждение.

Суть в выделенных словах и главное из них itself .
Как много смысла может поменять одно слово из 6 букв:(
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34031367
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat- fujitsu_primequest480_tpcc_fdr.pdf
Serializable Transactions:
Oracle supports serializable transaction isolation in full compliance with the SQL92 and
TPC-C requirements. This is implemented by extending multiple concurrency control
mechanisms long supported by Oracle.
.......
Oracle implements SERIALIZABLE mode by extending the scope of read consistency
from individual query to the entire transaction itself
. ALL reads by serializable
transactions are therefore repeatable, as the transaction will access prior versions of data
changed (or deleted) by other transactions after the start of serializable transactions.
Thus, a serializable transaction sees a fixed snapshot of the database, established at the
beginning of the transaction.

Суть в выделенных словах и главное из них itself .
Как много смысла может поменять одно слово из 6 букв:(
Простите, а что конкретно изменило слово "itself" применительно к процитированному тексту?
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34031504
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous onstat- fujitsu_primequest480_tpcc_fdr.pdf
Serializable Transactions:
Oracle supports serializable transaction isolation in full compliance with the SQL92 and
TPC-C requirements. This is implemented by extending multiple concurrency control
mechanisms long supported by Oracle.
.......
Oracle implements SERIALIZABLE mode by extending the scope of read consistency
from individual query to the entire transaction itself
. ALL reads by serializable
transactions are therefore repeatable, as the transaction will access prior versions of data
changed (or deleted) by other transactions after the start of serializable transactions.
Thus, a serializable transaction sees a fixed snapshot of the database, established at the
beginning of the transaction.

Суть в выделенных словах и главное из них itself .
Как много смысла может поменять одно слово из 6 букв:(
Простите, а что конкретно изменило слово "itself" применительно к процитированному тексту?

Постараюсь расставить точки над Ё :)

ИХМО 1. itself озанчает, что serializable
действителен только внутри транзакции, где конкуренции и так нет.

ИХМО 2. Если смотреть на стандарт, то это не full compliance

Нонсенс какойто, точки противоречат.
А первая еще и вносит неясность с понятием serializable из-за itself
усилинным словом entire .


зы Хорошая игра слов однако. Или у меня плохо с Английским?
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34031513
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat-Постараюсь расставить точки над Ё :)
ИХМО 1. itself озанчает, что serializable
действителен только внутри транзакции, где конкуренции и так нет.Нет... onstat-зы Хорошая игра слов однако. Или у меня плохо с Английским?
Вот это может быть.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34031576
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat-ИХМО 1. itself озанчает, что serializable
действителен только внутри транзакции
Это слово относится к read consistency, а не к serializable, и в сумме получается примерно так: "распространением согласованности чтения на уровень транзакции в целом, не более и не менее" [entire и itself задают две границы, снизу и сверху].

onstat-ИХМО 2. Если смотреть на стандарт, то это не full compliance
Имхо, конечно, может быть любым, но в данном случае существует общепринятое мнение, выработанное по сути авторами стандарта, и спорить относительно формы вряд ли осмысленно.

Я бы сосредоточился на другом аспекте: на том, что из формального соответствия уровней изоляции совершенно не следует возможность одинаково писать для разных серверов.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34032009
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
onstat-ИХМО 1. itself озанчает, что serializable
действителен только внутри транзакции
Это слово относится к read consistency, а не к serializable, и в сумме получается примерно так: "распространением согласованности чтения на уровень транзакции в целом, не более и не менее" [entire и itself задают две границы, снизу и сверху].



ИХМО itself относится к транзакции в целом, которая работает в serializable mode.

Oracle обеспечивает serializable mode как расширение области видимости
конкретного консистентного запроса ко всей транзакции в целом.

Не знаю что они хотели этим сказать.

и далее


Thus, a serializable transaction sees a fixed snapshot of the database, established at the
beginning of the transaction.


serializable transaction видит фиксированный моментальный снимок(я специально перевел shapshot)базы данных устновленный на начало транзакции.

То есть берем данные на начало транзакции, предикаты не блокируем
(потому, что снапшот), вносим изменения в базу данных
на основании данных из снапшота, не учитывая закомиченых
транзакций из других сессий после старта нашей serializable транзакции.

Теперь я не понимаю чем этот serializable отличается от RC.

softwarer
onstat-ИХМО 2. Если смотреть на стандарт, то это не full compliance
Имхо, конечно, может быть любым, но в данном случае существует общепринятое мнение, выработанное по сути авторами стандарта, и спорить относительно формы вряд ли осмысленно.

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

Полностью поддерживаю.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34032084
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat-ИХМО itself относится к транзакции в целом, которая работает в serializable mode.
Oracle обеспечивает serializable mode как расширение области видимости
конкретного консистентного запроса ко всей транзакции в целом.
Не знаю что они хотели этим сказать.

То, что в транзакции может содержаться более одного запроса. Соответственно, в serializable oracle обеспечивает согласованное чтение не только отдельно взятого statement, но всей транзакции целиком. onstat-
Thus, a serializable transaction sees a fixed snapshot of the database, established at the beginning of the transaction.
То есть берем данные на начало транзакции, предикаты не блокируем
(потому, что снапшот), вносим изменения в базу данных на основании данных из снапшота, не учитывая закомиченых транзакций из других сессий после старта нашей serializable транзакции.
Теперь я не понимаю чем этот serializable отличается от RC.
:) Как чувствовал - не надо было этот пример сюда постить, теперь начались грязные инсинуации :)
Господа, отсутствие ограничений целостности и операция insert в приведенной иллюстрации - далеко не случайность , без должной подготовки обобщать не следует .
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34032201
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat-Oracle обеспечивает serializable mode как расширение области видимости конкретного консистентного запроса ко всей транзакции в целом.
Хм. Как Вам сказать.... если бы такой перевод выдал Промпт, я бы не удивился. Но от человека слышать это несколько странно. Правильно так [в сторону - да, я знаю, что можно перевести лучше, чем сделаю я]:

Oracle обеспечивает serializable mode, поднимая требование согласованности чтения с уровня отдельного запроса на уровень транзакции в целом. Все чтения в сериализованной транзакции являются повторяемыми; транзакция использует предыдущие версии тех данных, которые изменены или удалены транзакциями, стартовавшими после начала сериализуемой. Таким образом, сериализуемая транзакция видит моментальный снимок данных на момент начала транзакции.

onstat-Теперь я не понимаю чем этот serializable отличается от RC.
Хм. От RC он отличается тем, что он не RC. Если Вы имели в виду "отличается от RR" - этого корпорация Фуджитсу (или кто там автор этой цитаты) здесь не написали. Отличие в поведении при модификации данных.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34032213
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous onstat-ИХМО itself относится к транзакции в целом, которая работает в serializable mode.
Oracle обеспечивает serializable mode как расширение области видимости
конкретного консистентного запроса ко всей транзакции в целом.
Не знаю что они хотели этим сказать.

То, что в транзакции может содержаться более одного запроса. Соответственно, в serializable oracle обеспечивает согласованное чтение не только отдельно взятого statement, но всей транзакции целиком.


Понял, спасибо, Я под запросом понимал не только чтение.


andrey_anonymous
onstat-
Thus, a serializable transaction sees a fixed snapshot of the database, established at the beginning of the transaction.
То есть берем данные на начало транзакции, предикаты не блокируем
(потому, что снапшот), вносим изменения в базу данных на основании данных из снапшота, не учитывая закомиченых транзакций из других сессий после старта нашей serializable транзакции.
Теперь я не понимаю чем этот serializable отличается от RC.
:) Как чувствовал - не надо было этот пример сюда постить, теперь начались грязные инсинуации :)
Господа, отсутствие ограничений целостности и операция insert в приведенной иллюстрации - далеко не случайность , без должной подготовки обобщать не следует .


Никакого злого умысла я не предполагал.
Прошу прощения.

С уважением, onstat-
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34032404
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat-Понял, спасибо, Я под запросом понимал не только чтение.
В данном случае такое понимание вполне корректно. Операторы MERGE, UPDATE и DELETE также читают данные, и к ним применимо понятие read consistency.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34033182
Фотография Anton Demidov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerВ данном случае такое понимание вполне корректно. Операторы MERGE, UPDATE и DELETE также читают данные, и к ним применимо понятие read consistency.
Не совсем верно - они читают только current mode - т.е. текущее значение, которое и можно изменить. Consistent read - это snapshot на какой-то момент времени - его не меняют - это состояние в прошлом.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34033193
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anton Demidov softwarerВ данном случае такое понимание вполне корректно. Операторы MERGE, UPDATE и DELETE также читают данные, и к ним применимо понятие read consistency.Не совсем верно - они читают только current mode
Это утверждение не совсем верно.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34036812
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anton Demidov softwarerВ данном случае такое понимание вполне корректно. Операторы MERGE, UPDATE и DELETE также читают данные, и к ним применимо понятие read consistency.
Не совсем верно - они читают только current mode - т.е. текущее значение, которое и можно изменить. Consistent read - это snapshot на какой-то момент времени - его не меняют - это состояние в прошлом.

ИХМО.
Для update данные берутся из снапшота,
при попытке изменения проверятется слот транзакции, если в слоте содержится SCN транзакции которая закомичена после начала
текущей то сессия вылетает по исключению ORA-08177.

А если конкурирующая транзакция не закомичена, то и подавно,
правда может быть исключение ORA-00054.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34037388
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat-при попытке изменения проверятется слот транзакции, если в слоте содержится SCN транзакции которая закомичена после начала
текущей то сессия вылетает по исключению ORA-08177.
Только в serializable.
В RC может либо рестартовать statement, либо взять "как есть" в зависимости от характера изменений, проведенных транзакцией-конкурентом. onstat-
А если конкурирующая транзакция не закомичена, то и подавно,
правда может быть исключение ORA-00054.
Нет. update в принципе не способен генерировать ora-54, поэтому просто будет ждать освобождения блокировки.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34037585
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous onstat-при попытке изменения проверятется слот транзакции, если в слоте содержится SCN транзакции которая закомичена после начала
текущей то сессия вылетает по исключению ORA-08177.
Только в serializable.
В RC может либо рестартовать statement, либо взять "как есть" в зависимости от характера изменений, проведенных транзакцией-конкурентом. onstat-
А если конкурирующая транзакция не закомичена, то и подавно,
правда может быть исключение ORA-00054.
Нет. update в принципе не способен генерировать ora-54, поэтому просто будет ждать освобождения блокировки.


Давайте пока остановимся только на serializable. Что бы не путаться
что за чем и когда происходит.

Если он будет ждать освобождения, а потом выполнит изменение,
то будет нарушена целостность данных с точки зрения serailizable.
Чтение консистентно на момент времени в прошлом,
а изменение не учитывает закомиченные транзакции
после старта serailizable транзакции.
Я об этом уже писал.

ИХМО
В serializable он ждать не имеет права.
Либо должен брать информацию не из снапшота.

Как сервер ведет себя в действительности я не знаю.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34037603
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat-Как сервер ведет себя в действительности я не знаю.
Ждет завершения конкурирующей транзакции.
Блокирует строку.
Анализирует характер изменений.
Если изменения несовместимы - откат statement.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34037776
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous onstat-Как сервер ведет себя в действительности я не знаю.
Ждет завершения конкурирующей транзакции.
Блокирует строку.
Анализирует характер изменений.
Если изменения несовместимы - откат statement.

Где об этом можно почитать?
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34037795
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat-Где об этом можно почитать?
oracle concepts, раздел data concurrency and consistency не подходит?
Пишущие транзакции в оракеле успешно друг друга блокируют, с логической точки зрения тут нет никаких "версионных" особенностей.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #34038920
Зл0й
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer pavelvpА у Oracle нет блокировки предикатов?
Нет. Наличие блокировки предикатов в точности и означает наличие "честного" serializable. Я не интересовался состоянием дел в последние годы, а по старым воспоминаниям, никто пока не придумал способа реализовать ее с приемлимой эффективностью.

И не придумают, т.к. это невозможно в принципе. С вопросом "почему" отсылаю к курсам "теория сложности" и "математическая логика". Ключевые слова - "NP полная задача" и "исчисление предикатов 1го порядка". Грубо говоря, эта задача решается только полным перебором :)

Вот поэтому "блокировки предикатов" в чистом виде нет ни в одном из серверов СУБД. Если интересно "как же это реализовано на практике" - почитайте Джима Грея, ключевое слово "intent locking". Рассказано там без подробностей (они - "секрет фирмы") но общую идею понять можно. В общем блокируются НЕ ПРЕДИКАТЫ а таблицы - страницы - группы записей. Имеется целая теория на тему как же это должно делаться "чтоб фантомов не было". Тот факт что если блокировать "по уму" то фантомов не будет доказывается математически.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Версионники и блокировочники
    #35235948
V&B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
V&B
Гость
Garya
Тема весьма неоднозначная. По моему убеждению "чистых" версионников сейчас практически не существует (не уверен, поскольку не со всеми СУБД знаком достаточно близко). В той или иной степени любай СУБД является гибридом версионника и блокировочника. На тех СУБД, которые принято считать версионниками, указанная в примере проблема разрешается с помощью блокировок , выполняемых принудительно или "на автомате". Или с помощью микрооткатов, выполняемых при обнаружении факта модификации ранее считанных данных и повторного выполнения транзакции (это может отрицательно сказаться на быстродействии, поскольку происходит лишняя загрузка сервера напрасно выполняемыми операциями). Многие "версионники" (точнее, полагаемые таковыми) могут попадать в дедлок, который возможен только по причине блокировок. То есть, "версионники" сближаются с "блокировочниками". "Блокировочники" в свою очередь делают шаги навстречу версионникам. В частности, в MS SQL Server 2005 реализована возможность выполнения транзакций аналогично версионнику. То есть, грани постепенно стираются. Это, собственно, моя точка зрения.

Опоненты считают (если я их правильно понял), что любой "версионник" в любом случае лучше блокировочника, и описанную мною в примере проблему может обойти методами именно "версионника", не превращаясь при этом в "немножко блокировочник". Прошу высказать свои мнения по этому вопросу.А где почитать FAQ или wiki, в чем вообще принципиальная разница между версионниками и блокировочниками? Access, Oracle, Firebird, Foxpro кто из них версионник, а кто блокировочник?
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #35235968
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
V&B
А где почитать FAQ или wiki, в чем вообще принципиальная разница между
версионниками и блокировочниками?

Википедии не хватит?
V&BAccess, Oracle, Firebird, Foxpro кто из них версионник, а
кто блокировочник?

Два из четырех вообще не являются клиент-серверными СУБД - вопрос не
имеет смысла.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #35236079
V&B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
V&B
Гость
Dimitry Sibiryakov
V&B
А где почитать FAQ или wiki, в чем вообще принципиальная разница между
версионниками и блокировочниками?

Википедии не хватит?
http://ru.wikipedia.org/wiki/%D0%92%D0%B5%D1%80%D1%81%D0%B8%D0%BE%D0%BD%D0%BD%D0%B8%D0%BA Пустая страница. Где читать?
V&BAccess, Oracle, Firebird, Foxpro кто из них версионник, а
кто блокировочник?

Два из четырех вообще не являются клиент-серверными СУБД - вопрос не
имеет смысла.Access между прочим клиент-серверный, читайте www.microsoft.com, если сомневаетесь. Не знаю насчет Foxpro.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #35236137
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
V&BAccess между прочим клиент-серверный, читайте www.microsoft.com, если сомневаетесь.

Спасибо, поржал... Как средство разработки клиента к клиент\серверной СУБД access может быть использован. Но как СУБД он является файл\серверной (как и фокс), а не клиент серверной.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #35441383
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У нас в компании существует в основном 2 СУБД. Это оракл и сайбейс асе! так как я больше занимаюсь асе всетаки предерживаюсь лагеря с "блокировкой"! Полемики по поводу что лучше а что хуже видуться уже давно! И сколько копий было поломанно,УЖАС! По этому вопрос: Что же все таки может "версионник" чего не может "блокеровочник" или на оборот? Что должно такое произойти, чтоб можно было одназначно и без сомнений сказать: "Да, токое может тока блокировочник или версионник!"? Я заранее извенюсь за то что не до конца прочитал весь этот форум(вернее это ветку)!!! Может на какойто странице уже и был ответ на это вопрос! Мое мнение, что оба типа притендуют на жизнь, но каждый выбирает что он лучше знает и что лучше умеет! Заранее спасибо!!!
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #35441422
Фотография Apex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cherrex_DenУ нас в компании существует в основном 2 СУБД...
Ты школу закончил?
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #35441425
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cherrex_DenПо этому вопрос: Что же все таки может "версионник" чего не может "блокеровочник" или на оборот?
Версионник может сочетать конкурентный доступ и согласованное чтение, блокировочнику это не дано. Обратно в столь же общей формулировке не выскажусь.. у Oracle, например, есть пара проблем с "неистинным serializable", но это следствие как раз того, что он "недоверсионник".
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #35441812
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
V&BAccess, Oracle, Firebird, Foxpro кто из них версионник, а
кто блокировочник?


Oracle, Firebird, - версионники.
Access, Foxpro - блокировочники, но они оба не поддерживают ACID -транзакции
(т.е. как бы "ниже рангом" и несравнимы с двумя первыми).

Два из четырех вообще не являются клиент-серверными СУБД - вопрос не
имеет смысла.

Как это не имеет смысла ? Как протокол взаимодействия клиента и сервера
связан со способом изоляции транзакций ? (ответ - никак).

Вполне себе есть достаточно много не клиен-сервер СУБД, с полной поддержкой ACID.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #35443439
Naju
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Со строны клиента - клиентское приложение говорит серверу, какой ему нужен уровень изоляции транзакций для своих запросов.

Уровни изоляции:

Read Commited - текущая запись и все записи которые обновлены внутри транзакции не меняются для этой транзакции.

Repetable Read - все записи, которые внутри транзакции прочитаны и/или изменены - не меняются для этой транзакции.
Если внутри транзакции есть два select'a с одинаковым условием, то во втором может быть больше записей (которые появляются из-за параллельных транзакций, так называемые фантомы)

Что бы избежать фантомов, есть еще один уровень.

Serializable - если есть select, insert, update, delete -- с условием, то все записи попадающие под это условие не изменяются для транзакции.

Самый простой пример, нам нужно вычислить минимум и сумму по столбцу.
select MAX(v) from mytable;
select SUM(v) from mytable;

Serializable - гарантирует, что оба оператора, отработают по одному и тому же набору данных, внутри транзакции.

Транзакции конкурируют, чтобы обеспечить Consistency (непротиворечивость или целосность),
"блокировочники" применяют блокировки: Read Lock, Write Lock
При Read Lock другая транзакция ждет, если ей нужен Write Lock,
при Write Lock другая транзакция ждет если ей нужен Read Lock или Write Lock.

Поскольку возникает ситуация, что мы можем ждать чтения, то появились
"версионники" :)
При MVCC (Multiversion concurrency control) - создаються версии и c каждой версией пишется
write timestamp и read timestamp. Тратятся ресурсы но больше нет ожидания при чтении,
а роль флажков блокировки играют write timestamp и read timestamp.


Еще пример, когда нужен Serializable:

Пусть есть две таблицы:
create table T1 ( id int, itog decimal(10,2) );
create table T2 ( id int, decimal(10,2), rashod decimal(10,2) );

T1 - содержит итоги для каждого id, а T2 - движение - приход и расход.

При уровне изоляции Serializable, транзакция c такими операторами:
...
select sum(prihod - rashod) into @itog from T2 where id=10;
update T1 set itog=@itog where id=10;
...
Гарантирует, что в T1 попадет то что надо, и никто не добавит лишних записей в T2 c id=10.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #35443454
Naju
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пример: В базе данных в разных таблицах находятся значения A и B, которые исходя из их согласованности никогда не должны быть равны (что проверяется триггером). В исходном состоянии A=1; B=2.
На версионнике одновременно запускаются две транзакции. Одна пытается присвоить A:=5, другая пытается присвоить B:=5. В каждой из этих транзакций считываются значения A и B ДО их запуска. Срабатывает триггер в транзакции №1 и проверяет (А=5) != (B=2) - значит изменение A разрешено. Срабатывает триггер в транзакции №2 и проверяет (A=1) != (B=5) - значит изменение B тоже разрешено. Обе транзакции сохраняют новые значения A и B и закомичивают свои транзакции, новые версии A=5 и B=5 сохраняются в базе данных, нарушив согласованность данных. Такая ситуация не может произойти на блокировочнике.

Откуда не согласованность ? И что значит "считываются значения A и B ДО их запуска." ?
В тригер параметры не передаються, так что при
update t1 set A=5,
в тригере t1 будет
select B from t2;
и наоборот.

При Repeatable Read,
на "блокировочнике", первая транзакция, которая пишет А=5 повесит Read Lock при чтении в тригере значения B. Поэтому вторая транзакция не сможет B записать.

Тоже самое на "версионнике", время чтения B в первом тригере меньше, чем время записи во втором, поэтому во втором запись B не пройдет. Роль read/write timestampov -- часто играет счетчик транзакций, потому что компы быстрые и у счетчика разрешение какое надо, но смысл тот же.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #35443495
Naju
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пример: В базе данных в разных таблицах находятся значения A и B, которые исходя из их согласованности никогда не должны быть равны (что проверяется триггером). В исходном состоянии A=1; B=2.
На версионнике одновременно запускаются две транзакции. Одна пытается присвоить A:=5, другая пытается присвоить B:=5. В каждой из этих транзакций считываются значения A и B ДО их запуска. Срабатывает триггер в транзакции №1 и проверяет (А=5) != (B=2) - значит изменение A разрешено. Срабатывает триггер в транзакции №2 и проверяет (A=1) != (B=5) - значит изменение B тоже разрешено. Обе транзакции сохраняют новые значения A и B и закомичивают свои транзакции, новые версии A=5 и B=5 сохраняются в базе данных, нарушив согласованность данных. Такая ситуация не может произойти на блокировочнике.

Итак:

1я транзакция update t1 set A=5;
2я транзакция update t2 set B=5;

Обе дергают по тригеру, в котором 1й читает B, а второй А. Потом обе комитятся.

Хронология такая:
W1(a) W2(b) R1(b) R2(a) C1 C2
где W - write timestamp, R - read timestamp, C - commit.

Согласно http://en.wikipedia.org/wiki/Timestamp-based_concurrency_control
1-я транзакция хочет commit, имея R1(b) при том что был W2(b) без commita (чтение B, при том что была запись B в другой транзакции без commit).
Поэтому 1я транзакция сбрасывается, а 2я выполняется или возможно тоже сбрасывается.
Так что "версионник" справляется нормально, согласованность не ломается.

На блокировщике при Repeatable Read получаем dead lock и сброс второй транзакции после:
W1a W2b R1b R2a

R1b - нельзя поставить Read Lock на B, после W2b (Write locka на B), 1я транзакция ждет 2ю.
R2a - тоже нельзя поставить Read Lock на A, после W1a (Write locka на А), 2я начинает ждать 1ю
короче dead lock.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #35443586
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
этого места.
цитата Пример : В базе данных в разных таблицах находятся значения A и B, которые исходя из их согласованности никогда не должны быть равны (что проверяется триггером). В исходном состоянии A=1; B=2.
На версионнике одновременно запускаются две транзакции. Одна пытается присвоить A:=5, другая пытается присвоить B:=5. В каждой из этих транзакций считываются значения A и B ДО их запуска. Срабатывает триггер в транзакции №1 и проверяет (А=5) != (B=2) - значит изменение A разрешено. Срабатывает триггер в транзакции №2 и проверяет (A=1) != (B=5) - значит изменение B тоже разрешено. Обе транзакции сохраняют новые значения A и B и закомичивают свои транзакции, новые версии A=5 и B=5 сохраняются в базе данных, нарушив согласованность данных. Такая ситуация не может произойти на блокировочнике.

Кто это такие бредовые примеры приводит ? На любой СУБД (версионник или блокировочник)
обеспечивается т.н. изоляция -0 (repeatable write) или согласованная запись. Грубо говоря, записываемые (изменяемые) записи транзакции блокируются эксклюзивно. Это должно приводить в вышеприведённой ситуации к откату одной из транзакций по таймауту, т.е. к дедлоку. Либо на чтении записи для последующего изменнения одна из транзакций зависнет и будет ждать окончания опонирущей. Эффект, описываемый в примере, вообще невозможен на ACID - серверах.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #35443589
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чего-то я не то процитировал, но не важно. Бредовость примера от этого не изменяется.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #35444018
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Naju
Repetable Read - все записи, которые внутри транзакции прочитаны и/или
изменены - не меняются для этой транзакции.
Если внутри транзакции есть два select'a с одинаковым условием, то во
втором может быть больше записей (которые появляются из-за параллельных
транзакций, так называемые фантомы)

Какой же это RR? Это как раз RC - раз второй select сумел
прочитать записи, закоммиченные другой транзакцией!
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #35444243
Naju
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivЧего-то я не то процитировал, но не важно. Бредовость примера от этого не изменяется.

Вполне реально что значение поля А в одной таблице, может определят допустимость значения поля Б в другой таблице. Так что пример, как пример. Бред в том что утверждаеться что Multi Version Consistency Control, не обеспечивает Consistency Control.

ACID (Atomicity, Consistency, Isolation, Durability).
Топику два года, и в обсуждении Consistency + Isolation -- свели к Isolation.
При том что эти понятия больше логические, а движок БД использует либо блокировки, либо MVCC или еще другие механизмы, чтобы транзакции были ACID.

при MVCC - нет блокировок и нет дедлоков, транзакции которые только читают не тормозятся никогда.
Транзакциями которые пишут, управляет "шедулер", который их не блокирует а пытается по возможности отложить их выполнение в случае конфликтов перестраивая очередь. Как транзакции конкурируют в очереди это и есть ноухау каждой MVCC базы.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #35445050
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NajuТранзакциями которые пишут, управляет "шедулер", который их не блокирует а пытается по возможности отложить их выполнение в случае конфликтов перестраивая очередь . Как транзакции конкурируют в очереди это и есть ноухау каждой MVCC базы.Можно пример из жизни ?
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #35445169
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovКакой же это RR? Это как раз RC - раз второй select
Дим, ты же у нас ибейсовец? Вот как раз потому и удивляешься. "Блокировочный" RR - это почти то же самое, что "версионный" RC. Уровни изоляции, как и прочие составляющие ANSI стандарта, есть следствие кучи дурных компромиссов в стиле "главное, чтобы вписать существующие реализации хоть чучелом, хоть тушкой".

Различия можно показать на следующем примере. Допустим, я делаю запрос наподобие:

Код: plaintext
1.
select a.*, (select count(*) from b) cnt
from a

Допустим, оптимизатор плохо соображает (ну или мы ему помогли) и вычисляет b-подзапрос отдельно для каждой строки из a.

Так вот: например, в Oracle, если я использую read committed, cnt будет заведомо одинаковым для всех строк результата. В других версионниках, полагаю, аналогично. А вот в блокировочнике, если кто-то параллельно делает insert into b / commit / insert into b / commit / .... - даже в repeatable read получатся разные значения в разных строках. И для того, чтобы гарантировать одинаковое значение, надо делать serializable, который приведет к блокировке b на все время выполнения запроса.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #35445228
ппм
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Repeatable Read по версии IBM не даст сделать insert в параллельной транзакции, пока есть незавершённая транзакция уровня RR
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #35445240
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за информацию. А чем он тогда отличается от serializable? Что он позволит такого, чего не даст сделать последний?
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #35445243
FreemanZAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ппмRepeatable Read по версии IBM не даст сделать insert в параллельной транзакции, пока есть незавершённая транзакция уровня RR

неужели всё так плохо?
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #35445248
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerкоторый приведет к блокировке b на все время выполнения запроса.
Виноват, неправильно сказал - не на время выполнения запроса, а до конца транзакции.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #35445253
ппм
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vadiminfo - http://publib.boulder.ibm.com/infocenter/db2luw/v9r5//topic/com.ibm.db2.luw.admin.perf.doc/doc/c0007870.html

нет такого - serializable - у IBM

FreemanZAV - почему плохо? Согласно определения RR, сколько бы раз запрос не повторялся в текущей транзакции, набор записей должен возвращатся неизменным, стало быть, если insert может изменить этот набор данных, то такой insert не будет выполнен.
Если такой уровень изоляции не нужен - есть RC. И можно делать insert.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #35445257
ппм
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
oope, ответ для softwarer, а не для vadiminfo, извините.

IBM уже давно обещалась сделать доступ к last commited значению, должно быть в слудующем году imho
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #35445274
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ппмСогласно определения RR, сколько бы раз запрос не повторялся в текущей транзакции, набор записей должен возвращатся неизменным, стало быть, если insert может изменить этот набор данных, то такой insert не будет выполнен.

Гм... Это определение serializable. При RR по определению фантомы допустимы. Это по стандарту. Вы о каком определении говорите?
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #35445275
ппм
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
опять ошибся - не RC, а RS (Read Stability)
Итого IBM имеет
R epeatable R ead
R ead S tability
C ursor S tability
U ncommited R ead
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #35445277
ппм
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pkarklin - я про определение IBM.
И ссылку дал
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #35445288
FreemanZAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ппмсколько бы раз запрос не повторялся в текущей транзакции, набор записей должен возвращатся неизменным
Согласен.
ппмстало быть,если insert может изменить этот набор данных, то такой insert не будет выполнен.
Это значит, всего лишь хреновую реализацию. В fb, например, insert не особо мешает паралельной транзакции при повторе запроса возврашать неизменный набор.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #35445295
Naju
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hvlad NajuТранзакциями которые пишут, управляет "шедулер", который их не блокирует а пытается по возможности отложить их выполнение в случае конфликтов перестраивая очередь . Как транзакции конкурируют в очереди это и есть ноухау каждой MVCC базы.Можно пример из жизни ?

Вот статья
http://www.citforum.ru/database/articles/multiversion/

Поскольку эти технологии не достаточно открыты и нет четкой терминологии, тем не менее общие принципы и подход используют все БД, не все алгоритмы нам доступны, а тем более их реализации.

Поэтому примеры это те же MySQL, PostgreSQL для которых есть исходники, но что там и как конкретно я не знаю.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #35445305
ппм
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FreemanZAV - дык IBM имеет блокировочник.
И только в следующем году обещают доступ к last commited данным строки.
Что не мешает, собственно, решать задачи.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #35445311
ппм
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
у меня есть догадка, почему IBM так держится за блокировочник, но это только догадка.
Только из соображения производительности.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #35445318
FreemanZAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ппмFreemanZAV - дык IBM имеет блокировочник.
Хоть какое-то оправдание.
ппмЧто не мешает, собственно, решать задачи.
Ну это конечно
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #35445323
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FreemanZAVЭто значит, всего лишь хреновую реализацию. В fb, например, insert не особо мешает паралельной транзакции при повторе запроса возврашать неизменный набор.

Гм... Тут, кмк, стоит все-таки указывать, при каких TIL выполняется читающая транзакция.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #35445357
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ппм пишет:

> FreemanZAV - почему плохо? Согласно определения RR, сколько бы раз
> запрос не повторялся в текущей транзакции, набор записей должен
> возвращатся неизменным, стало быть, если insert может изменить этот
> набор данных, то такой insert не будет выполнен.

Нет, набор ПОЛУЧЕННЫХ первый раз записей НЕ МОЖЕТ изменяться.
А вот НОВЫЕ записи, удовлетворяющие этим же условиям, могут
появляться (феномер фантомов). Так что INSERT можно разрешать на RR.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #35445674
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
А вот НОВЫЕ записи, удовлетворяющие этим же условиям, могут
появляться (феномер фантомов).

Этот "феномен", как уже сказал softwarer - всего лишь прогиб
стандарта под мелкомягкие реалии. Оттого эти "стандартные" определения
уровней изоляции всеми критикуются и не принимаются всерьёз.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #35445693
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovЭтот "феномен", как уже сказал softwarer - всего лишь прогиб
стандарта под мелкомягкие реалии.
Ошибаешься, Дим. Этот феномен - прогиб стандарта под суровую реальность, в которой еще никто не додумался до способа организовать блокировку предикатов с устраивающей эффективностью. Стандарту приходится прогибаться и под чересчур "дубовые" блокировки, и под чересчур "оптимистичные" версии.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #35445891
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Naju hvlad NajuТранзакциями которые пишут, управляет "шедулер", который их не блокирует а пытается по возможности отложить их выполнение в случае конфликтов перестраивая очередь . Как транзакции конкурируют в очереди это и есть ноухау каждой MVCC базы.Можно пример из жизни ?

Вот статья
http://www.citforum.ru/database/articles/multiversion/Я просил - из жизни.

NajuПоскольку эти технологии не достаточно открыты и нет четкой терминологии, тем не менее общие принципы и подход используют все БД, не все алгоритмы нам доступны, а тем более их реализации.Открою большой секрет - на www.ibase.ru достаточно информации и об алгоритмах, и о терминологии. На русском.
А на http://firebird.cvs.sourceforge.net/firebird/firebird2/ можно и реализацию найти.

NajuПоэтому примеры это те же MySQL, PostgreSQL для которых есть исходники, но что там и как конкретно я не знаю.Тогда не нужно ничего утверждать.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #35445892
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pkarklin FreemanZAVЭто значит, всего лишь хреновую реализацию. В fb, например, insert не особо мешает паралельной транзакции при повторе запроса возврашать неизменный набор.

Гм... Тут, кмк, стоит все-таки указывать, при каких TIL выполняется читающая транзакция.Не мешает - при любых. Если читатель - serializable, то insert ему тоже не помешает, ибо сам будет ждать окончания читателя.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #35445962
Зл0й
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer Dimitry SibiryakovЭтот "феномен", как уже сказал softwarer - всего лишь прогиб
стандарта под мелкомягкие реалии.
Ошибаешься, Дим. Этот феномен - прогиб стандарта под суровую реальность, в которой еще никто не додумался до способа организовать блокировку предикатов с устраивающей эффективностью. Стандарту приходится прогибаться и под чересчур "дубовые" блокировки, и под чересчур "оптимистичные" версии.

А зачем городить блокировку предикатов, если можно делать блокировку индексов? Ну а если разработчик не построил индекс - тады лочить таблицу целиком (криворукому разработчику по шее, масштабируемость при кривых руках всегда будет хреновая).
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #35446026
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladГм... Тут, кмк, стоит все-таки указывать, при каких TIL выполняется читающая транзакция.Не мешает - при любых. Если читатель - serializable, то insert ему тоже не помешает, ибо сам будет ждать окончания читателя.[/quot]

Гм... "при любых" и "Если читатель - serializable" подвигает меня к выводу, что в ib RR так же подвержен феномену фантомов, и уже получается, что не "при любых ...не особо мешает паралельной транзакции при повторе запроса возврашать неизменный набор"
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #35446042
FreemanZAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pkarklinподвигает меня к выводу, что в ib RR так же подвержен феномену фантомов,
Неожиданный и неверный вывод.

pkarklin уже получается, что не "при любых ...не особо мешает паралельной транзакции при повторе запроса возврашать неизменный набор
И ни чего не получается. В fb, наоборот возникают некотрые затруднения, если нужно заблокировать инсёрт для параллельной транзакции. Забавно, что люди делают выводы о том, о чём не имеют ни малейшего представления.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #35446070
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FreemanZAV
Неожиданный и неверный вывод.

Т.е. RR в ib, как такового и нет?!И его заменяет SNAPSHOT, который, "якобы соответствует RR от ANSI SQL", за исключением того, что SNAPSHOT не обеспечивает видимость фантомов.

FreemanZAV
И ни чего не получается. В fb, наоборот возникают некотрые затруднения, если нужно заблокировать инсёрт для параллельной транзакции. Забавно, что люди делают выводы о том, о чём не имеют ни малейшего представления.

И эти "некоторые затруднения", насколько я понимаю, связана с отсутствием "честного" Serializable?!

Читаем:

Режимы транзакций сервера IBУровень изоляции SNAPSHOT.
Транзакция в момент старта получает "снимок" БД, который является неизменным до конца транзакции. Чтение данных, измененных конкурирующей транзакцией, разрешено, однако внесенные ей изменения не доступны. Попытка изменения данных, обновляемых другой транзакцией, приводит к конфликту (Deadlock, SQLCODE = -913). После завершения конкурирующих транзакций обновленные ими данные все равно изменять нельзя, поскольку полученный "снимок" уже не отражает текущего состояния БД (Deadlock. Update conflicts with concurrent update. SQLCODE = -913).

Оригинальная трактовка дедлока...
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #35446129
FreemanZAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pkarklinТ.е. RR в ib, как такового и нет?!
Там есть лучше.

pkarklinИ его заменяет SNAPSHOT, который, "якобы соответствует RR от ANSI SQ
И просто зашибись, что не соответсвует

pkarklin исключением того, что SNAPSHOT не обеспечивает видимость фантомов.
А от этого я вообще тащусь.

pkarklin И эти "некоторые затруднения"
Ну про затруднения я загнул немного,

pkarklin, насколько я понимаю, связана с отсутствием "честного" Serializable?!,
Я не пойму, нахрена нужно блокировать всё и вся, если можно нормально, по тихому, многократно читать одни и те же данные и при этом не мешать другим делать insert, например. Причём довольно странно, что некоторые это воспринимают как минус.
pkarklinОригинальная трактовка дедлока...
По моему, всё логично.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #35446156
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FreemanZAVТам есть лучше.
...
И просто зашибись, что не соответсвует
...
А от этого я вообще тащусь.

Лучше, зашибись и тащится можно когда есть и RR, и Serializable и Snapshot, как в MS SQL. ;)

FreemanZAVНу про затруднения я загнул немного,

Судя по всему, Вы не так далеки от истины.

FreemanZAVЯ не пойму, нахрена нужно блокировать всё и вся, если можно нормально, по тихому, многократно читать одни и те же данные и при этом не мешать другим делать insert, например. Причём довольно странно, что некоторые это воспринимают как минус.

Как "минус" воспринимается неполнота существующих уровней изоляции транзакций. А ситуации в жизни, когда возникает именно необходимость блокировать, возникают, и не так уж и редко.

FreemanZAVПо моему, всё логично.

Что-то я не вижу при одной читающей транзакции и одной с INSERT классической картины дедлока.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #35446175
FreemanZAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pkarklinЛучше, зашибись и тащится можно когда есть и RR, и Serializable и Snapshot, как в MS SQL. ;)
Особенно радует невозможность вставки записей в параллельных транзакциях.

pkarklin А ситуации в жизни, когда возникает именно необходимость блокировать, возникают, и не так уж и редко.
Да уж, заблокировать MS SQL может лего, а вот что делать, когда нет такой необходимости?
pkarklinЧто-то я не вижу при одной читающей транзакции и одной с INSERT классической картины дедлока.
Да потому что в fb читатель писателя не блокирует. Но, походу, MS SQL-щикам этого уже не понять никогда :(
pkarklinСудя по всему, Вы не так далеки от истины.
За бутылку хорошего конъяка заблокирую в fb что угодно (хорошее объявление получилось, прямо для газеты "Из рук в руки" :-))
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #35446190
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FreemanZAV
Особенно радует невозможность вставки записей в параллельных транзакциях.

Да уж, заблокировать MS SQL может лего, а вот что делать, когда нет такой необходимости?

Да потому что в fb читатель писателя не блокирует. Но, походу, MS SQL-щикам этого уже не понять никогда :(

Гы... Кто-то чуть выше безапелляционно упрекнул меня в неимении нималейшего представления о TIL в ib. Позволю себе сделать тоже самое в Ваш адрес и отправить к документации:
http://msdn.microsoft.com/en-us/library/ms189122.aspx :)

FreemanZAVЗа бутылку хорошего конъяка заблокирую в fb что угодно (хорошее объявление получилось, прямо для газеты "Из рук в руки" :-))

Я сделаю это даром. ;)
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #35446196
FreemanZAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, совсем забыл, что в MS SQL 2005 появился таки Snapshot Isolation. Только чудится мну, что работает это всё только в версионном режиме
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #35446204
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FreemanZAVТолько чудится мну, что работает это всё только в версионном режиме

Про то, что Вам чудится, можно по-подробнее?
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #35446214
FreemanZAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так я идумал, господа, так я и думал (с)
If you set the READ_COMMITTED_SNAPSHOT database option to ON, the database engine uses row versioning

Это на тему топика.


pkarklinПозволю себе сделать тоже самое в Ваш адрес и отправить к документации:
Вот только что читал http://msdn.microsoft.com/en-us/library/tcbchxcb(vs.80).aspx
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #35446223
FreemanZAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pkarklin FreemanZAVТолько чудится мну, что работает это всё только в версионном режиме

Про то, что Вам чудится, можно по-подробнее?

Да пож-а:
Once snapshot isolation is enabled, updated row versions for each transaction are maintained in tempdb.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #35446247
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FreemanZAVТак я идумал, господа, так я и думал (с)
If you set the READ_COMMITTED_SNAPSHOT database option to ON, the database engine uses row versioning

Это на тему топика.

Да пож-а:
Once snapshot isolation is enabled, updated row versions for each transaction are maintained in tempdb.

Гм... И к чему Вы привели эти цитаты?! В отличии от ib, MS SQL умеет работать и как версионник, и как блокировочник, и в смешанном режиме, когда при "включенной" версионности есть возможность наложения небходимых блокировок, т.е. возможность атомарного тютинга поведения.

Кмк, отличная возможность!
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #35446268
FreemanZAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pkarklinГм... И к чему Вы привели эти цитаты?!
А к тому, что тема топика не "MS SQL vs firebird ", а "Версионники и блокировочники ". Вот и получается, что без версионности нельзя получить snapshot с "человеческим лицом"

pkarklinКмк, отличная возможность!
Не спорю. Только вот интересно, какова цена этой возможности?
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #35446277
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FreemanZAVА к тому, что тема топика не "MS SQL vs firebird ", а "Версионники и блокировочники ". Вот и получается, что без версионности нельзя получить snapshot с "человеческим лицом"

Чистых версионников, как и чистых блокировочников в природе не бывает.


FreemanZAVНе спорю. Только вот интересно, какова цена этой возможности?

А никакая! Охи и ахи злопыхателей на счет "проблем с tempdb", оказались опровергнуты практическим опытом промышленного использования,
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #35446289
Микросекунда
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pkarklinЧистых версионников ... не бываетА что такое "чистый версионник" ?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #35446309
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer пишет:

> Ошибаешься, Дим. Этот феномен - прогиб стандарта под суровую реальность,
> в которой еще никто не додумался до способа организовать блокировку
> предикатов с устраивающей эффективностью. Стандарту приходится
> прогибаться и под чересчур "дубовые" блокировки, и под чересчур
> "оптимистичные" версии.

Что значит "прогиб" ? Это - определение. Плохое, хорошее - другое
дело, хоть какое-то - и то хорошо. Никто же не заставляет
конкретную СУБД реализовывать все уровни изоляции именно так,
как это описано в стандарте.


P.S. Вот уж никогда не думал, что буду защищать стандарт ANSI SQL.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #35446311
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зл0й пишет:

> А зачем городить блокировку предикатов, если можно делать блокировку
> индексов? Ну а если разработчик не построил индекс - тады лочить таблицу

Вообще-то key range lock - частный случай предикативных блокировок.
Более жизнеспособный, естественно.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #35446363
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это ответ всем.

Я хочу напомнить или рассказать, что означает реализация
какой-то СУБД какого-то уровня изоляции.

На каждом уровне изоляции описываются феномены (явления,
если по-русски),

которые НИКОГДА НЕ ДОЛЖНЫ проявляться на этом уровне (негативные).

которые МОГУТ проявляться на этом уровне (допустимые)

СУБД, реализующая данный уровень изоляции,

ОБЯЗАНА обеспечить невозможность появления негативных феноменов

НЕ ОБЯЗАНА обеспечивать появление допустимых феноменов.

Т.е. в принципе СУБД, реально работающая, например, в режиме
сериализации всех транзакций (уровень 3), будет соответствовать
стандарту. То, что при этом она, возможно, будет терять
в производительности, стандарт не оговаривает.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #35446480
pavelvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ппмИ только в следующем году обещают доступ к last commited данным строки.
В Informix уже сделали afaik.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #35446557
pavelvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зл0йА зачем городить блокировку предикатов, если можно делать блокировку индексов? Ну а если разработчик не построил индекс - тады лочить таблицу целиком (криворукому разработчику по шее, масштабируемость при кривых руках всегда будет хреновая).
Городить нужно за тем, что предикатная блокировка - единственый способ обеспечить сериализуемость. Ведь блокировка индексов всего лишь потуги реализации предикатной хоть в каком-то виде, за неимением других возможностей.
Не смотря на большое количество трудов, в том числе фундаментальных работ (Грей), для исследований и разработок тут все ещё поле непаханое.
Кто откроет эффективный алгоритм предикатной блокировки станет самым богатым человеком на планете IMHO :-)
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #35451001
Зл0й
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pavelvp
Городить нужно за тем, что предикатная блокировка - единственый способ обеспечить сериализуемость.

Почему единственный? Наиболее правильный с точки зрения теории - да, без вопросов. Существуют решения, с точки зрения теории мягко говоря "ущербные", но практичные на сегодняшний день.

pavelvp
Ведь блокировка индексов всего лишь потуги реализации предикатной хоть в каком-то виде, за неимением других возможностей.
Не смотря на большое количество трудов, в том числе фундаментальных работ (Грей), для исследований и разработок тут все ещё поле непаханое.

На мой взгляд блокировка индексов (а в их остутствие таблицы) - решение практичное. СУБД то нам нужна сегодня, а не когда-нибудь когда кто-то изобретет практически реализуемый с приемлемой производительностью алгоритм предикатной блокировки.
...
Рейтинг: 0 / 0
Версионники и блокировочники
    #35461760
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivКто это такие бредовые примеры приводит ?почему бредовые ? желание сделать межтабличную проверку целостности - иногда возникает :) MasterZivНа любой СУБД (версионник или блокировочник)
обеспечивается т.н. изоляция -0 (repeatable write) или согласованная запись.две транзакции пишут в _разные_ таблицы - нечего согласовывать.
MasterZivГрубо говоря, записываемые (изменяемые) записи транзакции блокируются эксклюзивно.это называется - блокировочник :) блокируется и читатель и писатель, а в версионике - блокируются, но только для писателя. другими словами - если не блокировать принудительно (тобишь не становиться блокировочником) - читатель успешно прочитает заблокированную 'for update' запись.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
begin; --- (А)
select * from a for update;
 a
---
 1
update a set a = 5;
select * from a;
 a
---
 5
    begin; --- (Б)
    select * from a;
     a
    ---
     1
данные (А) не закомичены, соответсвено для (Б) они не видны. Всё ок. Так как версионик - читатель не блокируется. Всё ок. (Б) думает что в а ещё единичка - оопс... :)
...
Рейтинг: 0 / 0
335 сообщений из 335, показаны все 14 страниц
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Версионники и блокировочники
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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