Автор Тема: MS SQL 2008, найти кто его так грузит?  (Прочитано 6409 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Онлайн Triangle

  • Модераторы
  • Олдфаг
  • *****
  • Сообщений: 7128
  • Рейтинг: 48
  • Пол: Мужской
  • Откуда: замкадыш
MS SQL 2008, найти кто его так грузит?
« : 10 октября 2016, 13:42:23 »
Подскажите пожалуйста, методику поиска виновника загрузки SQL?

Дело в том что иногда он начинает выжирать процессор до упора.
Какие базы на нем есть.
1. Клиент-серверная 1С8.2
2. Access
3. Касперский.

Подозреваемый номер раз в списке это Access, програмер даже без пыток сознался что там порой таакой длинны могут быть запросы... Но надо быть уверенным.


Updated: 10 October 2016, 13:54:53

SELECT * FROM :: fn_virtualfilestats(-1, -1)

Ок а кто бы мог пояснить расшифровку?

Нашел более простой, потыкаем, автоматизировать бы как.

SELECT LEFT(CASE database_id
   WHEN 32767 THEN 'ResourceDb'
   ELSE db_name(database_id)
        END, 20) AS Database_Name,
 count(*)AS Buffered_Page_Count,
 cast(count(*) * 8192. / (1024 * 1024) as bigint) as Buffer_Pool_MB
FROM sys.dm_os_buffer_descriptors
GROUP BY db_name(database_id) ,database_id
ORDER BY Buffered_Page_Count DESC
« Последнее редактирование: 10 октября 2016, 13:54:53 от Triangle »
Тетрис научил нас жизненно важному пониманию, успехи исчезают, ошибки накапливаются.

Оффлайн ds0m

  • Ветеран
  • *****
  • Сообщений: 1299
  • Рейтинг: 22
  • Пол: Мужской
    • ds0m.spb@gmail.com
    • Просмотр профиля
  • Откуда: DC
MS SQL 2008, найти кто его так грузит?
« Ответ #1 : 10 октября 2016, 13:55:52 »
Triangle, профайлер запусти и погляди.
<root> помимо принципа "работает - не трогай", есть ещё один важный принцип - "бритва Оккама" - "не приумножай сущность сверх необходимости"
А спонсор этого поста - прививка от бешенства. Прививка от бешенства - не твоя, вот ты и бесишься.

Онлайн Triangle

  • Модераторы
  • Олдфаг
  • *****
  • Сообщений: 7128
  • Рейтинг: 48
  • Пол: Мужской
  • Откуда: замкадыш
MS SQL 2008, найти кто его так грузит?
« Ответ #2 : 10 октября 2016, 14:07:26 »
Ок, запущу, вот ещё вкусное и очень внятное кстати.

SELECT es.session_id
    ,es.program_name
    ,es.login_name
    ,es.nt_user_name
    ,es.login_time
    ,es.host_name
    ,es.cpu_time
    ,es.total_scheduled_time
    ,es.total_elapsed_time
    ,es.memory_usage
    ,es.logical_reads
    ,es.reads
    ,es.writes
    ,st.text
FROM sys.dm_exec_sessions es
    LEFT JOIN sys.dm_exec_connections ec
        ON es.session_id = ec.session_id
    LEFT JOIN sys.dm_exec_requests er
        ON es.session_id = er.session_id
    OUTER APPLY sys.dm_exec_sql_text (er.sql_handle) st
WHERE es.session_id > 50    -- < 50 system sessions
ORDER BY es.cpu_time DESC
Тетрис научил нас жизненно важному пониманию, успехи исчезают, ошибки накапливаются.

Оффлайн airdwarf

  • Постоялец
  • ***
  • Сообщений: 371
  • Рейтинг: 7
  • Пол: Мужской
    • Просмотр профиля
  • Откуда: Чесслово, нашел, гражданин начальник!
MS SQL 2008, найти кто его так грузит?
« Ответ #3 : 11 октября 2016, 09:26:22 »
Вот этим в кэш планов посмотри:
SELECT TOP 20 SUBSTRING(qt.TEXT, (qs.statement_start_offset/2)+1,
((CASE qs.statement_end_offset
WHEN -1 THEN DATALENGTH(qt.TEXT)
ELSE qs.statement_end_offset
END - qs.statement_start_offset)/2)+1),
qs.execution_count,
qs.total_logical_reads, qs.last_logical_reads,
qs.total_logical_writes, qs.last_logical_writes,
qs.total_worker_time,
qs.last_worker_time,
qs.total_elapsed_time/1000000 total_elapsed_time_in_S,
qs.last_elapsed_time/1000000 last_elapsed_time_in_S,
qs.last_execution_time,
qp.query_plan
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp
ORDER BY qs.total_worker_time DESC -- CPU time

Распределение нагрузки CPU по БД:
WITH DB_CPU_Stats
AS
(SELECT DatabaseID, DB_Name(DatabaseID) AS [DatabaseName], SUM(total_worker_time) AS [CPU_Time_Ms]
 FROM sys.dm_exec_query_stats AS qs
 CROSS APPLY (SELECT CONVERT(int, value) AS [DatabaseID]
              FROM sys.dm_exec_plan_attributes(qs.plan_handle)
              WHERE attribute = N'dbid') AS F_DB
 GROUP BY DatabaseID)
SELECT ROW_NUMBER() OVER(ORDER BY [CPU_Time_Ms] DESC) AS [row_num],
       DatabaseName, [CPU_Time_Ms],
       CAST([CPU_Time_Ms] * 1.0 / SUM([CPU_Time_Ms]) OVER() * 100.0 AS DECIMAL(5, 2)) AS [CPUPercent]
FROM DB_CPU_Stats
WHERE DatabaseID > 4 -- system databases
AND DatabaseID <> 32767 -- ResourceDB
ORDER BY row_num OPTION (RECOMPILE);




Updated: 11 October 2016, 09:27:51

вот ещё вкусное и очень внятное
Но напрочь бесполезное, ибо нужно подрываться и давить F5 в момент проявления нагрузки


Updated: 11 October 2016, 09:29:53

Нашел более простой, потыкаем
У тебя загрузка по CPU, а не по IO, что ты забыл в распределении буферного пула?
Нет, по косвенным признакам можно, конечно, о чем-то догадаться, но зачем, если есть sys.dm_exec_query_stats?
Кто чувствует несвободу воли, тот душевнобольной; кто отрицает ее, тот глуп. Один я умный в белом пальто стою красивый.
Вы тут серьёзно отстали от жизни. Админство, саппорт - это уже вчерашний день. Сейчас рулят микросервисная архитектура и continuous integration. Ну еще SAAS, конечно.

Онлайн Triangle

  • Модераторы
  • Олдфаг
  • *****
  • Сообщений: 7128
  • Рейтинг: 48
  • Пол: Мужской
  • Откуда: замкадыш
MS SQL 2008, найти кто его так грузит?
« Ответ #4 : 11 октября 2016, 19:00:12 »
ибо нужно подрываться и давить F5 в момент проявления нагрузки
А я програмера запряг, ему всё равно скушна :), да и пики длятся не секунды.



Updated: 11 October 2016, 19:00:52

Личку видел, спасибо, руки ишшо не дошли, трэш и угар после переезда.
Тетрис научил нас жизненно важному пониманию, успехи исчезают, ошибки накапливаются.

Оффлайн airdwarf

  • Постоялец
  • ***
  • Сообщений: 371
  • Рейтинг: 7
  • Пол: Мужской
    • Просмотр профиля
  • Откуда: Чесслово, нашел, гражданин начальник!
MS SQL 2008, найти кто его так грузит?
« Ответ #5 : 11 октября 2016, 21:16:32 »
А я програмера запряг, ему всё равно скушна
Дешевый биллинг - негр, читающий tcpdump!  :idea:
Кто чувствует несвободу воли, тот душевнобольной; кто отрицает ее, тот глуп. Один я умный в белом пальто стою красивый.
Вы тут серьёзно отстали от жизни. Админство, саппорт - это уже вчерашний день. Сейчас рулят микросервисная архитектура и continuous integration. Ну еще SAAS, конечно.