2009-04-15 4 views
1

Мы работаем над большой программой Java, которая была преобразована из приложения Forte. В течение дня мы получаем блокировку SPID на сервере. Вчера у нас был визит DBA, и он настроил шаблон профиля для запуска блокировки/блокировки. Когда мы запускаем этот профиль, проблема блокировки исчезает. Зачем?Блокировка SQL Server 2000 предотвращена запуском профилировщика?

Это приложение распространяется с использованием RMI и имеет около 70 пользователей. Мы используем серверы SQL 2000 и Windows 2000 для обеспечения совместимости с кучей старых вспомогательных приложений VB.

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

Спасибо за помощь!

Тео

+0

Попробуйте обновить драйвер JDBC. : -/ – John

+0

Мы используем драйвер microsoft odbc. Должны ли мы оставаться с ним или переходить на другую открытую версию? – 2009-04-15 23:53:26

ответ

1

Хорошая старая Гейзенберга проблема отладчик.

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

Эта проблема с блокировкой SPID, похоже, многократно появляется в Google; причина заключается в том, что это происходит, когда какой-то ресурс блокируется, когда другой хочет его, поэтому вероятность возникновения ошибки по времени кажется вероятной.

Microsoft has an article о том, как справиться с проблемой.

+0

Ну, администратор базы данных, скорее всего, будет добавлять SQL-трассировку, чтобы не изменять код; но да, общее выполнение может измениться. –

0

Просто коллекция случайных мыслей. Я видел, как следы забирают сервер, но никогда не улучшат ситуацию.

Какой шаблон шаблона вы используете? (Они взяты из SQL Server 2005 инструментов, извините)

  • Параметр «Стандартный (по умолчанию)» один отслеживает высокие уровни вызовов и входа/выхода из системы
  • The «TSQL_SPs» отслеживает выписки вызовы, которые были бы намного больше intrusive

Является ли оно двоичным и гарантировано? Trace on = no blocks, trace off = blocks, или это неудачное совпадение? Когда вы все смотрите DBA, кто-то перестает щелкнуть клиентом и посмотреть?

Что-то еще выключено как часть трассы. То есть, вы используете профайлер или скрипт (много из sp_trace_set% утверждений) ?. В сценарии, написанном сценарием, может быть что-то, что переключает что-то еще.