Таблица Informix заблокирована - PullRequest
2 голосов
/ 24 ноября 2010

Наше веб-приложение J2EE работает с Informix 9.40.

Иногда одна таблица блокируется, и тогда любой JSP, имеющий SQL-код, обращающийся к этой таблице, выдаст ошибку. Я знаю, как использовать onstat -k, чтобы увидеть текущие блокировки, но я хочу знать, есть ли способ отследить все блокировки произошли в истории и связанных сеанс и оператор SQL, который вызвал блокировку таблицы?

Потому что я не знаю, когда следующая ошибка произойдет ...

1 Ответ

3 голосов
/ 27 ноября 2010

Во-первых, вы должны знать, что IBM Informix Dynamic Server (IDS) версии 9.40 больше не поддерживается IBM;ни версия преемника, 10.00.Вы должны планировать обновление, возможно, до 11,70, возможно, до 11,50.

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

Если бы вы работали в более поздней версии, возможно, есть некоторые варианты, которые помогут с DB-Cron и Admin API (конечно, но шансы были бы лучше), но с 9.40 варианты довольно строго ограничены.

Ближайший подход, который я могу придумать, это снимок с onstat -k -u -r 1.-k сообщает о таблице блокировок (как вы уже знаете);-u сообщает о пользователях (сеансах), а -r 1 повторяет команду каждую секунду.Вы можете добавить другие запросы данных, как считаете нужным;-g ses предоставил бы более подробный отчет о сессиях (если вы используете DBSA, обычно пользователь informix при запуске команды).Но это 1-секундная выборка ... единственная хорошая новость заключается в том, что когда блокировка установлена ​​на столе, она может некоторое время зависать (потому что вы замечаете проблему), поэтому -g ses или -uвыходной скажет вам, кто или что применяет блокировку.Но объем данных в промежуточный период будет большим.

Вам необходимо просмотреть весь SQL-код в системе, чтобы найти вещи для блокировки таблиц.Есть ли последовательность в выборе времени?Может ли это быть, например, UPDATE STATISTICS, выполняемая заданием cron?Я полагаю, что мимолетные замки приобретаются быстро;это также кое-что, что было улучшено в выпусках начиная с вашей версии IDS.

...