powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / вставка уникального значения.
48 сообщений из 48, показаны все 2 страниц
вставка уникального значения.
    #39912487
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть таблица с одним единственным числовым полем (NUM), это поле первичный ключ.
для неё делаю
Код: sql
1.
2.
truncate table SPK_TEST13 /*скрипт запускается много раз , поэтому очистим*/
insert into SPK_TEST13 (NUM) values (1)



Задача такая : хочу вставить туда строчку со значением поля равного max(NUM) +1 .
Как всегда начнете пинать, да и ладно , но где я не дочитал по транзакциям ???

сначала на одном сеансе запускаю :
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
BEGIN TRAN;
DECLARE @NEW_NUM INT;
SELECT @NEW_NUM = max(NUM)+1 FROM SPK_TEST13
select @NEW_NUM
INSERT INTO SPK_TEST13(NUM) VALUES (@NEW_NUM)

WAITFOR DELAY '00:00:30';

COMMIT TRAN;
go
SELECT * FROM SPK_TEST13 



потом на 10 - ти других сеансах последовательно запускаю тоже самое , но без задержки WAITFOR DELAY '00:00:30';
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
BEGIN TRAN;
DECLARE @NEW_NUM INT;
SELECT @NEW_NUM = max(NUM)+1 FROM SPK_TEST13
select @NEW_NUM
INSERT INTO SPK_TEST13(NUM) VALUES (@NEW_NUM)

WAITFOR DELAY '00:00:30';

COMMIT TRAN;
go
SELECT * FROM SPK_TEST13 



в результате на одном из сеансов инсерт отвалился, а почему ? :-(
Сообщение 2627, уровень 14, состояние 1, строка 11
Нарушение "PK_SPK_TEST13" ограничения PRIMARY KEY. Не удается вставить повторяющийся ключ в объект "dbo.SPK_TEST13". Повторяющееся значение ключа: (3).
...
Рейтинг: 0 / 0
вставка уникального значения.
    #39912491
Фотография Shakill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81,

Код: sql
1.
SELECT @NEW_NUM = max(NUM)+1 FROM SPK_TEST13 with (tablockx, holdlock)
...
Рейтинг: 0 / 0
вставка уникального значения.
    #39912492
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для этого придумали:
  • identity
  • sequence
  • уровень транзакции serializeable или tablockx
...
Рейтинг: 0 / 0
вставка уникального значения.
    #39912493
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей Алексеевич
Для этого придумали:
  • identity
  • sequence
  • уровень транзакции serializeable или tablockx

идентити это понятно. мне для понимания.
...
Рейтинг: 0 / 0
вставка уникального значения.
    #39912499
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81
Гавриленко Сергей Алексеевич
Для этого придумали:
  • identity
  • sequence
  • уровень транзакции serializeable или tablockx

идентити это понятно. мне для понимания.


что имеется ввиду ? sequence
...
Рейтинг: 0 / 0
вставка уникального значения.
    #39912501
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81
andron81
пропущено...


идентити это понятно. мне для понимания.


что имеется ввиду ? sequence


понятно, вы переоцениваете версию MS SQL
...
Рейтинг: 0 / 0
вставка уникального значения.
    #39912503
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо , осталось понять вот это :
Shakill


with (tablockx, holdlock)

[/src]
...
Рейтинг: 0 / 0
вставка уникального значения.
    #39912510
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей Алексеевич
Для этого придумали:
  • identity
  • sequence
  • уровень транзакции serializeable или tablockx

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

А если при Readcommitted делать merge запроса (SELECT max(NUM)+1 AS NEW_NUM FROM SPK_TEST13) на целевую таблицу? Этого не будет достаточно? Или будут дедлоки или дубли?
...
Рейтинг: 0 / 0
вставка уникального значения.
    #39912511
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81
спасибо , осталось понять вот это :
Shakill

with (tablockx, holdlock)
Когда несколько транзакцией делают
Код: sql
1.
SELECT @NEW_NUM = max(NUM)+1 FROM SPK_TEST13


они получают одинаковое значение. Ведь читать можно одновременно, по умолчанию это разрешено. И это естественно, иначе бы сервер, грубо говоря, одновременно работал бы только с одним коннектом.

Хинт tablockx указывает, что нужно наложить на таблицу монопольную блокировку, и тогда первая транзакция будет держать таблицу, пока не закроет транзакцию, и остальные будут ждать.
...
Рейтинг: 0 / 0
вставка уникального значения.
    #39912522
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81,

автор где я не дочитал по транзакциям

Не дочитали раздел об уровне изоляции транзакций.
...
Рейтинг: 0 / 0
вставка уникального значения.
    #39912523
Фотография Shakill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg
Хинт tablockx указывает, что нужно наложить на таблицу монопольную блокировку, и тогда первая транзакция будет держать таблицу, пока не закроет транзакцию, и остальные будут ждать.


точно, эксклюзивные блокировки и так держатся до конца транзакции. holdlock не нужен
...
Рейтинг: 0 / 0
вставка уникального значения.
    #39912526
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a_voronin


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

А если при Readcommitted делать merge запроса (SELECT max(NUM)+1 AS NEW_NUM FROM SPK_TEST13) на целевую таблицу? Этого не


он прав идентити вполне пригоден для моей задачи. я забыл оговорить , что я его использовать не хочу. мне для понимания транзакции , поэтому я изобретаю этот велосипед. Поиском "несуществующих" id - шек в таблице с дальнейшем их инсертом задача не стоит, спасибо.
...
Рейтинг: 0 / 0
вставка уникального значения.
    #39912527
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81,

ну в смысле поиском дыр я не озабочен.
...
Рейтинг: 0 / 0
вставка уникального значения.
    #39912600
entrypoint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andron81,

создаем объекты и наполняем данными
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
CREATE TABLE dbo.[data](id INT NOT NULL);
CREATE TABLE dbo.mutex(id INT NOT NULL);
INSERT INTO dbo.mutex(
       id
         )
VALUES( 
       0
       );



Для WAITFOR TIME 'Здесь указать время' указываем ближайшее время в будущем, для того что бы два одинаковых скрипта в разных окнах запросов (сессиях) запустились одновременно

Код: 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.
WAITFOR TIME '19:09:00';

SET NOCOUNT, XACT_ABORT ON;
DECLARE @i INT = 0;

WHILE @i < 100
    BEGIN
        BEGIN TRANSACTION;
        IF EXISTS
                 (
                  SELECT TOP (1) 
                         1
                  FROM 
                       dbo.mutex WITH (UPDLOCK, ROWLOCK)
                  )
            BEGIN
                INSERT INTO dbo.[data]
                OUTPUT 
                       inserted.id
                VALUES( 
                       ISNULL(
                              (
                               SELECT 
                                      MAX(id) + 1
                               FROM 
                                    dbo.[data]
                       ), 1)
                       );
            END;
        COMMIT TRANSACTION;
        SET @i+=1;
    END;

SELECT 
       id
FROM 
     dbo.[data];



1. Создаем новый запрос, копируем туда выше приведённый скрипт с указанным временем WAITFOR TIME, запускаем
2. Создаем новый запрос, копируем туда выше приведённый скрипт с указанным временем WAITFOR TIME, запускаем
...
...
...
...
n. Ждем, когда настанет время старта, указанное Вами в WAITFOR TIME, и получаем результат

Это - потом
Код: sql
1.
2.
DROP TABLE dbo.[data]
DROP TABLE dbo.mutex
...
Рейтинг: 0 / 0
вставка уникального значения.
    #39912603
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
entrypoint,

Все это делается через sp_getapplock или tablockx.
...
Рейтинг: 0 / 0
вставка уникального значения.
    #39912622
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shakill
точно, эксклюзивные блокировки и так держатся до конца транзакции. holdlock не нужен
Наоборот. tablockx - слишком жестоко.
Чтобы всех желающих выстроить в очередь достаточно
Код: sql
1.
select top (1) NUM + 1 from SPK_TEST13 with (updlock, serializable) order by NUM desc;
...
Рейтинг: 0 / 0
вставка уникального значения.
    #39912990
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg

Хинт tablockx указывает, что нужно наложить на таблицу монопольную блокировку, и тогда первая транзакция будет держать таблицу, пока не закроет транзакцию, и остальные будут ждать.


ок. тогда такой вопрос )) всё это описано, конечно, в уровнях изоляции , но я тупой. нужен разжованный трамплин , а дальше уже буду читать сам умное чтиво.

запускаю в первом сеансе (*)
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
BEGIN TRAN;
DECLARE @NEW_NUM INT;
SELECT @NEW_NUM = max(NUM)+1 FROM SPK_TEST13 with (tablockx)
select @NEW_NUM
INSERT INTO SPK_TEST13(NUM) VALUES (@NEW_NUM)

WAITFOR DELAY '00:00:30';

COMMIT TRAN;
go
SELECT * FROM SPK_TEST13 



не дожидаясь выполнения запускаю последовательно скрипт N раз в разных сеансах (в разных запросах менеджмент студио, но под одним пользователем):
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
BEGIN TRAN;
DECLARE @NEW_NUM INT;
SELECT @NEW_NUM = max(NUM)+1 FROM SPK_TEST13 with (tablockx)
select @NEW_NUM
INSERT INTO SPK_TEST13(NUM) VALUES (@NEW_NUM)
COMMIT TRAN;
go
SELECT * FROM SPK_TEST13 



Но речь идет о монопольности. верно ли я понимаю, что раз я запускаю под одним пользователем , то возможны неприятности в виде :
"Нарушение "PK_SPK_TEST13" ограничения PRIMARY KEY. Не удается вставить повторяющийся ключ в объект "dbo.SPK_TEST13". Повторяющееся значение ключа: (3)."

Ведь в рамках одного пользователя можно читать таблицу из других транзакций. Или я неверно понимаю понятие монопольности ?
...
Рейтинг: 0 / 0
вставка уникального значения.
    #39912991
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81,

хотя вот оно определение монопольной блокировки:

монопольная (exclusive) - означает, что только одна сессия может установить эту блокировку в один момент времени.
ни о каких пользователях речи нет.
...
Рейтинг: 0 / 0
вставка уникального значения.
    #39912996
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81,

да, если один пользователь установит три сессии, то выполняться запрос будет только в одной, остальные сессии будут ожидать.
...
Рейтинг: 0 / 0
вставка уникального значения.
    #39913009
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81,

Монопольной блокировкой вы выстроите в очередь всех - и читателей, и писателей, и добавлятелей.
Если делать как было паказано в 22056821 - в очередь встанут только добавлятели, ну и некоторые писатели, если будут модифицировать/удалять строку с максимальным NUM.
...
Рейтинг: 0 / 0
вставка уникального значения.
    #39913015
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm

select top (1) NUM + 1 from SPK_TEST13 with (updlock, serializable) order by NUM desc;


invm

в очередь встанут только добавлятели, ну и некоторые писатели, если будут модифицировать/удалять строку с максимальным NUM.


а читателям карт бланш во всех транзах одновременно ?
дно мне ведь и читать нельзя тут в других транзах , если эта транза не активная на данный момент. иначе вот выполняется первая транзакция . прочитается в ней скажем max(NUM)=5 и во второй тоже max(NUM)=5 прочитается(читателям ведь можно), а потом когда придет время выполнения записи во второй транзакции , а NUM=5 уже записан. и вот вторая транзакция и отвалится.
или я неверно Вас понял ?
...
Рейтинг: 0 / 0
вставка уникального значения.
    #39913019
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81,

Код: sql
1.
2.
begin tran;
select top (1) @NUM = NUM from SPK_TEST13 with (updlock, serializable) order by NUM desc;


После выполнения этого запроса и до завершения транзакции, в других транзакциях невозможно будет прочитать, изменить, добавить или удалить те строки SPK_TEST13, где NUM >= @NUM
Это справедливо и для пустой таблицы. В этом случае можно считать, что в @NUM минус бесконечность.

Так понятнее?
...
Рейтинг: 0 / 0
вставка уникального значения.
    #39913022
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm, неа. мне показалось, что выше Вы писали иначе о том что будет происходить, если так расставить изоляцию
...
Рейтинг: 0 / 0
вставка уникального значения.
    #39913027
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81,

Не вижу разницы. "Добавлятель" - это ваш код и стартового поста.
...
Рейтинг: 0 / 0
вставка уникального значения.
    #39913028
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
вставка уникального значения.
    #39913029
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm,

Я там пытаюсь ваш код обсуждаю который вы прокоментировали 2 раза и как мне показалось эти разы протворечивы.

Если делать как было паказано в 22056821 - в очередь встанут только добавлятели, ну и некоторые писатели, если будут модифицировать/удалять строку с максимальным NUM

А в том посте 220...
Код был такой
Код: sql
1.
select top (1) @NUM = NUM from SPK_TEST13 with (updlock, serializable) 



Из этого я понял, что читателям дана полная свобода. А это плохо.


Но за тем вы пишите, что ваша строчка все же работает иначе:

После выполнения этого запроса и до завершения транзакции, в других транзакциях невозможно будет прочитать, изменить, добавить или удалить
...
Рейтинг: 0 / 0
вставка уникального значения.
    #39913031
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник


Сиквансы и идентити я выше говорил, что это не подходит. Я велосипед нагородил чтобы понять как работают транзакции
...
Рейтинг: 0 / 0
вставка уникального значения.
    #39913033
Gerros
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хм...
...
Рейтинг: 0 / 0
вставка уникального значения.
    #39913044
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81
Из этого я понял, что читателям дана полная свобода. А это плохо.
Ничего вы не поняли.
В 22057563 написано максимально подробно каким именно читателям полная свобода, а каким нет.
...
Рейтинг: 0 / 0
вставка уникального значения.
    #39913049
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81
andron81,

хотя вот оно определение монопольной блокировки:

монопольная (exclusive) - означает, что только одна сессия может установить эту блокировку в один момент времени.
ни о каких пользователях речи нет.
Конечно, о пользователях речи вообще не идёт, пользователи - юридическое понятие, используемое для определения платежей, и техническое, для разграничения прав.

А тут мы говорим о сессиях.
andron81
invm, неа. мне показалось, что выше Вы писали иначе о том что будет происходить, если так расставить изоляцию
Нет, тут путаница из за разных вариантов изоляции, разных хинтов.

Если указать tablockx, то будет заблокирована вся таблица дшля всех действий, кроме действий блокирующей сесии
А если, как написал invm, указать (updlock, serializable), то будет заблокировано только получение нового ID, а вот чтение, изменение, и даже добавление предыдущих записей будет разрешено.
...
Рейтинг: 0 / 0
вставка уникального значения.
    #39913050
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg



А если, как написал invm, указать (updlock, serializable), то будет заблокировано только получение нового ID, а вот чтение, изменение, и даже добавление предыдущих записей будет разрешено.


Да, вот это NUM >= @NUM, я профанарил.
...
Рейтинг: 0 / 0
вставка уникального значения.
    #39913091
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm
andron81,

Не вижу разницы. "Добавлятель" - это ваш код и стартового поста.


спасибо . в теории всё вроде бы понял. но стал экспериментировать и наткнулся на непонимание , что происходит.
запустил 2 скрипта последовательно - скрипт1 и скрипт2. Скрипт1 с задержкой, Скрипт2 без. Оба пока без инсертов , первый как полагается отработал через 30 секунд. а второй крутится и крутится и крутится. скрипты прилагаю.

Скрипт1
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
BEGIN TRAN;
DECLARE @NEW_NUM INT;
select top (1) @NEW_NUM = NUM from SPK_TEST13 with (updlock, serializable) order by NUM desc;
select @NEW_NUM
--INSERT INTO SPK_TEST13(NUM) VALUES (@NEW_NUM)

WAITFOR DELAY '00:00:30';

COMMIT TRAN;
go
SELECT * FROM SPK_TEST13 




Скрипт2
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
BEGIN TRAN;
DECLARE @NEW_NUM INT;
select top (1) @NEW_NUM = NUM from SPK_TEST13 with (updlock, serializable) order by NUM desc;
select @NEW_NUM
--INSERT INTO SPK_TEST13(NUM) VALUES (@NEW_NUM)
--WAITFOR DELAY '00:00:30';

COMMIT TRAN;
go
SELECT * FROM SPK_TEST13 
...
Рейтинг: 0 / 0
вставка уникального значения.
    #39913093
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81
запустил 2 скрипта последовательно - скрипт1 и скрипт2. Скрипт1 с задержкой, Скрипт2 без. Оба пока без инсертов , первый как полагается отработал через 30 секунд. а второй крутится и крутится и крутится. скрипты прилагаю.
А у меня второй ждал, пока первый отработает, а потом сразу завершился. Как и должно быть.

Лучше и скрипт создания таблицы тоже приложите, включая все её объекты (индексы, констрейны и т.д.)
...
Рейтинг: 0 / 0
вставка уникального значения.
    #39913095
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg
andron81
запустил 2 скрипта последовательно - скрипт1 и скрипт2. Скрипт1 с задержкой, Скрипт2 без. Оба пока без инсертов , первый как полагается отработал через 30 секунд. а второй крутится и крутится и крутится. скрипты прилагаю.
А у меня второй ждал, пока первый отработает, а потом сразу завершился. Как и должно быть.

Лучше и скрипт создания таблицы тоже приложите, включая все её объекты (индексы, констрейны и т.д.)


спасибо за участие.
ну там таблица которую создал без всяких отсебяшных индексов. с одним только полем NUM которое я сделал первичным ключом.

вот ещё могу что показать:
картинка
...
Рейтинг: 0 / 0
вставка уникального значения.
    #39913100
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да . сейчас попробовал на другой базе. всё работает - странно , а что это было ?
а можно что-нибудь сказать по той картинке где результат выполнения sp_who2, sp_lock на тот висящий момент ?


alexeyvg


Лучше и скрипт создания таблицы тоже приложите, включая все её объекты (индексы, констрейны и т.д.)



вот такой скрипт
Код: sql
1.
create table SPK_TEST13 (NUM numeric(10) PRIMARY KEY )
...
Рейтинг: 0 / 0
вставка уникального значения.
    #39913104
entrypoint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andron81,

Так не будет работать, не увеличиваете NUM, одно и то же вставляете, при добавлении в таблицу свалится на PRIMARY KEY

Код: sql
1.
select top (1) @NUM = NUM from SPK_TEST13 with (updlock, serializable) 


нужно

Код: sql
1.
select top (1) @NUM = NUM + 1 from SPK_TEST13 with (updlock, serializable) 



select top (1) @NEW_NUM = NUM from SPK_TEST13 with (updlock, serializable) order by NUM desc;
...
Рейтинг: 0 / 0
вставка уникального значения.
    #39913106
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81
да . сейчас попробовал на другой базе. всё работает - странно , а что это было ?
Мало ли, экспериментировали, забыли какое то окно с транзакцией.

andron81
а можно что-нибудь сказать по той картинке где результат выполнения sp_who2, sp_lock на тот висящий момент ?
Конечно. Там будет видно, кто кого блокировал. Дальше нужно найти окна с соотв. SPID, и всё будет понятно.
В данном случае блокирующий SPID = 57, ищите это окошко. Можете в нём выполнить select @@trancount, он будет больше 0.
...
Рейтинг: 0 / 0
вставка уникального значения.
    #39913108
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
entrypoint
Так не будет работать, не увеличиваете NUM, одно и то же вставляете, при добавлении в таблицу свалится на PRIMARY KEY
Это само собой, но в принципе у ТС задача разобраться с транзакциями, так что неважно.
...
Рейтинг: 0 / 0
вставка уникального значения.
    #39913153
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg

andron81


а можно что-нибудь сказать по той картинке где результат выполнения sp_who2, sp_lock на тот висящий момент ?
Конечно. Там будет видно, кто кого блокировал. Дальше нужно найти окна с соотв. SPID, и всё будет понятно.
В данном случае блокирующий SPID = 57, ищите это окошко. Можете в нём выполнить select @@trancount, он будет больше 0.



[/quot]

справоцировать по новой это не удалось.

странно всё это . вы пишите , что что-то блокирующее в сеансе с номером 57. Но из картинки видно, что сеанс всё закончил и простаивает ("Awaiting command").
Вы хотите сказать , что транзакция до сих пор активна в этом сеансе ? а почему ? там ведь кроме моих сеансов и сеансов BuhServer/Администратор (причем не думаю , что ковыряния в базе msdb затрагивает нашу транзакцию из 57) ничего ведь нет .
...
Рейтинг: 0 / 0
вставка уникального значения.
    #39913154
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81
Но из картинки видно, что сеанс всё закончил и простаивает ("Awaiting command").



1. Открываем новое окошко SSMS
2. Выполняем команду begin tran
3. Смотрим состояние сессии
...
Рейтинг: 0 / 0
вставка уникального значения.
    #39913180
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msLex
andron81
Но из картинки видно, что сеанс всё закончил и простаивает ("Awaiting command").



1. Открываем новое окошко SSMS
2. Выполняем команду begin tran
3. Смотрим состояние сессии


это ведь и было сделано и снимок sp_who2 есть.
вот тут об этом я писал.
22057670

там и картинка с sp_who2 .
вот и загадка в картинке : процесс 62 подвис из-за процесса 57. а 57 все как бы закончил (sleeping, Awaiting command).
...
Рейтинг: 0 / 0
вставка уникального значения.
    #39913182
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81
а 57 все как бы закончил (Awaiting command).
Это не значит, что завершились открытые транзакции.
В вашем 57, на начало выполнения скрипта, уже была открытая транзакция.
...
Рейтинг: 0 / 0
вставка уникального значения.
    #39913191
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm

В вашем 57, на начало выполнения скрипта, уже была открытая транзакция.


вы хотите сказать ,что хоть я и запускал процесс 57 раньше 62, но в скрипте 62-го транзакция сработала раньше 57-го ?
...
Рейтинг: 0 / 0
вставка уникального значения.
    #39913196
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81
вы хотите сказать ,что хоть я и запускал процесс 57 раньше 62, но в скрипте 62-го транзакция сработала раньше 57-го ?
Нет. Я говорю, что в 57, на момент запуска скрипта, уже была незавершенная транзакция
...
Рейтинг: 0 / 0
вставка уникального значения.
    #39913201
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm
andron81
вы хотите сказать ,что хоть я и запускал процесс 57 раньше 62, но в скрипте 62-го транзакция сработала раньше 57-го ?
Нет. Я говорю, что в 57, на момент запуска скрипта, уже была незавершенная транзакция


не понял. Получается в 57 транзакция не отработала ? Во всяком случае я в 57 в окно заходил скрипт отработал и выдал. можно предположить какая это транзакция (моя или чья-то ещё)?
...
Рейтинг: 0 / 0
вставка уникального значения.
    #39913207
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81,
единственное что я делал до этого это создавал таблицу SPK_TEST13 с одним полем(первичный ключ) по средствам менеджмент студио
...
Рейтинг: 0 / 0
вставка уникального значения.
    #39913209
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81
Получается в 57 транзакция не отработала ?
Нет.
Получается, что в 57 просто есть незавершенная транзакция. Причин из-за чего может быть несколько.
Например, прервали выполнение. Или выполнили только часть скрипта, без коммита. Или выполнение было прервано по ошибке. И т.п.
Что бы снизить вероятность этого, рекомендуется включать опцию xact_abort.
...
Рейтинг: 0 / 0
вставка уникального значения.
    #39913228
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81
странно всё это . вы пишите , что что-то блокирующее в сеансе с номером 57. Но из картинки видно, что сеанс всё закончил и простаивает ("Awaiting command").
Вы хотите сказать , что транзакция до сих пор активна в этом сеансе ? а почему ?
Ну как, вы запустили команду BEGIN TRAN.
Она выполнилась, и всё, сервер ждёт от вас следующих команд в этой сессии.
А вы ушли обедать, ничего не делаете, окно не закрыли.
Вот и будет открытая транзакция, заблокированные ресурсы, и статус Awaiting command. Пока вы не закроете коннект (окно в SSMS), либо не выполните COMMIT TRAN, либо пока кто то не кильнёт вашу сессию.
...
Рейтинг: 0 / 0
48 сообщений из 48, показаны все 2 страниц
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / вставка уникального значения.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]