Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
IDENT_CURRENT параллельный вызов процедур и некоторые траблы
|
|||
|---|---|---|---|
|
#18+
Добрый день! Есть некоторое приложение разбитое по потокам (не Service Broker) которое раз в секунду вызывает процедуры - каждый поток собственную процедуру В одной из процедур используется IDENT_CURRENT для нахождения значения IDENTITY поля после вставки (код не мой, я обычно OUTPUT для таких вещей - не суть) Делаю высокую активность чтобы все это работало при высокой нагрузке Вижу проблемы с процедурой в которой юзается IDENT_CURRENT И подозреваю что IDENT_CURRENT возвращает какое то неверное значение (не соответствующее реалиям) Вот псевдокод Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. И вот бывают случаи что логика вываливается на ошибку (@@rowcount<>1) А так как это в транзакции, процедура выполняется параллельно - апдейт начинает сканировать "не верные" диапазоны ключей и возникают всякие неприятные коллизии в т ч deadlock Но вот как раз первопричина этого неправильное значение выдаваемое IDENT_CURRENT - может быть такое? И поможет ли при этом замена на OUTPUT clause? Спрашиваю т к повторить эксперимент не могу так как стенд с приложением пока не работает, просто думаю над сложившейся ситуацией Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2019, 13:02 |
|
||
|
IDENT_CURRENT параллельный вызов процедур и некоторые траблы
|
|||
|---|---|---|---|
|
#18+
Как обычно, документацию никто не читает https://docs.microsoft.com/ru-ru/sql/t-sql/functions/ident-current-transact-sql?view=sql-server-2017 Возврат последнего значения идентификатора, созданного для указанной таблицы или представления. Последнее созданное значение идентификатора может относиться к любому сеансу и любой области. BredSpitможет быть такое?Да. Лечится заменой на SCOPE_IDENTITY ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2019, 13:13 |
|
||
|
IDENT_CURRENT параллельный вызов процедур и некоторые траблы
|
|||
|---|---|---|---|
|
#18+
invm Грешен - не читал ... Спасибо Не использую в коде IDENT_CURRENT ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2019, 13:15 |
|
||
|
IDENT_CURRENT параллельный вызов процедур и некоторые траблы
|
|||
|---|---|---|---|
|
#18+
BredSpit invm Грешен - не читал ... Спасибо Не использую в коде IDENT_CURRENT SCOPE_IDENTITY тоже не панацея. Используйте output Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2019, 13:37 |
|
||
|
IDENT_CURRENT параллельный вызов процедур и некоторые траблы
|
|||
|---|---|---|---|
|
#18+
msLex Спасибо Тоже склоняюсь в сторону OUTPUT Читал(правда не для моего случая - а при параллелизме на серваке) что SCOPE_IDENTITY() может работать не корректно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2019, 13:43 |
|
||
|
IDENT_CURRENT параллельный вызов процедур и некоторые траблы
|
|||
|---|---|---|---|
|
#18+
BredSpitЧитал(правда не для моего случая - а при параллелизме на серваке) что SCOPE_IDENTITY() может работать не корректноПри параллелизме она работает корректно. Проблемы будут в инстед-триггерах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2019, 13:49 |
|
||
|
IDENT_CURRENT параллельный вызов процедур и некоторые траблы
|
|||
|---|---|---|---|
|
#18+
msLexBredSpit invm Грешен - не читал ... Спасибо Не использую в коде IDENT_CURRENT SCOPE_IDENTITY тоже не панацея. Используйте output Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. SCOPE_IDENTITY() и OUTPUT работают совершенно одинаково. Если не считать, что OUTPUT может вернуть много вставленных строк, а не одну. В том числе ни одно, ни другое не дадут вставленное IDENTITY, если есть триггер INSTEAD OF INSERT ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2019, 14:40 |
|
||
|
IDENT_CURRENT параллельный вызов процедур и некоторые траблы
|
|||
|---|---|---|---|
|
#18+
iapSCOPE_IDENTITY() и OUTPUT работают совершенно одинаково. srccreate table t (id int identity, f int ) declare @t table (id int identity(2,2), inserted_id int ) insert t output inserted.id into @t(inserted_id) select 1 select [SCOPE_IDENTITY] = SCOPE_IDENTITY() select * from @t drop table t ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2019, 14:57 |
|
||
|
IDENT_CURRENT параллельный вызов процедур и некоторые траблы
|
|||
|---|---|---|---|
|
#18+
iapSCOPE_IDENTITY() и OUTPUT работают совершенно одинаково. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2019, 14:57 |
|
||
|
IDENT_CURRENT параллельный вызов процедур и некоторые траблы
|
|||
|---|---|---|---|
|
#18+
Вот, когда-то была тема (таких тем тут было видимо-невидимо!) Ситуация с @@IDENTITY, помогите отловить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2019, 14:59 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39863404&tid=1687266]: |
0ms |
get settings: |
8ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
57ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
70ms |
get tp. blocked users: |
2ms |
| others: | 230ms |
| total: | 406ms |

| 0 / 0 |
