Я работаю над сборкой статистики SQL Server для планирования обновления.Я нашел несколько хороших запросов и изменил их, чтобы соответствовать моим требованиям.Я хотел бы добавить результат каждого запроса в таблицу (SQLSTATS), где результат будет помещен в соответствующие столбцы.Я планирую запускать эти запросы каждые N минут через задание агента SQL для сбора данных.Я представлю результаты, чтобы решить, нужно ли нам переходить на оптимизированные для дисков, оптимизированные для процессора, оптимизированные для памяти или оптимизированные для сети серверы.Любая помощь или руководство будут оценены.
Запросы приведены ниже:
--Disk I/O
SELECT
wait_time_ms/waiting_tasks_count AS 'PAGEIOLATCH_SH'
FROM
sys.dm_os_wait_stats
WHERE
waiting_tasks_count > 0
and wait_type = 'PAGEIOLATCH_SH'
ORDER BY
wait_time_ms DESC
SELECT
wait_time_ms/waiting_tasks_count AS 'PAGEIOLATCH_SH'
FROM
sys.dm_os_wait_stats
WHERE
waiting_tasks_count > 0
and wait_type = 'PAGEIOLATCH_EX'
ORDER BY
wait_time_ms DESC
SELECT
wait_time_ms/waiting_tasks_count AS 'PAGEIOLATCH_UP'
FROM
sys.dm_os_wait_stats
WHERE
waiting_tasks_count > 0
and wait_type = 'PAGEIOLATCH_UP'
ORDER BY
wait_time_ms DESC
--Network
SELECT st.text AS [SQL_Text],
w.wait_type AS [Wait_Type]
FROM sys.dm_os_waiting_tasks AS w
INNER JOIN sys.dm_exec_connections AS c ON w.session_id = c.session_id
CROSS APPLY (SELECT * FROM sys.dm_exec_sql_text(c.most_recent_sql_handle))
AS st WHERE w.session_id > 50
AND w.wait_duration_ms > 0
AND WAIT_Type='ASYNC_NETWORK_IO'
--CPU
DECLARE @ts BIGINT;
DECLARE @lastNmin TINYINT;
SET @lastNmin = 1;
SELECT @ts =(SELECT cpu_ticks/(cpu_ticks/ms_ticks) FROM sys.dm_os_sys_info);
SELECT TOP(@lastNmin)
SQLProcessUtilization AS [SQLServer_CPU_Utilization]
FROM (SELECT record.value('(./Record/@id)[1]','int')AS record_id,
record.value('(./Record/SchedulerMonitorEvent/SystemHealth/SystemIdle)[1]','int')AS [SystemIdle],
record.value('(./Record/SchedulerMonitorEvent/SystemHealth/ProcessUtilization)[1]','int')AS [SQLProcessUtilization],
[timestamp]
FROM (SELECT[timestamp], convert(xml, record) AS [record]
FROM sys.dm_os_ring_buffers
WHERE ring_buffer_type =N'RING_BUFFER_SCHEDULER_MONITOR'AND record LIKE'%%')AS x )AS y
ORDER BY record_id DESC;
Я провел несколько интенсивных поисков в Интернете, но не смог найти ответов, связанных с моей проблемой.Я попытался вставить результат запроса в переменную, а затем из переменной в таблицу -> столбец.Это не сработало.См. Код ниже:
Declare @PAGEIOLATCH_SH Nvarchar(50)
--IO Disk
SET @PAGEIOLATCH_SH = (SELECT
wait_time_ms/waiting_tasks_count AS 'PAGEIOLATCH_SH'
FROM
sys.dm_os_wait_stats
WHERE
waiting_tasks_count > 0
and wait_type = 'PAGEIOLATCH_SH')
PRINT @PAGEIOLATCH_SH
Select @PAGEIOLATCH_SH INTO SQLSTATS (pageiolatch_sh))
Вот набор результатов запроса: