Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Нехватка памяти (Database Engine cannot obtain a LOCK)  [new]
VoimiX
Member [заблокирован]

Откуда:
Сообщений: 519
Есть простая выборка по условию из очень большой таблицы (чё-то типа SELECT a, b, c FROm tableA WHERE a > 'sdf' ...).
Затем результаты этой выборки вставляются в другую таблицу через INSERT.


ПРОБЛЕМА:
одновременно к серверу обращается несколько таких запросов (около 50) и иногда происходит ошибка:

The instance of the SQL Server Database Engine cannot obtain a LOCK resource at this time.
Rerun your statement when there are fewer active users. Ask the database administrator to check the lock and memory configuration for this instance
or to check for long-running transactions.


SQL2005
на сервере оперативки 8 Гигов,
На диске места под LOG достаточно, поставлен AutoGrowth
поставлен ключ /PAE
В настройках сервера БД поставлена галка USE Awe to allocate memory, min и max мemory 2048MB и 6144MB соответственно.
Показатели Target Server Memory и Total Server memory в SQL Server: memory manager равны примерно 6 Гигов. (Хотя memusage в Task manager показывает 200 метров??????)

print @@version

Microsoft SQL Server 2005 - 9.00.3042.00 (Intel X86)
Feb 9 2007 22:47:07
Copyright (c) 1988-2005 Microsoft Corporation
Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 2)



Я не понимаю из-за чего серверу не хватает памяти? из-за накладываемых блокировок? Вроде непохоже...
Где могут быть узкие места? Может поставить SET TRANSACTION LEVEL READ UNCOMMITED ?
26 мар 09, 12:10    [6977753]     Ответить | Цитировать Сообщить модератору
 Re: Нехватка памяти (Database Engine cannot obtain a LOCK)  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
А индексы какие-нибудь для tableA есть?
Можете привести план запроса чё-то типа SELECT a, b, c FROm tableA WHERE a > 'sdf'?
26 мар 09, 12:16    [6977800]     Ответить | Цитировать Сообщить модератору
 Re: Нехватка памяти (Database Engine cannot obtain a LOCK)  [new]
Glory
Member

Откуда:
Сообщений: 104751
Generally, if more memory is required for the lock pool than is available in the Database Engine memory pool, and more computer memory is available (the max server memory threshold has not been reached), the Database Engine allocates memory dynamically to satisfy the request for locks. However, if allocating that memory would cause paging at the operating system level (for example, if another application is running on the same computer as an instance of SQL Server and using that memory), more lock space is not allocated. The dynamic lock pool does not acquire more than 60 percent of the memory allocated to the Database Engine. After the lock pool has reached 60 percent of the memory acquired by an instance of the Database Engine, or no more memory is available on the computer, further requests for locks generate an error.

Отсюда вопрос - а сколько активных блокировок у вас в момент возникновения ошибки ?
И какое значение у locks Option ?
26 мар 09, 12:19    [6977821]     Ответить | Цитировать Сообщить модератору
 Re: Нехватка памяти (Database Engine cannot obtain a LOCK)  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3264
UPDATE 

WITH (ROWLOCK, NOWAIT, READPAST)
может быть ваш LOCK если не указан NOWAIT и время вышло за пределы установленного SET
26 мар 09, 12:33    [6977957]     Ответить | Цитировать Сообщить модератору
 Re: Нехватка памяти (Database Engine cannot obtain a LOCK)  [new]
VoimiX
Member [заблокирован]

Откуда:
Сообщений: 519
Посмотрел на блокировки во время транзакции. Куча блокировок типа KEY IX на таблицу, в которую вставляем. Думаю причина нехватки памяти в этом... хотя хз...

на tableA нет никаких индексов.


короче вот запрос:
INSERT INTO dbo.__Cache_TeleService( id_query, id_run, id_user, date_event, MSISDN, MSISDN2, IMSI, IMEI, call_direction, duration, service_description, ss_description, cell_id )

SELECT 5128, 4803, 28, v4.date_event, v4.MSISDN, v4.MSISDN2, v4.IMSI, v4.IMEI, v4.call_direction, v4.duration, v4.service_description, v4.ss_description, v4.cell_id
FROM dbo.v_Store_TeleService v4
WHERE date_event >= '20090301 00:00:00' and date_event < '20090302 00:00:00'
 and (v4.IMEI like ('352731010296510%'))

А вот план выполнения:
Картинка с другого сайта.
26 мар 09, 13:24    [6978475]     Ответить | Цитировать Сообщить модератору
 Re: Нехватка памяти (Database Engine cannot obtain a LOCK)  [new]
VoimiX
Member [заблокирован]

Откуда:
Сообщений: 519
Glory

Отсюда вопрос - а сколько активных блокировок у вас в момент возникновения ошибки ?
И какое значение у locks Option ?

1. не знаю, ошибка случается периодически и записывается в лог.
2. locks = 0
26 мар 09, 13:36    [6978611]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Нехватка памяти (Database Engine cannot obtain a LOCK)  [new]
Геннадйи
Guest
У нас та же ошибка , но все прозаичнее (Сгорела планка памяти)
26 июл 16, 12:43    [19456296]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить