Назад | Перейти на главную страницу

SQL Server 2008 R2 GHOST CLEANUP зависшие процессы

2008 R2 (SP1) - 10.50.2500.0 (X64)

Здравствуй,

У меня периодически возникает следующая проблема на моей машине разработки. Я использую T-SQL в цикле FOR. Во время каждой итерации цикла сначала мы удаляем все строки в таблице, а затем добавляем в нее несколько строк (мы говорим о тысячах строк, так что ничего особенного). Затем мы несколько раз запрашиваем строки в этой таблице и сохраняем результаты в табличной переменной.

Иногда (довольно часто) процесс кажется полностью зависшим. Я не могу убить sp_id. DBCC OPENTRAN указывает, что мы застряли на INSERT. После долгих исследований я теперь вижу в sys.sysprocesses следующее:

К базе данных, над которой я работаю, подключены два разных spid-сервера.

Одним из них является мой оператор T-SQL, ожидающий «WRITELOG», статус «приостановлен», а cmd - «INSERT». Другой ожидает «WRITELOG», статус - «background», а cmd - «GHOST CLEANUP».

Когда я запрашиваю sys.sysprocesses, значение Wattime меняется, поэтому я не уверен, действительно ли что-то записывается на диск или нет.

Я не администратор баз данных, но, похоже, это довольно сложная тема, и я уже несколько дней расстраиваюсь. Интересно отметить, что в настоящее время я вижу это только на своей машине разработки, поэтому мне интересно, связано ли это с моим оборудованием и тем фактом, что мы так быстро вставляем / удаляем ...

Любая помощь приветствуется ...

-ОБНОВЛЕНИЕ-- Итак, я понял, что, поскольку таблица проблем действительно предназначена только для постановки, я могу использовать некоторые переменные TVF и таблицы. Это, кажется, остановило возникновение проблемы и имеет хороший побочный эффект повышения производительности. Я все еще заинтригован тем, в чем проблема, и задаюсь вопросом, может ли она снова возникнуть, если SQL Server начнет использовать tempdb (как я уже сказал, я не администратор баз данных, но http://msdn.microsoft.com/en-us/library/ms190768.aspx похоже, указывает, что tempdb может использоваться для табличных переменных)

Потерпев еще пару дней, обновив свой BIOS, а также прошивку для жесткого диска (это твердотельный накопитель Crucial M4 - у меня было несколько проблем с ним с момента покупки, поэтому, возможно, это не совсем то), я все еще был наблюдая странные типы ожидания, связанные с дисковым вводом-выводом, «вешающие» сервер, даже при простом удалении нескольких тысяч строк.

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

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

Так что проблема, скорее всего, связана с диском. Я оставлю этот вопрос здесь для справки на тот случай, если у кого-то еще возникнет такая же проблема.