Вставить результат нескольких операторов Select в одну таблицу в соответствующих столбцах - PullRequest
0 голосов
/ 25 мая 2019

Я работаю над сборкой статистики 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))

Вот набор результатов запроса:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...