Временна́я статистика

Повышение производительности запросов в SQL Server

Dean Smith

Founder, Atamai Analytics

SQL Server Management Studio

 

Экран загрузки SQL Server Management Studio

Повышение производительности запросов в SQL Server

STATISTICS TIME в SSMS

SELECT UNStatisticalRegion, 
        CountryName,
        Capital
FROM Nations
WHERE Capital IN 
        (SELECT CityName 
        FROM Cities)
            AND Capital IN 
                (SELECT CityName 
                    FROM Cities 
                    WHERE Pop2017 > 1000000);

STATISTICS TIME — команда выводит количество миллисекунд, необходимых для разбора, компиляции и выполнения запроса.

SQL Server parse and compile time: 
   CPU time = 16 ms, elapsed time = 21 ms.

(88 rows affected)

 SQL Server Execution Times:
   CPU time = 390 ms,  elapsed time = 382 ms.
Повышение производительности запросов в SQL Server

Время выполнения SQL Server

 SQL Server Execution Times:
   CPU time = 390 ms,  elapsed time = 382 ms.
  • Процессорное время (CPU time): время, затраченное процессорами сервера на обработку запроса
  • Затраченное время (Elapsed time): общая продолжительность выполнения запроса
Повышение производительности запросов в SQL Server

Пример: запрос 1

SELECT UNStatisticalRegion, 
       CountryName,
       Capital
FROM Nations
WHERE Capital IN 
        (SELECT CityName -- 1st sub-query
        FROM Cities) 
            AND Capital IN 
                (SELECT CityName -- 2nd sub-query
                 FROM Cities 
                 WHERE Pop2017 > 1000000); 
Повышение производительности запросов в SQL Server

Пример: запрос 1

SET STATISTICS TIME ON
SELECT UNStatisticalRegion, 
       CountryName,
       Capital
FROM Nations
WHERE Capital IN 
        (SELECT CityName -- 1st sub-query
        FROM Cities) 
            AND Capital IN 
                (SELECT CityName -- 2nd sub-query
                 FROM Cities 
                 WHERE Pop2017 > 1000000); 
SQL Server Execution Times:
   CPU time = 391 ms,  elapsed time = 381 ms.
Повышение производительности запросов в SQL Server

Пример: запрос 2

SELECT UNStatisticalRegion, 
       CountryName,
       Capital 
FROM Nations n
WHERE EXISTS 
    (SELECT 1 
     FROM  Cities c 
     WHERE n.Capital = c.CityName
        AND Pop2017 > 1000000);


SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 2 ms.
Повышение производительности запросов в SQL Server

Пример: запрос 2

SELECT UNStatisticalRegion, 
       CountryName,
       Capital 
FROM Nations n
WHERE EXISTS 
    (SELECT 1 
     FROM  Cities c 
     WHERE n.Capital = c.CityName
        AND Pop2017 > 1000000);
SET STATISTICS TIME OFF
SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 2 ms.
Повышение производительности запросов в SQL Server

Сравнение запросов

  • Первый запрос с двумя подзапросами
SELECT UNStatisticalRegion, 
       CountryName,
       Capital
FROM Nations
WHERE Capital IN 
        (SELECT CityName 
        FROM Cities)
            AND Capital IN 
                (SELECT CityName 
                 FROM Cities 
                 WHERE Pop2017 > 1000000);
SQL Server Execution Times:
   CPU time = 391 ms,  elapsed time = 381 ms.
  • Второй запрос с использованием EXISTS
SELECT UNStatisticalRegion, 
       CountryName,
       Capital 
FROM Nations n
WHERE EXISTS 
    (SELECT 1 
     FROM  Cities c 
     WHERE n.Capital = c.CityName
        AND Pop2017 > 1000000);
SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 2 ms.
Повышение производительности запросов в SQL Server

Затраченное время vs. процессорное время

Затраченное время (Elapsed time)

  • Может варьироваться при анализе временно́й статистики запроса
  • Наилучший показатель для определения самого быстрого запроса

Процессорное время (CPU time)

  • Должно незначительно меняться при анализе временно́й статистики
  • Может быть ненадёжным показателем, если процессоры сервера работают параллельно
Повышение производительности запросов в SQL Server

Вычисление среднего значения

  • Не полагайтесь на одно измерение — вычислите среднее значение.
elapsed time = 2032 ms.

elapsed time = 2060 ms.

elapsed time = 1915 ms.

elapsed time = 4009 ms.

elapsed time = 3511 ms.

Average elapsed time = 2705 ms.
Повышение производительности запросов в SQL Server

Давайте потренируемся!

Повышение производительности запросов в SQL Server

Preparing Video For Download...