Форум программистов, компьютерный форум, киберфорум
Наши страницы
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.53/17: Рейтинг темы: голосов - 17, средняя оценка - 4.53
Antykus
0 / 0 / 2
Регистрация: 10.05.2014
Сообщений: 230
1

Ошибка: Экземпляру компонента SQL Server Database Engine не удается получить ресурс LOCK в данный момент

21.07.2014, 12:07. Просмотров 3225. Ответов 30
Метки нет (Все метки)

Есть хранимая процедура со следующим кодом:

T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
USE [import_from_KLADR]
GO
/****** Object:  StoredProcedure [dbo].[import_level6_houses]    Script Date: 07/21/2014 12:06:40 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[import_level6_houses]
 
AS
 
BEGIN
 
-- тело
 
-- импорт ДОМОВ
Merge addrtest as dst -- в эту табличку помещаем результат
Using
(
-- выбираем данные из таблицы 
Select top (1) with ties
id,
aoguid,
houseguid,
housenum,
strucnum,
buildnum,
POSTALCODE,
UPDATEDATE
from Houses
where exists(select 1 from addrtest where addrtest.aoguid = Houses.aoguid) 
order by
 row_number() over (partition by houseguid order by UPDATEDATE desc)
)
as src 
(
id,
aoguid,
houseguid,
housenum,
strucnum,
buildnum,
POSTALCODE,
UPDATEDATE
)
 
on (dst.aoguid=src.houseguid) -- критерий совпадений
when matched -- совпадение
 then
     update set 
     name = ISNULL(src.housenum,'')+ISNULL('с'+src.STRUCNUM,'')+ISNULL('к'+src.BUILDNUM,''),
     post_code=src.postalcode,
     id_parent=(select ID from addrtest where dst.aoguid=src.aoguid) ,
     updatedate=src.updatedate    
  WHEN NOT MATCHED THEN 
  -- нет такой строки, вставляем
        INSERT 
        (
        name,
        short_name,
        atype,
        aoguid,
        id_parent,
        updatedate,
        post_code
        )
        VALUES 
        (
        ISNULL(src.housenum,'')+ISNULL('с'+src.STRUCNUM,'')+ISNULL('к'+src.BUILDNUM,''),
        '',
        9,
        src.houseguid,
        (select ID from addrtest where addrtest.aoguid=src.aoguid),
        src.updatedate,
        src.POSTALCODE
        );
        
        
end
она грузит дома в таблицу.
При первом прогоне процедура срабатывает нормально.
При повторном, то есть когда дома в таблице уже есть, выдаётся ошибка

Сообщение 1204, уровень 19, состояние 4, процедура import_level6_houses, строка 10
Экземпляру компонента SQL Server Database Engine не удается получить ресурс LOCK в данный момент времени. Запустите инструкцию повторно, когда число активных пользователей уменьшится. Попросите администратора баз данных проверить конфигурацию блокировки и памяти для данного экземпляра либо выполнить проверку давно выполняющихся транзакций.
Сообщение 1204, уровень 19, состояние 6, процедура import_level6_houses, строка 10
Экземпляру компонента SQL Server Database Engine не удается получить ресурс LOCK в данный момент времени. Запустите инструкцию повторно, когда число активных пользователей уменьшится. Попросите администратора баз данных проверить конфигурацию блокировки и памяти для данного экземпляра либо выполнить проверку давно выполняющихся транзакций.
Хэлп
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.07.2014, 12:07
Ответы с готовыми решениями:

MS SQL Server 2005. Хочу подключиться к Database Engine - нет доступных серверов
Подскажите пожалуйста, недавно установлена MS SQL Server 2005 - НЕ мной. Хочу...

Не могу установить MS SQL 2014, ошибка установки Database Engine
Привет всем! Уже несколько дней бьюсь со следующей проблемой: есть Windows...

Установка MS SQL Server Desktop Engine на Windows Server 2008
MS sql server desktop engine, при установке на windows server 2008 пишет "a...

MS SQL Server 2000 Desktop Engine
Подскажите пожайлуста что это за зверь и с чем его едят, в смысле что с ним...

Database Mail на sql server 2012
Добрый день! Настроили Database Mail на одном из серверов, но сообщения не...

30
invm
1884 / 1276 / 380
Регистрация: 02.06.2013
Сообщений: 3,221
21.07.2014, 12:31 2
http://msdn.microsoft.com/ru-ru/library/aa337440.aspx
0
Antykus
0 / 0 / 2
Регистрация: 10.05.2014
Сообщений: 230
21.07.2014, 12:55  [ТС] 3
invm, смотрел эту страничку. Завысил до 999999 максимальный размер памяти сервера. Проблема не ушла
0
invm
1884 / 1276 / 380
Регистрация: 02.06.2013
Сообщений: 3,221
21.07.2014, 13:04 4
1. Установить в max server memory можно очень большое значение. Только это не значит, что под сиквел системой будет выделяться столько памяти.
2. Покажите результат выполнения select @@version
0
Antykus
0 / 0 / 2
Регистрация: 10.05.2014
Сообщений: 230
21.07.2014, 13:13  [ТС] 5
invm,
Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 (X64) Jun 28 2012 08:36:30 Copyright (c) Microsoft Corporation Data Center Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
0
invm
1884 / 1276 / 380
Регистрация: 02.06.2013
Сообщений: 3,221
21.07.2014, 14:05 6
Покажите результат
T-SQL
1
2
select * from sys.dm_os_sys_memory;
select * from sys.dm_os_process_memory;
0
Antykus
0 / 0 / 2
Регистрация: 10.05.2014
Сообщений: 230
21.07.2014, 14:20  [ТС] 7
invm,
0
Миниатюры
Ошибка: Экземпляру компонента SQL Server Database Engine не удается получить ресурс LOCK в данный момент  
invm
1884 / 1276 / 380
Регистрация: 02.06.2013
Сообщений: 3,221
21.07.2014, 15:46 8
Сколько строк в целевой таблице? И есть ли на ней триггеры?

Выполните и покажите результат:
T-SQL
1
2
3
use import_from_KLADR;
select lock_escalation_desc from sys.tables where name = 'addrtest';
select name, allow_row_locks, allow_page_locks from sys.indexes where object_id = object_id('addrtest', 'U');
0
Antykus
0 / 0 / 2
Регистрация: 10.05.2014
Сообщений: 230
21.07.2014, 15:53  [ТС] 9
invm,
в целевой таблице 19137866 строк
триггеров нет
0
Миниатюры
Ошибка: Экземпляру компонента SQL Server Database Engine не удается получить ресурс LOCK в данный момент  
invm
1884 / 1276 / 380
Регистрация: 02.06.2013
Сообщений: 3,221
21.07.2014, 16:53 10
Помониторьте профайлером: возникает ли в соединеии, где выполняется процедура, событие Lock:Escalation
0
Antykus
0 / 0 / 2
Регистрация: 10.05.2014
Сообщений: 230
22.07.2014, 14:11  [ТС] 11
invm, не подскажите ли, как произвести эту манипуляцию?
0
invm
1884 / 1276 / 380
Регистрация: 02.06.2013
Сообщений: 3,221
22.07.2014, 14:26 12
Запустить профайлер, соединиться с сервером, выбрать шаблон "Blank", добавить в трассу событие Lock:Escalation из категории Locks, добавить фильтр по SPID и запустить трассу.
0
Antykus
0 / 0 / 2
Регистрация: 10.05.2014
Сообщений: 230
22.07.2014, 14:33  [ТС] 13
invm,
если я всё правильно сделал, то результат такой:

-- network protocol: LPC
set quoted_identifier on
set arithabort off
set numeric_roundabort off
set ansi_warnings on
set ansi_padding on
set ansi_nulls on
set concat_null_yields_null on
set cursor_close_on_commit off
set implicit_transactions off
set language русский
set dateformat dmy
set datefirst 1
set transaction isolation level read committed
0
invm
1884 / 1276 / 380
Регистрация: 02.06.2013
Сообщений: 3,221
22.07.2014, 14:42 14
Antykus, надо запустить трассу, а потом процедуру и смотреть в профайлере возникновение эскалации блокировок.
То, что вы показали, это TextData события ExistingConnections из категории Sessions. Следовательно, вы не использовали пустой шаблон при создании трассы.
0
Antykus
0 / 0 / 2
Регистрация: 10.05.2014
Сообщений: 230
22.07.2014, 16:24  [ТС] 15
invm, вроде проделал все шаги, скажите пожалуйста, куда конкретно смотреть
0
invm
1884 / 1276 / 380
Регистрация: 02.06.2013
Сообщений: 3,221
22.07.2014, 16:46 16
Antykus, ОК, зайдем с другой стороны. Что вернет скрипт:
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
begin tran;
 
select resource_type, request_mode, count(*) from sys.dm_tran_locks where request_session_id = @@spid group by resource_type, request_mode;
 
Merge top (10000) addrtest as dst -- в эту табличку помещаем результат
Using
(
-- выбираем данные из таблицы 
Select top (1) with ties
id,
aoguid,
houseguid,
housenum,
strucnum,
buildnum,
POSTALCODE,
UPDATEDATE
from Houses
where exists(select 1 from addrtest where addrtest.aoguid = Houses.aoguid) 
order by
 row_number() over (partition by houseguid order by UPDATEDATE desc)
)
as src 
(
id,
aoguid,
houseguid,
housenum,
strucnum,
buildnum,
POSTALCODE,
UPDATEDATE
)
 
on (dst.aoguid=src.houseguid) -- критерий совпадений
when matched -- совпадение
 then
     update set 
     name = ISNULL(src.housenum,'')+ISNULL('с'+src.STRUCNUM,'')+ISNULL('к'+src.BUILDNUM,''),
     post_code=src.postalcode,
     id_parent=(select ID from addrtest where dst.aoguid=src.aoguid) ,
     updatedate=src.updatedate    
  WHEN NOT MATCHED THEN 
  -- нет такой строки, вставляем
        INSERT 
        (
        name,
        short_name,
        atype,
        aoguid,
        id_parent,
        updatedate,
        post_code
        )
        VALUES 
        (
        ISNULL(src.housenum,'')+ISNULL('с'+src.STRUCNUM,'')+ISNULL('к'+src.BUILDNUM,''),
        '',
        9,
        src.houseguid,
        (select ID from addrtest where addrtest.aoguid=src.aoguid),
        src.updatedate,
        src.POSTALCODE
        );
 
select resource_type, request_mode, count(*) from sys.dm_tran_locks where request_session_id = @@spid group by resource_type, request_mode;
 
rollback;
0
Antykus
0 / 0 / 2
Регистрация: 10.05.2014
Сообщений: 230
23.07.2014, 11:47  [ТС] 17
invm,
0
Миниатюры
Ошибка: Экземпляру компонента SQL Server Database Engine не удается получить ресурс LOCK в данный момент  
invm
1884 / 1276 / 380
Регистрация: 02.06.2013
Сообщений: 3,221
23.07.2014, 11:56 18
А сейчас ошибка повторяется?
0
Antykus
0 / 0 / 2
Регистрация: 10.05.2014
Сообщений: 230
23.07.2014, 12:16  [ТС] 19
invm, да, вот такая
Сообщение 1204, уровень 19, состояние 4, процедура import_level6_houses, строка 10
Экземпляру компонента SQL Server Database Engine не удается получить ресурс LOCK в данный момент времени. Запустите инструкцию повторно, когда число активных пользователей уменьшится. Попросите администратора баз данных проверить конфигурацию блокировки и памяти для данного экземпляра либо выполнить проверку давно выполняющихся транзакций.
0
invm
1884 / 1276 / 380
Регистрация: 02.06.2013
Сообщений: 3,221
23.07.2014, 12:32 20
Процедура выполняется как часть какой-то большой транзакции?
0
23.07.2014, 12:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.07.2014, 12:32

Ошибка СУБД: Microsoft OLE Provider for SQL Server: The transaction log for database “DataBase” is full.
Иногда при работе 1С возникает ошибка следующего характера: Ошибка СУБД: ...

Помогите поднять клиента: Unable to connect to database server: unable to start database engine
Есть сервре Sybase SQL Anywhere 5.0 к нему настроен драйвер ODBC с помощью...

Ошибка: Microsoft JET Database Engine error '80040e09' Cannot update. Database or object is read-only.
Microsoft JET Database Engine error '80040e09' Cannot update. Database or...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru