27.07.2005, 08:30 | #1 |
Участник
|
Как посмотреть уровень изоляции
Доброго времени суток.
офф. Вот уже второй день как я "познал" страшное слово "Аксапта" Проблема deadlock достала всех окончательно. Причем отследить отчего зависят блокировки не получается. Решил плясать от "печки"... А вот собственно и вопрос. Как и где посмотреть уровень изоляции для конкретной транзакции. |
|
27.07.2005, 09:19 | #2 |
Участник
|
deadlock:
Главное меню \ Администрирование \ Запросы \ База данных \ Блокировки пользователей базы данных методчика Решение проблем взаимных блокиров.doc Обратите внимание, что для MS SQL и Oracle количество показываемых данных чуть разное. Кстати, вы не указали ни версию Аксапты, ни СУБД информация о базе данных Главное меню \ Администрирование \ Запросы \ База данных \ Информация базы данных полезен Сервис \ Средства разработки \ Системный монитор выполняйте мониторинг длинных запросов и взаимоблокировок Сервис \ Параметры \ закладка SQL Но вообще говоря, первоначальный мониторинг удобнее выполнять средствами СУБД. См. Book Online для MS SQL. Может вам уже стоит таки почитать документацию? Говорят, когда уже ничего не помогает, начать читать документацию - верный шаг. |
|
27.07.2005, 09:22 | #3 |
Участник
|
Да, и еще обратите внимание на хинт nolock
http://axapta.mazzy.ru/lib/indexhints/ Вообще говоря, он используется редко. присутствие этого хинта в коде должно быть очень хорошо обосновано. |
|
27.07.2005, 09:34 | #4 |
Участник
|
Цитата:
Изначально опубликовано mazzy
deadlock: Главное меню \ Администрирование \ Запросы \ База данных \ Блокировки пользователей базы данных Аксапта - 3.0 + SP3 СУБД SQL 2000 Насчет транзакций я имел ввиду следующее: допустим есть код - ttsbegin; select forupdate ......... ............ ttscommit; так вот у этой транзакции какой уровень изоляции...? я понимаю, что можно сидеть и отлавливать в мониторе когда это транзакция будет запущена.... Есть ли другие способы посмотреть isolation level? |
|
27.07.2005, 09:41 | #5 |
Участник
|
другие способы посмотреть уровень изоляции ЧЕГО?
каждого запроса? монитор. Для чтения данных в формах (визуализация средствами ядра) обычно используется SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED Для чтения данных в транзакции (в коде) обычно используется SET TRANSACTION ISOLATION LEVEL READ COMMITTED, если хинта NOLOCK не было. и не "отлавливать", а фильтр поставить... В мониторе... Может все таки документацию, а? |
|
27.07.2005, 09:55 | #6 |
Участник
|
Цитата:
Изначально опубликовано mazzy
Может все таки документацию, а? НО! (извиняюсь за офф) тут ситуация такова, что очень долго - примерно в течение года код Аксапты перелопачивался... причем (чует мое сердце) не всегда корректно. (т.е. НЕ бизнес-логика предприятия перестраивалась под аксапту, а наоборот) Теперь людей, которые это делали найти сложно... И причиной для блокировок может быть что угодно, начиная от базы 15Гб заканчивая исправленным кодом.. Бывает, что 2 человека одновременно выполняют обработку заявок, DEADLOCKи сыплются каждые 2-3 минуты, а бывает 5-6 и более человек обрабатывают, и тишина... Причем днем, когда работают как операторы на заявках, так и другой персонал...(логисты, касса, бухи) максимум 1-2 лока за день.. а вот ночью - работают только операторы... работать не возможно.. |
|
27.07.2005, 10:02 | #7 |
Участник
|
Цитата:
Изначально опубликовано DarkBear
примерно в течение года код Аксапты перелопачивался... Если нет, то спросите у тех кто перелопачивает. Или они тоже не знают? просто советы по производительности очень опасно давать удаленно, не видя всей картины. одно исправим, зато другое загубим. Повышать производительность надо тщательно. Может вам хотя бы методичку найти? Совет такой - обратитесь к специалистам, если хотите быстро. Или железо http://axapta.mazzy.ru/lib/axapta_itanium/ Или подготовьтесь к долгому обучению... |
|
27.07.2005, 10:07 | #8 |
Участник
|
Цитата:
Изначально опубликовано DarkBear
начиная от базы 15Гб заканчивая исправленным кодом.. и поболее есть http://forum.mazzy.ru/index.php?showtopic=2201 о росте базы и чистках логов здесь http://axapta.mazzy.ru/lib/dbgrowthsolution/ http://forum.mazzy.ru/index.php?showtopic=2205 |
|
27.07.2005, 10:08 | #9 |
Участник
|
Цитата:
Изначально опубликовано mazzy
И кто перелопачивает, если не секрет? Вы? Если нет, то спросите у тех кто перелопачивает. Или они тоже не знают? Эти люди щас здесь не работают... я работаю вторую неделю всего... Из старых только сисадмины... |
|
27.07.2005, 10:10 | #10 |
----------------
|
Ночь
Если обострение всегда происходит ночью, то начните с определения списка задач, которые выполняются ночью и влияют на производительность SQL-сервера (бэкап, пакетчики, ипорт-экспорт и т.д.)
А точно у Вас происходят DeadLock, а не просто блокировка таблиц? |
|
27.07.2005, 10:12 | #11 |
Участник
|
Re: Ночь
Цитата:
Изначально опубликовано Wamr
А точно у Вас происходят DeadLock, а не просто блокировка таблиц? блокировки начинаются часа за 4 -5 до всяческих бэкапов .. и заканчиваются перед ними |
|
27.07.2005, 10:12 | #12 |
Участник
|
Цитата:
а перелопачивали
тогда зовите специалистов, чтобы решить проблему хотя бы fast and dirty и готовьтесь к длительному обучению. Суть задачи: вам нужно поднять производительность системы в целом, а не отдельно взятого запроса. Если со специалистами у вас не получается, поищите обсуждение производительности на форуме. Уже неоднократно обсуждалось. |
|
27.07.2005, 10:48 | #13 |
Участник
|
Можно посмотреть уровень вложенности транзакций так:
PHP код:
|
|
|
За это сообщение автора поблагодарили: Denicce (1). |
28.07.2005, 09:55 | #14 |
Участник
|
Извиняюсь за нехватку знаний: а как в коде определить, захвачена ли кем-то для апдейта найденная мной запись ? И можно ли определить, кем захвачена (userid) ?
|
|
28.07.2005, 10:06 | #15 |
Участник
|
если запись "захвачена для апдейта", то получить ее ты не сможешь.
по определению блокировки. если в запросе используется хинт nolock, то получишь все записи, но хинт nolock говорит, что тебе все равно захвачены они или не захвачены. |
|
28.07.2005, 10:19 | #16 |
Участник
|
Странно. Не может быть, чтобы такого не было... Во многих других серьезных СУБД можно сначала найти запись NoLock для чтения, потом определить, захвачена ли она кем-то на запись, и если не захвачена то захватить самому, либо (если захвачена)поставить на ожидание освобождения с автоматическим захватом после освобождения. И этот механизм используется для того, чтобы разрулить мертвые захваты: вместо мертвой блокировки и системного сообщения пользователь получает разумное сообщение и возможность подождать освобождения записи, либо отказаться от транзакции и заняться другими делами.
|
|
28.07.2005, 10:34 | #17 |
----------------
|
Ничего странного Аксапта - не СУБД
А сделаешь запрос forupdate, вот и будешь стоять ждать, когда освободиться. |
|
28.07.2005, 11:31 | #18 |
Участник
|
2axLog
Цитата:
И этот механизм используется для того, чтобы разрулить мертвые захваты: вместо мертвой блокировки и системного сообщения пользователь получает разумное сообщение и возможность подождать освобождения записи, либо отказаться от транзакции и заняться другими делами.
Он и не получит системное сообщение, если в коде стоит что-то вроде PHP код:
|
|