Size: a a a

2021 February 17

G

Gopneg in sql_ninja
Дмитрий Степанов
Оно валится, если был "внезапный" дисконнект нескольких сессий.
а чо ты тогда показываешь нам 0?
источник

ДС

Дмитрий Степанов... in sql_ninja
Gopneg
а чо ты тогда показываешь нам 0?
в доке, ничего про сетевые ошибки не сказано.
источник

ДС

Дмитрий Степанов... in sql_ninja
Поэтому и 0
источник

MC

Max Chistyakov in sql_ninja
Дмитрий Степанов
Короче, если я не накосячил с тестовой процедурой, то вот результаты проверки временных таблиц:
REC COUNT 907016
MSG: ALL DONE. Time: 481843 ms. Record per sec: 1882,39. Total DB: 0,13 hour. Pool (10 threads): 0 executing / 0 queued


select * from [imp].[dbo].temp_fails

gotcha
------

(0 rows affected)


Скрипт проверки: https://gist.github.com/ionflux/f0f84b4e5ac4781919a7be24f8da850e
я не совсем понял идею этого теста;
Ты в текущем скопе, и внутри процедуры объявляешь #tab с полем, которое отличается по типу данных между собой. Проверяешь один раз. И чего?
Если порядок рандомный, то он может десять раз отработать с тем результатом, который ты ожидаешь, а на 11 выдать другой.
источник

ДС

Дмитрий Степанов... in sql_ninja
Max Chistyakov
я не совсем понял идею этого теста;
Ты в текущем скопе, и внутри процедуры объявляешь #tab с полем, которое отличается по типу данных между собой. Проверяешь один раз. И чего?
Если порядок рандомный, то он может десять раз отработать с тем результатом, который ты ожидаешь, а на 11 выдать другой.
Ок, тогда я не понял твоей идеи проверки
источник

MC

Max Chistyakov in sql_ninja
Дмитрий Степанов
Короче, если я не накосячил с тестовой процедурой, то вот результаты проверки временных таблиц:
REC COUNT 907016
MSG: ALL DONE. Time: 481843 ms. Record per sec: 1882,39. Total DB: 0,13 hour. Pool (10 threads): 0 executing / 0 queued


select * from [imp].[dbo].temp_fails

gotcha
------

(0 rows affected)


Скрипт проверки: https://gist.github.com/ionflux/f0f84b4e5ac4781919a7be24f8da850e
чтобы убедиться в той или иной теории, я бы делал селект из временной таблицы внутри процедуры и сохранял его результат в постоянную табл. Сделал бы это в цикле на миллион, скажем, раз. И проверил, все ли миллионы раз результат селекта был тем, что содержится во временной таблице внутри процедуры
источник

MC

Max Chistyakov in sql_ninja
идея — проверить, что каждый случай из достаточно большого числа обращений ко временной таблице в процедуре, он будет обращаться именно к той которая создана внутри хранимки
источник

ДС

Дмитрий Степанов... in sql_ninja
Max Chistyakov
чтобы убедиться в той или иной теории, я бы делал селект из временной таблицы внутри процедуры и сохранял его результат в постоянную табл. Сделал бы это в цикле на миллион, скажем, раз. И проверил, все ли миллионы раз результат селекта был тем, что содержится во временной таблице внутри процедуры
Ок, я андерстэнд ю =)
источник

ДС

Дмитрий Степанов... in sql_ninja
Max Chistyakov
идея — проверить, что каждый случай из достаточно большого числа обращений ко временной таблице в процедуре, он будет обращаться именно к той которая создана внутри хранимки
create procedure t1
as
begin
 create table #tab (i int PRIMARY KEY)
 insert into #tab values (1)

 declare @i int = 0

 while @i < 100000
 begin
   if ((select try_cast(i as int) from #tab) <> 1)
     return 1

   set @i += 1
 end

 return 0
end
go

?
источник

G

Gopneg in sql_ninja
не, селект не внутри процедуры, а вне ее
плюс надо еще вложенно вызвать процедурку из процедурки где уже темп таблица есть
да и на верхнем уровне тоже наверное надо табличку ебануть

и инсертить в ##
источник

G

Gopneg in sql_ninja
хотя если нас интересует сам факт факапа, то можно и читать внутри процедурки из ## и raise сделать если чо
источник

ДС

Дмитрий Степанов... in sql_ninja
Gopneg
хотя если нас интересует сам факт факапа, то можно и читать внутри процедурки из ## и raise сделать если чо
источник

ДС

Дмитрий Степанов... in sql_ninja
По факту 3 таблицы с одинаковыми именами, на разных уровнях вложенности. На самом нижнем читаем херову тучу раз.
источник

G

Gopneg in sql_ninja
я не думаю что внутри цикла скоп поменяется как-то
источник

ДС

Дмитрий Степанов... in sql_ninja
Gopneg
я не думаю что внутри цикла скоп поменяется как-то
источник

G

Gopneg in sql_ninja
скорее нам надо больше разных кейсов, параллелить, создавать табличку через select into
делать разные схемы таблицы
дропать сессии
кидать эксепшны
откатывать транзакции и т.п.
источник

G

Gopneg in sql_ninja
заебаться в общем
источник

G

Gopneg in sql_ninja
а потом погуглить брентозара и найти у него кейс когда это воспроизводится
источник

К

Какой-то Хмырь... in sql_ninja
а для таблиц-переменных проверите?
источник

G

Gopneg in sql_ninja
вот тебя и назначим проверять
источник