![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Апологетам "MS SQL Server" - что там с блокировками записей? [D6]
Курдль © (2004-04-30 13:21:00)Как с ними бороться. Я имею в виду отказ сервера в выборе записей, когда кто-то открыл транзакцию на изменение.
Курдль (2004-04-30 22:15:00) [1]
> Для такого ответа необходим скромный (и только!) опыт работы
> с Oracle и никакой с MSSQL.
Совершенно в точку! :(
А MSSQL вообще прозвучал в топике, для привлечения внимания (т.к. он младший брат Sybase - тоже, млин, "блокировщик").
Однако, мой скромный опыт работы с ораклом не принес ни одного разочарования. Ну, если не считать легкой SQL-ной недостаточности в 8-м и тяжелой - в 7-м. :)
Fay (2004-04-30 18:49:00) [2]Это будет не сегодня. День не подходящий 8)
Nikolay M. (2004-04-30 18:25:00) [3]
> Проверка временем не прошла.
Why?
> Проверю на 3-м - любопытно стало. 8)
Жду-с :)
Fay (2004-04-30 18:13:00) [4]У меня 4-ы ещё не установлен.Проверка временем не прошла.
Проверю на 3-м - любопытно стало. 8)
Nikolay M. (2004-04-30 18:11:00) [5]
> С тех пор выходили всякие servicefuck-и
Так может в них уже проблема решена? Я, признаться, без SP4 на 2000-м даже и не работал...
Fay (2004-04-30 17:57:00) [6]Когда я сам на такое нарвался, бяда проявлялась в том, что оставались открытые транзакции. С тех пор выходили всякие servicefuck-и, но я по сию пору пишу с циклом. 8)
Nikolay M. (2004-04-30 17:38:00) [7]Сейчас времени на эксперименты нет, но потом обязательно исследую этот вопрос. Хочешь сказать, что пкоа сервер освобождает ресурсы, схаванные транзакцией, он не выставит правильное значение @@trancount?
Fay (2004-04-30 17:30:00) [8]В таких ситуациях второй print может выдать нечто большее нуля.
print @@trancount
begin tran tran1
...
rollbact tran tran1
print @@trancount
Nikolay M. (2004-04-30 17:22:00) [9]
> не всегда очевидно, какой @@trancount
Можно пример, если не трудно?
Впервые слышу, что после ролбэка может быть @@trancount <> 0.
Fay (2004-04-30 17:16:00) [10]Nikolay M. © (30.04.04 16:51) [26]
>> Но в цикле - ? Смысл?
В MSSQL есть такая фигня в процедурах - не всегда очевидно, какой @@trancount. Обычное дело при явном старте транзакции в процедуре.
Nikolay M. (2004-04-30 16:51:00) [11]
> jocko © (30.04.04 14:34) [18]
> вовремя отслеживать
> и делать например, while @@trancount > 0 rollback tran
Роллбэк из внутренней транзакции октатит все внешние транзакции тоже. Просто перед коммитом или роллбэком нужно проверять значение @@trancount. Но в цикле - ? Смысл?
Fay (2004-04-30 16:46:00) [12]2Курдль © (30.04.04 14:26) [15]
Для такого ответа необходим скромный (и только!) опыт работы с Oracle и никакой с MSSQL.
Fay (2004-04-30 16:43:00) [13]2Polevi © (30.04.04 15:17) [23]
В таких ответах принято ставить смайлики.
Polevi (2004-04-30 15:17:00) [14]да макрософт вообще ацтой, виндовс масдай
даешь оркл на линуксе !
dimm22 (2004-04-30 14:59:00) [15]Сразу чувствуется, что пятница. Народ пофлеймить потянуло. Даёшь версионность всем БД !!!(Читать как Ibase, Oracle - cool; MSSQL- shit.)
Курдль (2004-04-30 14:52:00) [16]
> Если блокировки мешают работе, то это уже зависит от программиста,
> который коряво пишет программы.
Если программист пишет программы с базами на "парадоксе", которые (как неоднократно здесь упомяналось) имеют свойство рушить собственные индексы, то это я называю "коряво писать программы". Т.е. как бы ни был хорош программист - рано или поздно юзер останется без данных.
bushmen (2004-04-30 14:47:00) [17]>Только нет таких, которые мешают работать с базой :(
Если блокировки мешают работе, то это уже зависит от программиста, который коряво пишет программы.
roottim (2004-04-30 14:36:00) [18]>Если не считать, что он начинает дико жрать ресурсы.
это какие???... и при каких условиях ?
и всеже почитай тома.. со вкусом написано... и на понятном каждому уровне, думаю многие вопросы отпадут сами сабой...
jocko (2004-04-30 14:34:00) [19]>Как с ними бороться.
1. не открывать транзакции с клиента (есть такие любители)
2. сузить транзакции, т.е. не вычислять переменные внутри транзакций, не делать селектов внутри тран. (иначе на время выполнения тран. записи блокируются, и надо помнить еще про эскалации)
3. разбивать длинные транзакции (по возможности)
4. следить за тем, чтобы небыло прерываний timeout при вызове с клиента (это вообще полная ж...), или вовремя отслеживать и делать например, while @@trancount > 0 rollback tran, иначе эта гадость будет вообще висеть непонятное количество времени :-(
Ega23 (2004-04-30 14:30:00) [20]Предположим, что в момент t1 сделал INSERT а в момент t2 сделал ROLLBACK, но именно между этим, возможно даже очень малым промежутком времени, ЮЗЕР2 и сделал своё черное дело - получил ID записи из ТАБЛИЦЫ1 для своего зловещего внешнего ключа.
Может я конечно чего-то недопонимаю, но разве в один момент времени могут обрабатываться сервером 2 разные транзакции?