Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 [4]      все
 Re: select with (nolock) отваливается по timeout'у  [new]
o-o
Guest
Eleanor,

нет, вторая сессия зависает, т.к. ждет S с resource_subtype = BULK_OPERATION,
а первая, что инсертит, уже наложила IX с resource_subtype = BULK_OPERATION.
модель простая.
а где вы откопали LCK_M_S?
----------------
54: insert into(tablock)
56: select with (nolock)

К сообщению приложен файл. Размер - 36Kb
26 окт 15, 23:31    [18330485]     Ответить | Цитировать Сообщить модератору
 Re: select with (nolock) отваливается по timeout'у  [new]
invm
Member

Откуда: Москва
Сообщений: 9443
o-o
а где вы откопали LCK_M_S?
В sys.dm_os_waiting_tasks
26 окт 15, 23:42    [18330506]     Ответить | Цитировать Сообщить модератору
 Re: select with (nolock) отваливается по timeout'у  [new]
Eleanor
Member

Откуда:
Сообщений: 2990
o-o,

еще в sys.dm_exec_requests и sp_whoisactive. Смысл блокировок от этого не изменился
26 окт 15, 23:48    [18330520]     Ответить | Цитировать Сообщить модератору
 Re: select with (nolock) отваливается по timeout'у  [new]
o-o
Guest
Eleanor
o-o,

еще в sys.dm_exec_requests и sp_whoisactive. Смысл блокировок от этого не изменился

я не говорю, что что-то изменилось, я просто не вижу этой блокировки,
поэтому интересуюсь. и вообще, я иду спать.
а у Рэндала правда есть про это BULK OPERATION,
говорит следующее:
Randal
there is also a special BULK OPERATION lock that occurs for a heap tables
and that prevents a nolock or read uncommitted scan from reading pages
that have been allocated to the heap but have not been formatted for a minimally logged operation

у меня сходится, а откуда там Sch-M и как его засекли, ваша очередь вывешивать
27 окт 15, 00:02    [18330552]     Ответить | Цитировать Сообщить модератору
 Re: select with (nolock) отваливается по timeout'у  [new]
Balbidon
Member

Откуда: Donetsk->Emerald City
Сообщений: 345
Подтверждаю:

CREATE TABLE large_test(col1 VARCHAR(200))
CREATE CLUSTERED INDEX idx_1 ON large_test(col1)

insert into large_test with(tablock)
 select C1.name from sys.columns C1
 cross apply sys.columns C2
 cross apply sys.columns C3


в другой сессии:

SELECT TOP 1 * FROM large_test WITH (NOLOCK)


в третьей смотрим:

EXEC sp_whoisactive @get_Locks = 1


в блокировках первой сессии:

<Database name="tempdb">
  <Objects>
    <Object name="(null)">
      <Locks>
        <Lock resource_type="DATABASE.BULKOP_BACKUP_DB" request_mode="NULL" request_status="GRANT" request_count="1" />
        <Lock resource_type="DATABASE.BULKOP_BACKUP_LOG" request_mode="NULL" request_status="GRANT" request_count="1" />
        <Lock resource_type="DATABASE.ENCRYPTION_SCAN" request_mode="S" request_status="GRANT" request_count="1" />
      </Locks>
    </Object>
    <Object name="large_test" schema_name="dbo">
      <Locks>
        <Lock resource_type="ALLOCATION_UNIT.BULK_OPERATION_PAGE" index_name="idx_1" request_mode="S" request_status="GRANT" request_count="1" />
        <Lock resource_type="OBJECT" request_mode="Sch-M" request_status="GRANT" request_count="1" />
        <Lock resource_type="PAGE" page_type="*" index_name="idx_1" request_mode="X" request_status="GRANT" request_count="1" />
      </Locks>
    </Object>
    <Object name="syscolpars" schema_name="sys">
      <Locks>
        <Lock resource_type="OBJECT" request_mode="Sch-S" request_status="GRANT" request_count="1" />
      </Locks>
    </Object>
  </Objects>
</Database>


в блокировках второй:

<Database name="tempdb">
  <Objects>
    <Object name="(null)">
      <Locks>
        <Lock resource_type="DATABASE.PLANGUIDE" request_mode="S" request_status="GRANT" request_count="1" />
      </Locks>
    </Object>
    <Object name="large_test" schema_name="dbo">
      <Locks>
        <Lock resource_type="OBJECT" request_mode="Sch-S" request_status="WAIT" request_count="1" />
      </Locks>
    </Object>
  </Objects>
</Database>
27 окт 15, 00:37    [18330607]     Ответить | Цитировать Сообщить модератору
 Re: select with (nolock) отваливается по timeout'у  [new]
Eleanor
Member

Откуда:
Сообщений: 2990
o-o
у меня сходится, а откуда там Sch-M и как его засекли, ваша очередь вывешивать

У меня ровно те же самые блокировки, что у вас.
LCK_M_S, а не LCK_M_SCH_M
27 окт 15, 01:01    [18330626]     Ответить | Цитировать Сообщить модератору
 Re: select with (nolock) отваливается по timeout'у  [new]
Balbidon
Member

Откуда: Donetsk->Emerald City
Сообщений: 345
В принципе, замена большого INSERT'а на
ALTER INDEX idx_1 ON large_table REBUILD WITH (ONLINE = ON)
приводит к подобному эффекту - имеем Sch-M блокировку.

Подобный сценарий описан в следующей статье, равно как и рецепт борьбы с ним: http://blogs.msdn.com/b/saponsqlserver/archive/2014/01/17/new-functionality-in-sql-server-2014-part-3-low-priority-wait.aspx
27 окт 15, 07:12    [18330731]     Ответить | Цитировать Сообщить модератору
 Re: select with (nolock) отваливается по timeout'у  [new]
o-o
Guest
Balbidon
В принципе, замена большого INSERT'а на
ALTER INDEX idx_1 ON large_table REBUILD WITH (ONLINE = ON)
приводит к подобному эффекту - имеем Sch-M блокировку.

Подобный сценарий описан в следующей статье, равно как и рецепт борьбы с ним: http://blogs.msdn.com/b/saponsqlserver/archive/2014/01/17/new-functionality-in-sql-server-2014-part-3-low-priority-wait.aspx

Ку-ку, при чем тут онлайновый ребилд?
Во-первых, он описан в книгах, BOL, у Рэндала, наконец, цитата приведена на 2ой странице топика 18310962, картинка на 3ей,что с ним непонятного?
Там sch-m нужен на время подмены старого индекса новым.
Нужен разово, в конце перестроения.
До того момента все преспокойно читается, хоть с nolock, хоть без, а зависон там на другом можно получить, не с nolock.
А вопрос сейчас вообще *о вставке в кучу с минимальным логированием* и одновременном грязном чтении из нее же.
Там висит bulk operation ix все время вставки, он же и конфликтует с nolock-овым bulk operation s
27 окт 15, 08:57    [18330871]     Ответить | Цитировать Сообщить модератору
 Re: select with (nolock) отваливается по timeout'у  [new]
o-o
Guest
Eleanor
o-o
у меня сходится, а откуда там Sch-M и как его засекли, ваша очередь вывешивать

У меня ровно те же самые блокировки, что у вас.
LCK_M_S, а не LCK_M_SCH_M

да
LCK_M_S
Occurs when a task is waiting to acquire a Shared lock.
получается, с этим разобрались.
а мне показалось вчера ночью, что у нас результаты разные
27 окт 15, 11:55    [18331815]     Ответить | Цитировать Сообщить модератору
 Re: select with (nolock) отваливается по timeout'у  [new]
Balbidon
Member

Откуда: Donetsk->Emerald City
Сообщений: 345
o-o,

Да, понял. "Прошу пардону".
27 окт 15, 21:21    [18335036]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 [4]      все
Все форумы / Microsoft SQL Server Ответить