Ошибка «Тайм-аут при ожидании защелки буфера типа 2» в SQL Server - PullRequest
3 голосов
/ 30 июня 2010

Истекло время ожидания ожидания защелки буфера типа 2 для страницы (1: 1535865), идентификатор базы данных 6.

Это сообщение об ошибке я получал пять раз при попыткесоздать индекс

CREATE NONCLUSTERED  INDEX YearIndx ON dbo.Papers
(   
    PublicationYear
)

Таблица бумаг составляет около 20 000 000 записей и 175 ГБ

Ответы [ 2 ]

4 голосов
/ 28 октября 2010

Если ваша проблема связана с созданием временной таблицы, а не с созданием индекса, и в вашем сообщении об ошибке указан «тип 4», то, скорее всего, это ошибка SQL Server 2008

Поскольку создание индекса на самом деле включает tempdb, если "SORT_IN_TEMPDB = ON", эти проблемы вполне могут быть связаны.

Рекомендуется применять накопительные обновления для вашей версии SQL Server.

Истекло время ожидания при ожидании защелки буфера - тип 4, бит / с 00000000FEAFB028, стр. 12: 312752, стат 0xbc00e09, идентификатор базы данных: 2, идентификатор единицы выделения: 724228131807060/351413755606409, задача 0x00000000D2220838: 0, время ожидания 2070000, флаги времени ожидания 2070000, флаги времени ожидания 20700, флаги времени ожидания 20700, флаги времени ожидания 2070000 , владеющий заданием 0x0000000D22302808. Продолжая ждать.

3 голосов
/ 30 июня 2010

У меня никогда не было такого, и поиски в великом Google не сразу поразили меня, поэтому вот что я попробую:

Убедитесь, что вы выполняете этот запрос из окна запроса SSMS. Если это так, перейдите к разделу «Запрос», «Параметры запроса», «Выполнение». Какое значение имеет время ожидания выполнения?

CREATE NONCLUSTERED  INDEX YearIndx ON dbo.Papers
(   
    PublicationYear
)
WITH 
(
SORT_IN_TEMPDB = ON
--, ONLINE=ON               --Enterprise only
, ALLOW_ROW_LOCKS =  OFF    --default is on
, ALLOW_PAGE_LOCKS =  OFF   --default is on
,  MAXDOP = 1               --all that you can allow
)
  • о, и убедитесь, что вы прочитали инструкцию создания индекса, чтобы убедиться, что выбранные мной параметры применимы к вашей ситуации. например, если база данных tempdb находится на том же наборе дисков, что и db_name (6), ситуация, вероятно, только ухудшится

  • другой вариант - создать идентичную пустую таблицу, в которой есть все нужные вам индексы. тогда вы можете аккуратно заполнить эту таблицу, выбрав из dbo.Papers. Когда вы закончите, то с одной партией, транзакция обернута, переименуйте dbo.Papers в dbo.Papers_old и dbo.Papers_new в dbo.Papers.

  • наконец, я подумал о вашем индексе. Вы абсолютно уверены, что индекс только для PublicationYear решит любую возникшую проблему? Просто поразило меня, что большинство людей, вероятно, не ищут всего, что написано за один год. Скорее всего, все работы, написанные Джоном в этом году, или все работы, написанные в прошлом месяце.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...