none
Сильно пухнет таблица: sysdercv. RRS feed

  • Вопрос

  • Доброго времени суток.

    Начал замечать, что сильно увеличивается файл БД. в среднем по 5гб в  день.

    Пользовательские таблицы сильно не прирастают (не в таком темпе).

    проверил так: 

    select object_name(id) tbl, rowcnt, indid ,
    reserved/128. as reserv, 
    dpages/128. as data,
    (reserved - dpages)/128. as delta,* from sysindexes
    where indid in (0,1)
    and object_name(id) like ('%sys%')
    order by 4 desc

    в результате в топе видим: sysdercv (поле tbl)(<sentencetext xmlns="http://www.w3.org/1999/xhtml">Существует в каждой базе данных.</sentencetext> <sentencetext xmlns="http://www.w3.org/1999/xhtml">Содержит по одной строке на каждую принимающую конечную точку диалога Service Broker.)ms.</sentencetext>

    поле data выдает: почти 60гб.

    По процедурам очередей косяков не наблюдаю.

    select * from  sys.transmission_queue --крутится от 3х до 5 минут выдает 3 строки.

    Подскажите как понять что происходит?

Ответы

  • Нужно закрывать конверсейшины

    http://www.t-sql.ru

    • Помечено в качестве ответа M.Dornostup 28 мая 2016 г. 13:48
    Отвечающий
  • хотя у меня все диалоги имеют значение: CONVERSING.
    У вас один конверсейшн используется для одного сообщения и всё...дальше висит мёртвым грузом...используйте для повтора отправки уже открытые, а не создавайте новые, иначе проблема повторится

    http://www.t-sql.ru

    • Помечено в качестве ответа M.Dornostup 28 мая 2016 г. 17:36
    Отвечающий

Все ответы

  • 1) 

    select object_name(object_id) obj
         , sum(reserved_page_count)*8/1024. sizeMb
         , sum(row_count) row_count
    from sys.dm_db_partition_stats
    where index_id < 2
    group by object_id
    order by 2 desc

    2) 

    select count(*) from sys.conversation_endpoints

    http://www.t-sql.ru

    Отвечающий
  • 1) http://prntscr.com/b9ey2l   --скрин.

    2) спустя час еще крутиться. остановил, Стоит ли ждать дольше? 


    • Изменено M.Dornostup 28 мая 2016 г. 11:21
  • Отработал...

    104875257 

  • скрин из топ 100 (все поля):

    http://prntscr.com/b9fslu

    http://prntscr.com/b9fsqz

    http://prntscr.com/b9fsx9

    http://prntscr.com/b9ft10

    http://prntscr.com/b9ft4j

  • Нужно закрывать конверсейшины

    http://www.t-sql.ru

    • Помечено в качестве ответа M.Dornostup 28 мая 2016 г. 13:48
    Отвечающий
  • Как правильно поступить с текущими данными, как закрыть то что накопилось? 

    declare @h uniqueidentifier, @count int = 0;
    begin transaction;
    while (1=1)
    begin
    	set @h = null;
    	select top(1) @h = conversation_handle
    		from sys.conversation_endpoints
    		where state_desc = N'CLOSED'
    		and security_timestamp = '1900-01-01 00:00:00.000'
    		and lifetime > dateadd(month, 1, getutcdate())
    	if (@h is null)
    	begin
    		break
    	end
    	end conversation @h with cleanup;
    	set @count += 1;
    	if (@count > 1000)
    	begin
    		commit;
    		set @count = 0;
    		begin transaction;
    	end
    end
    commit

    Так нормально?  Будет ли тогда очищена 

    sysdercv?

  • хотя у меня все диалоги имеют значение: CONVERSING.
  • хотя у меня все диалоги имеют значение: CONVERSING.
    У вас один конверсейшн используется для одного сообщения и всё...дальше висит мёртвым грузом...используйте для повтора отправки уже открытые, а не создавайте новые, иначе проблема повторится

    http://www.t-sql.ru

    • Помечено в качестве ответа M.Dornostup 28 мая 2016 г. 17:36
    Отвечающий
  • А еще такой вопрос:

    По какой причине некоторые диалоги открываются с security_timestamp = 0 (1900-01-01 00:00:00.000)

    и при этом закрываются только при end conversation with cleanup.

    Закрываю диалог просто end conversation, выполняется повторно говорит: "Не найден дескриптор диалога "F293D2A8-0F25-E611-8B27-645A04AD85BB"." в sys.conversation_endpoints остается.

  • Осознал. Спасибо!