|
![]() |
#1 |
Участник
|
Спасибо за детальный ответ! Проблема ясна, более того SQL lock manager довольно быстро ескалайтит описанную ситуацию до полного блокинга всей таблицы.
Наши ПМы рассуждают так: 1. Блокировка всей таблицы может возникнуть только если за последний период существует большое количество не финансовых переносов. С их опыта и опыты кастомеров что используют фичу такое не случаеться у них на практике (бизнесы такие наверное). Я так понял что речь идет о интервале в 1 месяц. 2. IC рекомендуеться запускать когда система минимально используеться пользователями и тут нам важно скорость выполнения. Например, в MRP некоторые транзакции удаляються по номенклатурам. При этом подходе само выполнени естественно медленее, но блокировок значительно меньше может быть. В нашем случае - это не target сценарий, ибо IC запускаеться на огромные обьемы данних не каждый день. 3. Из пункта 1 следует что в самом плохом случаи идет речь о обновлении несколько тысяч записей. Сколько это займет на современном сервере? На моей машине (далеко до самого современного сервера) 1 мил. записей занимает вроде 2-5 минут, точно не помню. Выводы (не окончательные) 1. Проблема если и случаеться, то должа случаться крайне редко. Блокировка может мериться в секундах. Евгений, Расскажы пожалуйста немного о ваших данных на которых тестировали. Чтобы все понимали - у нас в МС ваши отзывы все утро обсуждаем :0)
__________________
Thx, Ievgenii Korovin| Dynamics Ax SCM| Microsoft Corp| http://blogs.msdn.com/DynamicsAxSCM/ ![]() Последний раз редактировалось Ievgenii; 07.06.2011 в 14:38. |
|
![]() |
#2 |
Участник
|
Цитата:
И поверьте - при кол-ве пользователе от 100 это дело 10 секунд! Поэтому, если есть возможность - нужно избегать подобных алгоритмов, ну или сразу лочить таблицу, делать что надо и отпускать - так будет действительно быстро и надежно.
__________________
Axapta 3.0 sp - хз какой, kr2 |
|
![]() |
#3 |
Участник
|
Хм. Но ведь для 2012-й проблемы блокировок нет, сделали все так как и fed предлагал.
Уж так и бы и сказали что не хотят ничего менять в 2009-й P.S. Вопрос наверно для другой ветки, но неужели MS до сих пор не может решить проблему эскалации блокировок ? Неужели нельзя сделать настоящий версионник, а-ля Оракл, Postgre, FireBird и не мучаться ? Мы сейчас живем на оракл - вообще не знаем таких слов "эскалация". Очень радует ![]() Последний раз редактировалось Logger; 07.06.2011 в 19:10. |
|
![]() |
#4 |
Moderator
|
Цитата:
1. Предотвращения конфликтов записи 2. Ситуаций, грубо говоря, продажи билетов на поезд. Когда надо обеспечить чтобы между чтением ресурса и его обновлением он был заблокирован и недоступен для обновления другими сессиями. Кроме того, сами по себе эскалация блокировок - не такое уж зло. Если у тебя таблица построчных блокировок разростается в памяти, то каждая новая операция обновления занимает все больше времени, поскольку надо все больше и больше времени искать в таблице блокировок ID текущего объекта. И во многих случаях, эскалация на самом деле повышает производительность работы с БД. Идеальным вариантом, на мой взгляд, была бы возможность отключать эскалацию каким-то хинтом в конкретном запросе, а главное - интерфейс к этому хинту из X++. |
|
![]() |
#5 |
Участник
|
Цитата:
Сообщение от fed
![]() Версионник уже давно сделали. Но блокировки все равно нужны для:
1. Предотвращения конфликтов записи 2. Ситуаций, грубо говоря, продажи билетов на поезд. Когда надо обеспечить чтобы между чтением ресурса и его обновлением он был заблокирован и недоступен для обновления другими сессиями. Цитата:
Сообщение от fed
![]() Кроме того, сами по себе эскалация блокировок - не такое уж зло. Если у тебя таблица построчных блокировок разростается в памяти, то каждая новая операция обновления занимает все больше времени, поскольку надо все больше и больше времени искать в таблице блокировок ID текущего объекта. И во многих случаях, эскалация на самом деле повышает производительность работы с БД. Идеальным вариантом, на мой взгляд, была бы возможность отключать эскалацию каким-то хинтом в конкретном запросе, а главное - интерфейс к этому хинту из X++.
Наверно есть и другие способы реализации механизма блокировок, экономно расходующие память и прочие ресурсы БД. Обсуждение куда-то в сторону уходит. ![]() Я имел в виду, что раз другим компаниям удалось создать нормальные механизмы блокировок свободные от эскалации, то майкрософт могла бы уж поднатужиться и разродиться чем-нить подобным. Последний раз редактировалось Logger; 07.06.2011 в 19:21. |
|
![]() |
#6 |
Участник
|
а OCC выключен для этих таблиц? или в данной задаче OCC не поможет?
или там принудительно включен PCC? |
|
![]() |
#7 |
Moderator
|
Цитата:
Сообщение от Logger
![]() Ключевое слово - "памяти". Денис, ты неявно предполагаешь какую то конкретную реализацию механизма блокировок (как я понимаю майкрософтовскую) и говоришь о её недостатках. Если не ошибаюсь оракл хранит инфу о блокировках на диске в самих записях, так что при большом числе блокировок памяти дополнительной не тратится. Работает достаточно шустро.
В оракле информация о блокировках храниться в заголовке блока. Подробности про это рассказаны в http://my-oracle.it-blogs.com.ua/post-239.aspx. Тоже, на самом деле, не идеальный вариант. Во первых - часть полезного пространства блока отъедается под данные о блокировках, во вторых - если ты с числом слотов под данные о блокировках не угадал при создании таблицы, то транзакции точно также блокируются в ожидании места под запись о блокировке, даже если никаких объективных конфликтов блокирования нету... Ну то есть - оба подхода имеют свои плюсы и минусы, в каких-то случаях оракловский подход лучше работает, в каких-то микрософтовский. Хочешь работу без эскалации, будь готов получить какие-то другие грабли взамен... |
|
|
За это сообщение автора поблагодарили: Logger (5). |
![]() |
#8 |
Участник
|
Цитата:
Сообщение от fed
![]() Во первых - часть полезного пространства блока отъедается под данные о блокировках, во вторых - если ты с числом слотов под данные о блокировках не угадал при создании таблицы, то транзакции точно также блокируются в ожидании места под запись о блокировке, даже если никаких объективных конфликтов блокирования нету...
Конечно, проблемы возможны. Но все же настройка более гибкая. Можно этим параметром играть. Плюс оперативка более ценная память чем диск. По опыту использования - мы на такие блокировки вроде бы не натыкались. Видимо наш админ угадал с числом слотов под блокировки. Либо значение по умолчанию там удачное стоит. |
|
![]() |
#9 |
Administrator
|
Пожалуй, оставлю здесь ссылку на свою связанную тему:
Нефинансовые перемещения не раскрываются при отмене закрытия
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
![]() |
#10 |
Banned
|
Цитата:
Цитата:
Наши ПМы рассуждают так:
1. Блокировка всей таблицы может возникнуть только если за последний период существует большое количество не финансовых переносов. С их опыта и опыты кастомеров что используют фичу такое не случаеться у них на практике (бизнесы такие наверное). Я так понял что речь идет о интервале в 1 месяц. 2. IC рекомендуеться запускать когда система минимально используеться пользователями и тут нам важно скорость выполнения. Например, в MRP некоторые транзакции удаляються по номенклатурам. При этом подходе само выполнени естественно медленее, но блокировок значительно меньше может быть. В нашем случае - это не target сценарий, ибо IC запускаеться на огромные обьемы данних не каждый день. Запустить закрытие склада тогда, когда хочется, можно не всегда. Подшефные заводы работают в режиме 24x7 или 24x5. Даже в последнем случае не всегда получается запустить закрытие на выходных, поскольку внутренный распорядок концерна предполагает закрытие месяца и подготовку отчетности в первые три рабочих дня. Если первый день месяца выпадает на понедельник - среду, то возможности ждать нет, а по опыту незакрытые приходы/расходы за месяц значительно искажают баланс. Последний раз редактировалось EVGL; 08.06.2011 в 10:45. |
|
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|