powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Взаимоблокировки - помогите начинающему
24 сообщений из 24, страница 1 из 1
Взаимоблокировки - помогите начинающему
    #39858089
День добрый!
Сразу скажу - это мой первый опыт решения проблем с взаимоблокировками... глаза разбегаются в разные стороны :) Прошу снисходительности!

Ситуация выглядит так:
Клиентское приложение (MS ACCESS 2010) запускает на выполнение хранимую процедуру на MS SQL Server 2008 R2

В этой процедуре делается следующее:
delete from dbo._tmp where Пользователь = suser_sname() ;
-- тут куча инструкций которые динамически формируют строку запроса в переменную @SQL
-- сама строка @SQL представляет из себя инструкцию INSERT INTO _tmp(Пользователь, Ключ) SELECT suser_sname(), Ключ FROM Данные
exec(@SQL);

Затем клиентское приложение читает представление в MS SQL.
Строка запроса представления примерно такая: select * from Данные inner join Данные.Ключ = _tmp.Ключ where Пользователь = suser_sname()

Суть всего процесса следующая:
В ACCESS надо передать данные, что бы они там динамически изменялись. Но для каждого запрашивающего пользователя существуют различные ограничения на просмотр тех или иных строк данных. Поэтому предварительно запускается хранимая процедура, которая формирует временную таблицу с ключами записей, которые доступны пользователю. Эта времменная таблица задействована в представлении, которое и читает клиент с условием Пользователь = suser_sname()

Наверняка решение кому-то сильно не понравится. Другого пока не могу придумать в связке с MS ACCESS
Понятное дело, что пользователей много. Часто возникают взаимоблокировки запросов, потому что пользователи уверенно пытаются прочитать и записать данные как во временную таблицу так и в таблицу с данными.

Сам вопрос:
Посоветуйте какие ключи и опции лучше использовать в инструкциях DELETE и INSERT данной ситуации, что бы избежать или минимизировать взаимоблокировки.
Суда по всему блокируются инструкции DELETE и INSERT когда другие пользователи читают представление, основанное на таблице _tmp

Спасибо!
...
Рейтинг: 0 / 0
Взаимоблокировки - помогите начинающему
    #39858092
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Покажите граф взаимоблокировки в виде xml или xdl.
...
Рейтинг: 0 / 0
Взаимоблокировки - помогите начинающему
    #39858094
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Взаимоблокировки -- это когда 1205 ошибка.
А судя по тому, что тут написано, вам в форум по Access разбираться с тем, как он работает с сервером.
...
Рейтинг: 0 / 0
Взаимоблокировки - помогите начинающему
    #39858103
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Взаимоблокировки - помогите начинающему
    #39858104
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно организовать приблизительно так, как это описано в статье, с помощью функций и представлений.
...
Рейтинг: 0 / 0
Взаимоблокировки - помогите начинающему
    #39858131
Небольшое пояснение: Задача омрачена тем, что нужно не просто организовать разный доступ к записям, а фактически исполняемая процедура - это процедура фильтрации/поиска - т.е. в нее передается множество параметров.


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

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

я еще так же рекомендую скачать и установить на экземпляр хранимую процедурку sp_WhoIsActive
http://whoisactive.com/downloads/who_is_active_v11_16.zip

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

Не раз спасала
...
Рейтинг: 0 / 0
Взаимоблокировки - помогите начинающему
    #39858257
Фотография PsyMisha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Взаимоблокировки - помогите начинающему
    #39858587
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколов Валерий,

и процедуру не можете изменить?
...
Рейтинг: 0 / 0
Взаимоблокировки - помогите начинающему
    #39858653
Фотография Mind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PsyMisha,

Какое отношение блокировки имеют к дедлокам?
...
Рейтинг: 0 / 0
Взаимоблокировки - помогите начинающему
    #39858687
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MindPsyMisha,

Какое отношение блокировки имеют к дедлокам?

Блокировки , в конечном итоге - причина deadlock-ов
...
Рейтинг: 0 / 0
Взаимоблокировки - помогите начинающему
    #39858688
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколов Валерий,

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

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


Можно было бы переделать все это на другой сценарий работы,
Взял, забрал данные, а потом вместо delete/insert делаешь их merge с оригинальными данными.
Может это поможет.

Но конечно надо в делали влезать чтобы что-то сказать более детально.


Сейчас можно порекомендовать только полную ручную сериализацию операции.
Блокировка до, выполнение действий, разблокировка после.

Блокировки делаются вручную update ом записи в таблице, где записи всегда есть.

Раз блокировка в аварийных случаях тоже только руками.

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

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

Это лучший вариант, но тебе он естественно не понравится
...
Рейтинг: 0 / 0
Взаимоблокировки - помогите начинающему
    #39858692
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivАксесс в жопу, делаешь нормальный клиент - сервер,


Чтобы написать клиента, сравнимого с Access, - надо очень сильно напрячься.
Ни тебе, ни тредстартеру такое не по силам.

Поэтому не надо на Access пенять, если руки кривые.
...
Рейтинг: 0 / 0
Взаимоблокировки - помогите начинающему
    #39859288
Сруль.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЧасто возникают взаимоблокировки запросов, потому что пользователи уверенно пытаются прочитать и записать данные как во временную таблицу так и в таблицу с
данными.

Было, что-то похожее. Чем похожее?
Нельзя было двум юзерам, одновременно, пулять одну и ту же
процедуру. Там не велась борьба с блокировками-этого требовала постановка задачи.
Я дал решение, которое до сих пор работает(примерно пол-года), один раз, где-то на втором месяце,
дала козла, но об этом позже.
Во первых, ваша таблица не временная, а вспомогательная. Разница ясна, правда.
Я использовал полу-временную: с двумя решётками.
Суть такая, процедура начиналась с проверки, существует ли вспомогательная таблица?
Если да, она уходила в бесконечный while(1=1) где первой командой стоял waitfor,
я тормозил выполнение на 5 мили-секунд, сейчас не помню, этот промежуток получился
эксперементально, снова проверка, если таблицы нет, комманда exit-cиловой выход
из цикла и вперёд-создание таблицы, понеслась алгоритма. Последняя комманда-удаление
вспомогательной таблицы.
С небольшим ожиданием юзеры мирятся до сих пор.
Суть козла была в том, что как-то раз вспом. таблица не стёрлась.
Может килл, может кто-то улучшил процедуру и она перестала работать.
Я с трудом вспомнил о чём речь, нашёл виновницу торжества и удалил.
С тех пор всё тикает.
...
Рейтинг: 0 / 0
Взаимоблокировки - помогите начинающему
    #39859296
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сруль.авторЧасто возникают взаимоблокировки запросов, потому что пользователи уверенно пытаются прочитать и записать данные как во временную таблицу так и в таблицу с
данными.

Было, что-то похожее. Чем похожее?
Нельзя было двум юзерам, одновременно, пулять одну и ту же
процедуру. Там не велась борьба с блокировками-этого требовала постановка задачи.
Я дал решение, которое до сих пор работает(примерно пол-года), один раз, где-то на втором месяце,
дала козла, но об этом позже.
Во первых, ваша таблица не временная, а вспомогательная. Разница ясна, правда.
Я использовал полу-временную: с двумя решётками.
Суть такая, процедура начиналась с проверки, существует ли вспомогательная таблица?
Если да, она уходила в бесконечный while(1=1) где первой командой стоял waitfor,
я тормозил выполнение на 5 мили-секунд, сейчас не помню, этот промежуток получился
эксперементально, снова проверка, если таблицы нет, комманда exit-cиловой выход
из цикла и вперёд-создание таблицы, понеслась алгоритма. Последняя комманда-удаление
вспомогательной таблицы.
С небольшим ожиданием юзеры мирятся до сих пор.
Суть козла была в том, что как-то раз вспом. таблица не стёрлась.
Может килл, может кто-то улучшил процедуру и она перестала работать.
Я с трудом вспомнил о чём речь, нашёл виновницу торжества и удалил.
С тех пор всё тикает.
очередной изобретатель sp_getapplock

авторЯ использовал полу-временную: с двумя решётками. ох
...
Рейтинг: 0 / 0
Взаимоблокировки - помогите начинающему
    #39859628
Фотография Mind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaK

авторЯ использовал полу-временную: с двумя решётками. охЧур меня. Сгинь нечистая!
...
Рейтинг: 0 / 0
Взаимоблокировки - помогите начинающему
    #39861899
Фотография defragmentator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222MasterZivАксесс в жопу, делаешь нормальный клиент - сервер,


Чтобы написать клиента, сравнимого с Access, - надо очень сильно напрячься.
Ни тебе, ни тредстартеру такое не по силам.

Поэтому не надо на Access пенять, если руки кривые.

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

PS: А в чём проблема написать клиента на Delphi или C# ?
...
Рейтинг: 0 / 0
Взаимоблокировки - помогите начинающему
    #39861962
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defragmentatoraleks222пропущено...


Чтобы написать клиента, сравнимого с Access, - надо очень сильно напрячься.
Ни тебе, ни тредстартеру такое не по силам.

Поэтому не надо на Access пенять, если руки кривые.

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

PS: А в чём проблема написать клиента на Delphi или C# ?

Не надо читать надписи на заборах.
...
Рейтинг: 0 / 0
Взаимоблокировки - помогите начинающему
    #39861972
Фотография defragmentator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222defragmentatorпропущено...


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

PS: А в чём проблема написать клиента на Delphi или C# ?

Не надо читать надписи на заборах.

Это документация MS. Если в самописном клиенте можно как угодно управлять блокировками, то в Access вывел на экран табличку - и привет, ждите все, пока я по экрану похожу.

https://support.office.com/ru-ru/article/Свойство-recordlocks-Блокировка-записей-6ca29bbb-8824-4671-8087-97fe0568019a
авторВсе записи в базовой таблице или запросе блокируются, если форма открыта в представлении формы или режиме таблицы, когда просматривается или печатается отчет либо выполняется запрос. Хотя пользователям доступна возможность чтения записей, никто из них не может редактировать, добавлять или удалять записи, пока форма не будет закрыта, печать отчета не будет завершена или выполнение запроса не закончится.
...
Рейтинг: 0 / 0
Взаимоблокировки - помогите начинающему
    #39862007
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defragmentatoraleks222пропущено...


Не надо читать надписи на заборах.

Это документация MS. Если в самописном клиенте можно как угодно управлять блокировками, то в Access вывел на экран табличку - и привет, ждите все, пока я по экрану похожу.

https://support.office.com/ru-ru/article/Свойство-recordlocks-Блокировка-записей-6ca29bbb-8824-4671-8087-97fe0568019a
авторВсе записи в базовой таблице или запросе блокируются, если форма открыта в представлении формы или режиме таблицы, когда просматривается или печатается отчет либо выполняется запрос. Хотя пользователям доступна возможность чтения записей, никто из них не может редактировать, добавлять или удалять записи, пока форма не будет закрыта, печать отчета не будет завершена или выполнение запроса не закончится.

Научись читать по-ангельски, что-ли.
И заканчивай нести бред.
...
Рейтинг: 0 / 0
Взаимоблокировки - помогите начинающему
    #39862042
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defragmentatorЭто документация MS. Если в самописном клиенте можно как угодно управлять блокировками, то в AccessВы задаёте вопросы в терминах приложений MS Office, и цитируете документацию оттуда же, на форуме, который к MS Office не имеет никакого отношения.
И ваши "блокировки", "взаимоблокировки" тут воспринимаются совсем по другому.

Конечно, ваши "взаимоблокировки" не имеют никакого отношения к "взаимоблокировкам" в MSSQL; у вас это фичи, механизмы, состояния того клиентского приложения, которым вы пользуетесь (Access), и проблемы с ним следует решать на форуме по этому клиенту.
...
Рейтинг: 0 / 0
Взаимоблокировки - помогите начинающему
    #39862052
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgdefragmentatorЭто документация MS. Если в самописном клиенте можно как угодно управлять блокировками, то в AccessВы задаёте вопросы в терминах приложений MS Office, и цитируете документацию оттуда же, на форуме, который к MS Office не имеет никакого отношения.
И ваши "блокировки", "взаимоблокировки" тут воспринимаются совсем по другому.

Конечно, ваши "взаимоблокировки" не имеют никакого отношения к "взаимоблокировкам" в MSSQL; у вас это фичи, механизмы, состояния того клиентского приложения, которым вы пользуетесь (Access), и проблемы с ним следует решать на форуме по этому клиенту.

MS Access клиент именно MS SQL.
И блокировки, которые он использует - это блокировки именно MS SQL.
Только бред "Все записи в базовой таблице или запросе блокируются" не имеет к действительности НИКАКОГО отношения.
MS Access может блокировать все записи "если так пожелает разработчик", но по-умолчанию НИЧЕГО не блокирует.
Именно это и написано в цитируемой ссылке.
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Взаимоблокировки - помогите начинающему
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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