Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
люблю скл Member Откуда: Сообщений: 76 |
Доброе утро. Скажите, почему tempdb начинает рости, когда в ней unallocated space около 20 Гб запас? Стал мониторить рост tempdb, и записываю в табличку каждые 3 минуты значение SELECT (SELECT (SUM(unallocated_extent_page_count)*1.0/128) FROM sys.dm_db_file_space_usage) free_space_in_MB, (SELECT SUM(size)*1.0/128 AS [size in MB] FROM tempdb.sys.database_files) total_space_in_MB Скрипт выше показывает свободного места столько же сколько и этот скрипт: use tempdb go sp_spaceused @updateusage = 'TRUE' Однако заметил что рост tempdb начинается даже когда unallocated space около 20Гб (это 50% от общего объема tempdb). Почему так? Может быть я размер свободного места неправельно определяю? |
9 авг 17, 10:37 [20710146] Ответить | Цитировать Сообщить модератору |
люблю скл Member Откуда: Сообщений: 76 |
Причем, даже когда tempdb заполонила все место на диске и выдает ошибку что не может больше рости - unallocated space все равно показывает 15 Гб в запросе. |
9 авг 17, 10:49 [20710182] Ответить | Цитировать Сообщить модератору |
люблю скл Member Откуда: Сообщений: 76 |
Microsoft SQL Server 2012 (SP3-GDR) (KB3194721) - 11.0.6248.0 (X64) Enterprise Edition: Core-based Licensing (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) |
9 авг 17, 10:50 [20710185] Ответить | Цитировать Сообщить модератору |
LSV Member [заблокирован] Откуда: Киев Сообщений: 30817 |
Этот мониторинг неточный. Он не пересчитывает после каждого чиха все цифры. |
9 авг 17, 10:57 [20710199] Ответить | Цитировать Сообщить модератору |
люблю скл Member Откуда: Сообщений: 76 |
А как сделать точный? updateusage? |
||
9 авг 17, 10:58 [20710205] Ответить | Цитировать Сообщить модератору |
люблю скл Member Откуда: Сообщений: 76 |
Неужели ни кто не знает? |
9 авг 17, 11:26 [20710257] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
я вообще не смотрю на свободное место, у нас у темпдб потолок 100Гб. а переполнятелей темпдб и даже просто тех, кто чересчур расходует, я ловлю через такое select session_id, cast(sum(internal_objects_alloc_page_count) * 8. /1024 /1024 as decimal(10,2))as internal_objects_alloc_Gb, cast(sum(internal_objects_dealloc_page_count) * 8. /1024 /1024 as decimal(10,2))as internal_objects_dealloc_Gb, cast(sum(user_objects_alloc_page_count) * 8. /1024 /1024 as decimal(10,2))as user_objects_alloc_Gb, cast(sum(user_objects_dealloc_page_count) * 8. /1024 /1024 as decimal(10,2))as user_objects_dealloc_Gb, cast(sum(internal_objects_alloc_page_count - internal_objects_dealloc_page_count) * 8. /1024 /1024 as decimal(10,2))as internal_objects_diff_Gb, cast(sum(user_objects_alloc_page_count - user_objects_dealloc_page_count)* 8. /1024 /1024 as decimal(10,2)) as user_objects_diff_Gb from sys.dm_db_task_space_usage group by session_id having sum(internal_objects_alloc_page_count - internal_objects_dealloc_page_count + user_objects_alloc_page_count - user_objects_dealloc_page_count) /1024 > 1 этот код засунут во вью, а к нему уже джойню sys.dm_exec_sessions, etc. раз в 5 минут превышатели гига логируются в таблицу со стэйтментом и планом |
9 авг 17, 11:44 [20710310] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
ну и да, никто еще не смог переполнить темпдб незамеченным, ибо 5 минут на переполнение 100Гб маловато |
9 авг 17, 11:45 [20710314] Ответить | Цитировать Сообщить модератору |
люблю скл Member Откуда: Сообщений: 76 |
О, круто! |
||
9 авг 17, 12:25 [20710460] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8316 |
Использую такой запрос:select t.session_id, sum(t.user_objects_alloc_page_count - t.user_objects_dealloc_page_count + t.internal_objects_alloc_page_count - t.internal_objects_dealloc_page_count) * 8192/1024/1024 as [tempdb usage, MB], q.[text] sql_text, s.[host_name], s.[program_name], s.login_name, db_name(s.database_id) from_db from sys.dm_db_task_space_usage t left join sys.dm_exec_requests z on z.session_id=t.session_id left join sys.dm_exec_sessions s on s.session_id = t.session_id outer apply sys.dm_exec_sql_text(z.[sql_handle]) q where t.database_id = db_id('tempdb') group by t.session_id, q.[text], s.[host_name], s.[program_name], s.login_name, db_name(s.database_id) having sum(t.user_objects_alloc_page_count - t.user_objects_dealloc_page_count + t.internal_objects_alloc_page_count - t.internal_objects_dealloc_page_count) * 8192/1024/1024 > 0; |
9 авг 17, 12:29 [20710472] Ответить | Цитировать Сообщить модератору |
люблю скл Member Откуда: Сообщений: 76 |
Кстати, не знаете как получить корректно текст запроса? SELECT text FROM sys.dm_exec_sql_text(sp.sql_handle) Обычные DML и SELECT пишено нормально. Однако, при запуске процедуры, пишет не вызов процедуры с параметрами, а DDL создания процедуры. |
||
9 авг 17, 12:30 [20710475] Ответить | Цитировать Сообщить модератору |
люблю скл Member Откуда: Сообщений: 76 |
Вау. Круто. Однако процедуры показывает тоже как CREATE :) |
||
9 авг 17, 12:33 [20710482] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8316 |
люблю скл, DBCC INPUTBUFFER(SPID) |
9 авг 17, 12:34 [20710486] Ответить | Цитировать Сообщить модератору |
люблю скл Member Откуда: Сообщений: 76 |
А скажите, его как-нибудь можно в запрос вставить, чтобы он в селекте показывал? |
||
9 авг 17, 12:38 [20710494] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
select... [individual query] = substring(t.text , r.statement_start_offset / 2 + 1, ( case when r.statement_end_offset = - 1 then len(convert(nvarchar(max), t.text)) * 2 else r.statement_end_offset end - r.statement_start_offset ) / 2) from ...sys.dm_exec_requests r on s.session_id = r.session_id outer apply sys.dm_exec_sql_text(r.sql_handle) t s.session_id у вас есть во вью |
||
9 авг 17, 12:41 [20710499] Ответить | Цитировать Сообщить модератору |
люблю скл Member Откуда: Сообщений: 76 |
Большое спасибо! ![]() |
||||
9 авг 17, 12:46 [20710516] Ответить | Цитировать Сообщить модератору |
люблю скл Member Откуда: Сообщений: 76 |
Получается по свободному месту бесполезно в нагиос-мониторинг темпДБ ставить. Надо по sum(t.user_objects_alloc_page_count - t.user_objects_dealloc_page_count + t.internal_objects_alloc_page_count - t.internal_objects_dealloc_page_count) |
9 авг 17, 12:58 [20710552] Ответить | Цитировать Сообщить модератору |
люблю скл Member Откуда: Сообщений: 76 |
Еще раз спасибо. |
9 авг 17, 12:58 [20710556] Ответить | Цитировать Сообщить модератору |
люблю скл Member Откуда: Сообщений: 76 |
В продолжение темы вопрос: Кончилось место в tempdb. На момент, когда оно кончилось, запрос: SELECT session_id, SUM(internal_objects_alloc_page_count) AS request_internal_objects_alloc_page_count FROM sys.dm_db_task_space_usage WHERE internal_objects_alloc_page_count>0 GROUP BY session_id, request_id Показывал всего несколько небольших значений, самое большое было 10 000, это примерно 78Мб. При этом темпдб выросла до 50Гб и в приложении была ошибка что она не может расти дальше. Подскажите, как такое может быть что sys.dm_db_task_space_usage показывает загрузку tempdb около 100Mb, а в реальности загрузка в 500 раз больше? |
9 авг 17, 15:47 [20711191] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
еще бы: когда место закончилось, кому-то вывалилась об этом ошибка и его транзакция была откачена. вернее, так: всем попавшим под раздачу в тот момент ошибка вывалилась. их запросы с посяганием на темпдб были откачены. что же можно увидеть, когда уже ничего нет? надо в джоб сложить логирование в таблицу всех тех, кто перерасходует темпдб. и вот когда место закончилось, читать лог, а не смотреть в темпдб, в котором уже места полно |
9 авг 17, 15:52 [20711216] Ответить | Цитировать Сообщить модератору |
люблю скл Member Откуда: Сообщений: 76 |
Совершенно верно, информация о заполнении логируется каждую минуту. Именно оттуда я взял эти данные. Т.е. за пол часа до переполнения, и во время переполнения sys.dm_db_task_space_usage показывает что сесии в общей сложности занимают около 100Мб из 50Гб. |
||
9 авг 17, 16:10 [20711289] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
так раз в минуту или раз в полчаса? |
||
9 авг 17, 16:18 [20711319] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
ну и ошибку покажите. а то вдруг ищете переполнение дата файла, а переполняется лог |
9 авг 17, 16:21 [20711334] Ответить | Цитировать Сообщить модератору |
люблю скл Member Откуда: Сообщений: 76 |
раз в минуту. |
||||
9 авг 17, 16:28 [20711359] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
вот например был замечательный запрос с group by. он полчаса сортировал, затем отвалился с ожибкой переполнения. но не за минуту ж он 100Гб переполнил К сообщению приложен файл. Размер - 26Kb |
9 авг 17, 16:31 [20711366] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
Все форумы / Microsoft SQL Server | ![]() |