Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Можно ли постфактум выяснить что явилось причиной...  [new]
АндрейИванов
Member

Откуда:
Сообщений: 64
Здравствуйте,

Можно ли постфактум выяснить что явилось причиной сильного роста tempdb ?


В журнале ошибок пусто.
7 авг 17, 10:25    [20704524]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли постфактум выяснить что явилось причиной...  [new]
Dmitry V. Liseev
Member [заблокирован]

Откуда: Санкт-Петербург
Сообщений: 5490
АндрейИванов
Здравствуйте,

Можно ли постфактум выяснить что явилось причиной сильного роста tempdb ?


В журнале ошибок пусто.
Активное юзание временных таблиц, например. Или тяжёлых запросов. Промежуточные данные в тяжёлых запросах неявно могут сбрасываться во временные таблицы.
7 авг 17, 10:35    [20704555]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли постфактум выяснить что явилось причиной...  [new]
АндрейИванов
Member

Откуда:
Сообщений: 64
Dmitry V. Liseev
АндрейИванов
Здравствуйте,

Можно ли постфактум выяснить что явилось причиной сильного роста tempdb ?


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


А что за сессия это была никак вытянуть нельзя?

Может быть какая-нибудь статистика в SQL Server ведется?


Вообще странно что рост темпдб не фиксируется в логе ошибок.
7 авг 17, 10:51    [20704604]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли постфактум выяснить что явилось причиной...  [new]
LSV
Member [заблокирован]

Откуда: Киев
Сообщений: 30817
АндрейИванов
Здравствуйте,

Можно ли постфактум выяснить что явилось причиной сильного роста tempdb ?
В журнале ошибок пусто.
Если это 1С, то скорее всего неразумно спроектированный отчет или обработка с большими объемами переливов во врем. таблицы.

Еще может быть сложная сортировка, когда сервер не может отсортировать большую выборку "на лету" и сортирует ее в темпДБ.
7 авг 17, 10:57    [20704627]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли постфактум выяснить что явилось причиной...  [new]
o-o
Guest
в дефолтный трэйс валятся спиллы.
их можно отфильтровать по name, subclass_name:
Sort Warnings Single pass
Hash Warning Recursion
в трэйсе конечно не будет стэйтмента, это вызвавшего,
но будет время и логин.
если например у вас идет ночная перезавивка базы с логированием
(у нас каждая процедура пишет в лог каждый выпоненный стэйтмент и время начала/окончания выполнения)
то достаточно сопоставить время и логин, чтобы понять, что это было
------------
у нас переполняют никакие не временные таблицы, а именно что спиллы.
7 авг 17, 11:01    [20704638]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли постфактум выяснить что явилось причиной...  [new]
Pavel1211
Member

Откуда: Екатеринбург
Сообщений: 205
АндрейИванов
[quot
Вообще странно что рост темпдб не фиксируется в логе ошибок.

Имхо, это не является ошибкой :)
В добавок к вышесказанному, еще индекс может строиться и сортировать данные в tempdb ( sort_in_tempdb = on )
7 авг 17, 11:05    [20704650]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли постфактум выяснить что явилось причиной...  [new]
o-o
Guest
АндрейИванов
Вообще странно что рост темпдб не фиксируется в логе ошибок.

выставьте темпдб фиксированный размер с 0-автоприращением,
и все попытки разрастись за пределы прекрасно зафиксируются в еррорлоге
7 авг 17, 11:08    [20704666]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли постфактум выяснить что явилось причиной...  [new]
АндрейИванов
Member

Откуда:
Сообщений: 64
o-o
АндрейИванов
Вообще странно что рост темпдб не фиксируется в логе ошибок.

выставьте темпдб фиксированный размер с 0-автоприращением,
и все попытки разрастись за пределы прекрасно зафиксируются в еррорлоге

она разрастается до ошибки в приложении "Не удалось выделить место для объекта "ХХХХХХХХХ" в базе данных "tempdb", поскольку файловая группа "PRIMARY" переполнена.".
но в логе не фиксируется.
7 авг 17, 11:35    [20704753]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли постфактум выяснить что явилось причиной...  [new]
komrad
Member

Откуда:
Сообщений: 5244
АндрейИванов,

если у базы выставлен autogrowth, то в дефолтном трейсе будут события Log/Data File Growth
там будет видно какой пользователь, какое приложение и когда
7 авг 17, 11:57    [20704828]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли постфактум выяснить что явилось причиной...  [new]
АндрейИванов
Member

Откуда:
Сообщений: 64
komrad
АндрейИванов,

если у базы выставлен autogrowth, то в дефолтном трейсе будут события Log/Data File Growth
там будет видно какой пользователь, какое приложение и когда


Скажите, дефолтный трейс это файл ERRORLOG, который виден из SSMS в разделе "журналы ошибок" ?
7 авг 17, 12:00    [20704834]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли постфактум выяснить что явилось причиной...  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
АндрейИванов
дефолтный трейс это файл ERRORLOG, который виден из SSMS в разделе "журналы ошибок" ?

https://habrahabr.ru/post/277053/
7 авг 17, 12:15    [20704868]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли постфактум выяснить что явилось причиной...  [new]
Dmitry V. Liseev
Member [заблокирован]

Откуда: Санкт-Петербург
Сообщений: 5490
AlanDenton
АндрейИванов
дефолтный трейс это файл ERRORLOG, который виден из SSMS в разделе "журналы ошибок" ?

https://habrahabr.ru/post/277053/
Прикольно. Попробовал. Показывает, что в tempdb создаются таблицы. Но, имени таблицы не показывает.
7 авг 17, 12:34    [20704972]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли постфактум выяснить что явилось причиной...  [new]
АндрейИванов
Member

Откуда:
Сообщений: 64
o-o
в дефолтный трэйс валятся спиллы.
их можно отфильтровать по name, subclass_name:
Sort Warnings Single pass
Hash Warning Recursion
в трэйсе конечно не будет стэйтмента, это вызвавшего,
но будет время и логин.
если например у вас идет ночная перезавивка базы с логированием
(у нас каждая процедура пишет в лог каждый выпоненный стэйтмент и время начала/окончания выполнения)
то достаточно сопоставить время и логин, чтобы понять, что это было
------------
у нас переполняют никакие не временные таблицы, а именно что спиллы.



Подскажите пожалуйста, где эти спилы искать?

Вы имеете ввиду log*.trc файлы в той же директории что и error лог?
7 авг 17, 16:36    [20705976]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли постфактум выяснить что явилось причиной...  [new]
Гулин Федор
Member

Откуда: МИНСК
Сообщений: 1237
+1 тоже хочу посмотреть что такое спиллы
ссылки плз на мат.часть
7 авг 17, 16:40    [20705990]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли постфактум выяснить что явилось причиной...  [new]
o-o
Guest
select te.name, tsv.subclass_name, tr.*
from sys.traces st 
     cross apply sys.fn_trace_gettable(st.[path], default) tr 
	 join sys.trace_events te 
	    on te.trace_event_id = tr.EventClass 
     join sys.trace_subclass_values tsv 
	    on tsv.trace_event_id = tr.EventClass and tsv.subclass_value = tr.EventSubClass
where st.is_default = 1 and name in ('Hash Warning', 'Sort Warnings')
7 авг 17, 16:46    [20706012]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли постфактум выяснить что явилось причиной...  [new]
o-o
Guest
Hash Warning
Sort Warnings
7 авг 17, 16:51    [20706033]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли постфактум выяснить что явилось причиной...  [new]
АндрейИванов
Member

Откуда:
Сообщений: 64
o-o
select te.name, tsv.subclass_name, tr.*
from sys.traces st 
     cross apply sys.fn_trace_gettable(st.[path], default) tr 
	 join sys.trace_events te 
	    on te.trace_event_id = tr.EventClass 
     join sys.trace_subclass_values tsv 
	    on tsv.trace_event_id = tr.EventClass and tsv.subclass_value = tr.EventSubClass
where st.is_default = 1 and name in ('Hash Warning', 'Sort Warnings')


Ого, круто!



Жаль что там информация только за последние 5 минут.


Ссылочки посмотрю сейчас.
7 авг 17, 17:02    [20706080]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли постфактум выяснить что явилось причиной...  [new]
o-o
Guest
АндрейИванов
Жаль что там информация только за последние 5 минут.

потому что мой код выгребает только из последнего трэйс-файла.
выгребайте из всех уцелевших, пока они не перезатерлись
7 авг 17, 17:15    [20706122]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли постфактум выяснить что явилось причиной...  [new]
АндрейИванов
Member

Откуда:
Сообщений: 64
o-o
АндрейИванов
Жаль что там информация только за последние 5 минут.

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



Ставил вместо
 st.is_default = 1


st.is_default = 2
st.is_default = 3
st.is_default = 4
st.is_default = 5



Но пустая выборка.

Хотя файлы trc на месте.




Подскажите пожалуйста как из других файлов информацию вытащить?
7 авг 17, 17:46    [20706249]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли постфактум выяснить что явилось причиной...  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36965
Ну, чо, очередной креатив очередного "Коляна Козлова".

Сообщение было отредактировано: 7 авг 17, 17:48
7 авг 17, 17:47    [20706253]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли постфактум выяснить что явилось причиной...  [new]
komrad
Member

Откуда:
Сообщений: 5244
АндрейИванов

Но пустая выборка.

Хотя файлы trc на месте.

Подскажите пожалуйста как из других файлов информацию вытащить?


+ вот так


declare @all_files varchar(512)
	
select 
       @all_files=convert(varchar(512),value)
from sys.fn_trace_getinfo(DEFAULT)
where traceid = 1 
and property = 2

select @all_files=left(@all_files,len(@all_files)-charindex('_',reverse(@all_files)))+right(@all_files,4)

-- o-o's query 
select te.name
         ,tsv.subclass_name
         ,tr.*
from sys.traces st 
     cross apply sys.fn_trace_gettable(@all_files, default) tr 
	 join sys.trace_events te 
	    on te.trace_event_id = tr.EventClass 
     join sys.trace_subclass_values tsv 
	    on tsv.trace_event_id = tr.EventClass and tsv.subclass_value = tr.EventSubClass
where st.is_default = 1 
and name in ('Hash Warning', 'Sort Warnings')



7 авг 17, 18:04    [20706305]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли постфактум выяснить что явилось причиной...  [new]
АндрейИванов
Member

Откуда:
Сообщений: 64
komrad
АндрейИванов
Но пустая выборка.

Хотя файлы trc на месте.

Подскажите пожалуйста как из других файлов информацию вытащить?


+ вот так


declare @all_files varchar(512)
	
select 
       @all_files=convert(varchar(512),value)
from sys.fn_trace_getinfo(DEFAULT)
where traceid = 1 
and property = 2

select @all_files=left(@all_files,len(@all_files)-charindex('_',reverse(@all_files)))+right(@all_files,4)

-- o-o's query 
select te.name
         ,tsv.subclass_name
         ,tr.*
from sys.traces st 
     cross apply sys.fn_trace_gettable(@all_files, default) tr 
	 join sys.trace_events te 
	    on te.trace_event_id = tr.EventClass 
     join sys.trace_subclass_values tsv 
	    on tsv.trace_event_id = tr.EventClass and tsv.subclass_value = tr.EventSubClass
where st.is_default = 1 
and name in ('Hash Warning', 'Sort Warnings')






Большое спасибо, комрад!
7 авг 17, 18:31    [20706397]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли постфактум выяснить что явилось причиной...  [new]
komrad
Member

Откуда:
Сообщений: 5244
АндрейИванов

Большое спасибо, комрад!


+ а вот этим запросом можно посмотреть, что вообще есть в default trace на данный момент:


[sql]

declare @all_files varchar(512)

select @all_files=convert(varchar(512),value)
from sys.fn_trace_getinfo(DEFAULT)
where traceid = 1
and property = 2

select @all_files=left(@all_files,len(@all_files)-charindex('_',reverse(@all_files)))+right(@all_files,4)

select
tc.name [EventCategory]
, te.name [EventDesc]
, count(1) [Events]
, min(ft.StartTime) [FirstEvent]
, max(ft.StartTime) [LastEvent]
FROM sys.traces t CROSS Apply
::fn_trace_gettable(@all_files, t.max_files) AS ft
INNER JOIN sys.trace_events AS te ON ft.EventClass = te.trace_event_id
INNER JOIN sys.trace_categories tc on te.category_id=tc.category_id
where
t.is_default=1
and t.status=1
group by tc.name, te.name
order by 1,2;


[/sql]

7 авг 17, 19:02    [20706462]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить