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

Откуда:
Сообщений: 14
Доброго времени суток, коллеги!
Подскажите пожалуйста как вычислить ТОП10 наиболее часто используемых таблиц в БД и самые "жирные" запросы? Интуитивно впервые запустил профилировщик, но как получить ответы на два своих вопроса непонятно...
11 июл 17, 10:02    [20632013]     Ответить | Цитировать Сообщить модератору
 Re: Вычислить наиболее часто используемые таблицы БД  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 33261
Блог
-- статистика по операциям в БД
SELECT t.name AS [TableName],
       fi.page_count AS [Pages],
       fi.record_count AS [Rows],
       CAST(fi.avg_record_size_in_bytes AS int) AS [AverageRecordBytes],
       CAST(fi.avg_fragmentation_in_percent AS int) AS [AverageFragmentationPercent],
       SUM(iop.leaf_insert_count) AS [Inserts],
       SUM(iop.leaf_delete_count) AS [Deletes],
       SUM(iop.leaf_update_count) AS [Updates],
       SUM(iop.row_lock_count) AS [RowLocks],
       SUM(iop.page_lock_count) AS [PageLocks]
  FROM sys.dm_db_index_operational_stats(DB_ID(),NULL,NULL,NULL) AS iop
  JOIN sys.indexes AS i ON iop.index_id = i.index_id AND
                           iop.object_id = i.object_id
  JOIN sys.tables AS t ON i.object_id = t.object_id AND
                          i.type_desc IN ('CLUSTERED', 'HEAP')
  JOIN sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, 'SAMPLED') AS fi ON fi.object_id=t.object_id AND
                                                                                     fi.index_id=i.index_id
  GROUP BY t.name, fi.page_count, fi.record_count, fi.avg_record_size_in_bytes, fi.avg_fragmentation_in_percent
  ORDER BY [RowLocks] desc



-- запросы с высокими издержками на ввод-вывод
SELECT TOP 10
       [Average IO] = (total_logical_reads + total_logical_writes) / qs.execution_count,
       [Total IO] = (total_logical_reads + total_logical_writes),
       [Execution count] = qs.execution_count,
       [Individual Query] = SUBSTRING (qt.text,qs.statement_start_offset/2, (CASE
                                                                               WHEN qs.statement_end_offset = -1 THEN LEN(CONVERT(NVARCHAR(MAX), qt.text)) * 2 
                                                                               ELSE qs.statement_end_offset
                                                                             END - qs.statement_start_offset)/2),
       [Parent Query] = qt.text,
       [DatabaseName] = DB_NAME(qt.dbid)
  FROM sys.dm_exec_query_stats qs
  CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) as qt
  ORDER BY [Average IO] DESC
  

-- запросы с высоким использованием ресурсов ЦП
SELECT TOP 10
       [Average CPU used] = total_worker_time / qs.execution_count,
       [Total CPU used] = total_worker_time,
       [Execution count] = qs.execution_count,
       [Individual Query] = SUBSTRING(qt.text,qs.statement_start_offset/2, 
         (CASE
            WHEN qs.statement_end_offset = -1 THEN LEN(CONVERT(NVARCHAR(MAX), qt.text)) * 2 
            ELSE qs.statement_end_offset
          END - qs.statement_start_offset)/2),
       [Parent Query] = qt.text,
       [DatabaseName] = DB_NAME(qt.dbid)
  FROM sys.dm_exec_query_stats qs
  CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) as qt
  ORDER BY [Average CPU used] DESC;


-- запросы, страдающие от блокировки
SELECT TOP 10
       [Average Time Blocked] = (total_elapsed_time - total_worker_time) / qs.execution_count,
       [Total Time Blocked] = total_elapsed_time - total_worker_time,
       [Execution count] = qs.execution_count,
       [Individual Query] = SUBSTRING (qt.text,qs.statement_start_offset/2, 
         (CASE
            WHEN qs.statement_end_offset = -1 THEN LEN(CONVERT(NVARCHAR(MAX), qt.text)) * 2 
            ELSE qs.statement_end_offset
          END - qs.statement_start_offset)/2),
       [Parent Query] = qt.text,
       [DatabaseName] = DB_NAME(qt.dbid)
  FROM sys.dm_exec_query_stats qs
  CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) as qt
  ORDER BY [Average Time Blocked] DESC;
11 июл 17, 10:08    [20632053]     Ответить | Цитировать Сообщить модератору
 Re: Вычислить наиболее часто используемые таблицы БД  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
SQLcoder,
автор
Подскажите пожалуйста как вычислить ТОП10 наиболее часто используемых таблиц

sys.dm_db_index_usage_stats
автор
и самые "жирные" запросы?

ну например activity monitor или уточнить что такое "жирность запроса"
11 июл 17, 10:09    [20632059]     Ответить | Цитировать Сообщить модератору
 Re: Вычислить наиболее часто используемые таблицы БД  [new]
SQLcoder
Member

Откуда:
Сообщений: 14
TaPaK
SQLcoder,
автор
Подскажите пожалуйста как вычислить ТОП10 наиболее часто используемых таблиц

sys.dm_db_index_usage_stats
автор
и самые "жирные" запросы?

ну например activity monitor или уточнить что такое "жирность запроса"


Значит те запросы, которые долго выполняются
11 июл 17, 10:19    [20632083]     Ответить | Цитировать Сообщить модератору
 Re: Вычислить наиболее часто используемые таблицы БД  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
SQLcoder
TaPaK
SQLcoder,
пропущено...

sys.dm_db_index_usage_stats
пропущено...

ну например activity monitor или уточнить что такое "жирность запроса"


Значит те запросы, которые долго выполняются

а, у вас тоже поиск/гугл забанен
https://www.sql.ru/blogs/decolores/946
11 июл 17, 10:21    [20632091]     Ответить | Цитировать Сообщить модератору
 Re: Вычислить наиболее часто используемые таблицы БД  [new]
SQLcoder
Member

Откуда:
Сообщений: 14
SQLcoder
вычислить ТОП10 наиболее часто используемых таблиц в БД


Спасибо за запросы, но всё таки как вычислить топ10 загруженных таблиц?
11 июл 17, 10:28    [20632127]     Ответить | Цитировать Сообщить модератору
 Re: Вычислить наиболее часто используемые таблицы БД  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
SQLcoder
SQLcoder
вычислить ТОП10 наиболее часто используемых таблиц в БД


Спасибо за запросы, но всё таки как вычислить топ10 загруженных таблиц?

папа, а де море?(с)
11 июл 17, 10:36    [20632167]     Ответить | Цитировать Сообщить модератору
 Re: Вычислить наиболее часто используемые таблицы БД  [new]
SQLcoder
Member

Откуда:
Сообщений: 14
TaPaK
SQLcoder
пропущено...


Спасибо за запросы, но всё таки как вычислить топ10 загруженных таблиц?

папа, а де море?(с)

Что бы это значило на исконно русском языке...
11 июл 17, 11:05    [20632302]     Ответить | Цитировать Сообщить модератору
 Re: Вычислить наиболее часто используемые таблицы БД  [new]
SQLcoder
Member

Откуда:
Сообщений: 14
Делаю трассировку профайлером по сервисному пользователю БД, максимальный Duration у EventClass - Logout, может кто сказать что это может значить?

К сообщению приложен файл. Размер - 127Kb
11 июл 17, 11:24    [20632375]     Ответить | Цитировать Сообщить модератору
 Re: Вычислить наиболее часто используемые таблицы БД  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
SQLcoder,
держи, человек без гугла
https://docs.microsoft.com/en-us/sql/relational-databases/event-classes/audit-logout-event-class
11 июл 17, 11:31    [20632415]     Ответить | Цитировать Сообщить модератору
 Re: Вычислить наиболее часто используемые таблицы БД  [new]
впрыарт
Guest
Критик
-- запросы, страдающие от блокировки

ожидания - это не блокировки
11 июл 17, 11:35    [20632436]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить