Size: a a a

SqlCom.ru - Стиль жизни SQL

2020 June 22

OM

Oleg Makarikhin in SqlCom.ru - Стиль жизни SQL
поле lastwaittype в sysprocesses where spid = ....  имеет ожидание связанное с сетью, ASYNC_NETWORK_IO например. и ненулевые счётчики waittime при этом
источник

P

Pavel in SqlCom.ru - Стиль жизни SQL
Подскажите, пожалуйста, почему PRINT не выводит сообщение при выполнении в цикле?
источник

M

Marat in SqlCom.ru - Стиль жизни SQL
Pavel
Подскажите, пожалуйста, почему PRINT не выводит сообщение при выполнении в цикле?
запрос покажите
источник

P

Pavel in SqlCom.ru - Стиль жизни SQL
while(@rowsLeft > 0)
begin
 begin transaction ArchiveTran
 begin
  begin try
     set @iterationNumber = @iterationNumber + 1
     set @iterationtime = CURRENT_TIMESTAMP          

     INSERT INTO @asyncLogsForDeletePerIteration (AsyncOperationId)
     Select top (@rowsPerIteration) AsyncOperationId  FROM  @totalAsyncLogsForDelete
     
     Delete aob FROM GPBL_MSCRM.dbo.AsyncOperationBase aob
     inner join @asyncLogsForDeletePerIteration as asyncForDel on asyncForDel.AsyncOperationId = aob.AsyncOperationId
     
     Delete total from @totalAsyncLogsForDelete total
     inner join @asyncLogsForDeletePerIteration iter on iter.AsyncOperationId = total.AsyncOperationId

     set @rowsLeft = @rowsLeft - (select count(*) from @asyncLogsForDeletePerIteration) ;
     set @duration = getdate()-@iterationtime;
     
     PRINT 'Iteration successfully compleated. Rows left' + isnull(CAST (@rowsLeft as nvarchar) ,'') + 'Iteration time: ' +  isnull(CAST(@iterationtime as nvarchar),'')

     end try
           
     begin catch
       if @@TRANCOUNT>0 rollback;
       set @rowsLeft = @rowsLeft + @rowsPerIteration;
       print concat('Transaction failed: ',  error_message(), ' on iteration: ', isnull(cast(@iterationNumber as nvarchar),'') , 'Error timestamp: ', ' Rows left :', isnull(cast( @rowsLeft as nvarchar),'')  )
     end catch
   
 commit  tran ArchiveTran
 end
 set @iterationtime = current_timestamp
end -- loop
источник

I

ILYA in SqlCom.ru - Стиль жизни SQL
Roman Holubenko
есть ли способ удостоверится что проблема именно в этом, может запрос какой-то ?
Как косвенный признак посмотри в эти моменты трафик сетевой перфмоном , если с ним никаких особых всплесков, а ожидания есть то причина явно не в пропускной способности сети
источник

k

karb0f0s in SqlCom.ru - Стиль жизни SQL
Pavel
Подскажите, пожалуйста, почему PRINT не выводит сообщение при выполнении в цикле?
потому что лучше использовать RAISEERROR без буферизации вывода
https://www.red-gate.com/simple-talk/blogs/outputting-status-t-sql-code/
https://www.sqlshack.com/sql-server-print-and-sql-server-raiserror-statements/
источник

OM

Oleg Makarikhin in SqlCom.ru - Стиль жизни SQL
Pavel
while(@rowsLeft > 0)
begin
 begin transaction ArchiveTran
 begin
  begin try
     set @iterationNumber = @iterationNumber + 1
     set @iterationtime = CURRENT_TIMESTAMP          

     INSERT INTO @asyncLogsForDeletePerIteration (AsyncOperationId)
     Select top (@rowsPerIteration) AsyncOperationId  FROM  @totalAsyncLogsForDelete
     
     Delete aob FROM GPBL_MSCRM.dbo.AsyncOperationBase aob
     inner join @asyncLogsForDeletePerIteration as asyncForDel on asyncForDel.AsyncOperationId = aob.AsyncOperationId
     
     Delete total from @totalAsyncLogsForDelete total
     inner join @asyncLogsForDeletePerIteration iter on iter.AsyncOperationId = total.AsyncOperationId

     set @rowsLeft = @rowsLeft - (select count(*) from @asyncLogsForDeletePerIteration) ;
     set @duration = getdate()-@iterationtime;
     
     PRINT 'Iteration successfully compleated. Rows left' + isnull(CAST (@rowsLeft as nvarchar) ,'') + 'Iteration time: ' +  isnull(CAST(@iterationtime as nvarchar),'')

     end try
           
     begin catch
       if @@TRANCOUNT>0 rollback;
       set @rowsLeft = @rowsLeft + @rowsPerIteration;
       print concat('Transaction failed: ',  error_message(), ' on iteration: ', isnull(cast(@iterationNumber as nvarchar),'') , 'Error timestamp: ', ' Rows left :', isnull(cast( @rowsLeft as nvarchar),'')  )
     end catch
   
 commit  tran ArchiveTran
 end
 set @iterationtime = current_timestamp
end -- loop
бывает буферизация этого потока, и говорят решается использованием
RAISERROR('message text',0,1) WITH NOWAIT;
вместо принта
источник

P

Pavel in SqlCom.ru - Стиль жизни SQL
Спасибо
источник

P

Pavel in SqlCom.ru - Стиль жизни SQL
Подскажите, пожалуйста, возможен ли такой вариант вставки данных в таблицу перед удалением: delete poa output deleted.* into Arсhive.dbo.PrincipalObjectAccess   from   ARCH_MSCRM.dbo.PrincipalObjectAccess poa
источник

DN

Denis Novickiy in SqlCom.ru - Стиль жизни SQL
Pavel
Подскажите, пожалуйста, возможен ли такой вариант вставки данных в таблицу перед удалением: delete poa output deleted.* into Arсhive.dbo.PrincipalObjectAccess   from   ARCH_MSCRM.dbo.PrincipalObjectAccess poa
так вы сможете удалить только 1 раз
источник

P

Pavel in SqlCom.ru - Стиль жизни SQL
Denis Novickiy
так вы сможете удалить только 1 раз
Всмысле?  Я хочу сохранить данные в другую таблицу перед удалением
источник

DN

Denis Novickiy in SqlCom.ru - Стиль жизни SQL
Pavel
Всмысле?  Я хочу сохранить данные в другую таблицу перед удалением
тогда можете удалять. имею ввиду, что повторно для этой таблицы не сможете использовать этот код, т.к. таблица уже будет существовать
источник

P

Pavel in SqlCom.ru - Стиль жизни SQL
Denis Novickiy
тогда можете удалять. имею ввиду, что повторно для этой таблицы не сможете использовать этот код, т.к. таблица уже будет существовать
проблема в том, что вылезает ошибка Invalid object name 'Arсhive.dbo.PrincipalObjectAccess'.
источник

P

Pavel in SqlCom.ru - Стиль жизни SQL
в интернете увидел варианты только с сохранением во временную таблицу)
источник

IC

Igor Chizhov in SqlCom.ru - Стиль жизни SQL
Что-то мне кажется, output в другую базу не прокатит
источник

G

Gopneg in SqlCom.ru - Стиль жизни SQL
Igor Chizhov
Что-то мне кажется, output в другую базу не прокатит
Почему?
источник

IC

Igor Chizhov in SqlCom.ru - Стиль жизни SQL
Gopneg
Почему?
сорри, очепятка, в другую базу
источник

DN

Denis Novickiy in SqlCom.ru - Стиль жизни SQL
Pavel
в интернете увидел варианты только с сохранением во временную таблицу)
укажите явно столбцы
источник

G

Gopneg in SqlCom.ru - Стиль жизни SQL
Igor Chizhov
сорри, очепятка, в другую базу
Тоже не вижу каких-то явных препятствий
источник

P

Pavel in SqlCom.ru - Стиль жизни SQL
Gopneg
Тоже не вижу каких-то явных препятствий
Можно, уже наткнулся на следующую проблему: Column 'deleted.Duration' cannot be referenced in the OUTPUT clause because the column definition contains a subquery or references a function that performs user or system data access. A function is assumed by default to perform data access if it is not schemabound. Consider removing the subquery or function from the column definition or removing the column from the OUTPUT clause.
источник