Časová statistika

Improving Query Performance in SQL Server

Dean Smith

Founder, Atamai Analytics

SQL Server Management Studio

 

Úvodní obrazovka SQL Server Management Studio

Improving Query Performance in SQL Server

STATISTICS TIME v 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 – příkaz udává počet milisekund potřebných k analýze, kompilaci a provedení dotazu.

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.
Improving Query Performance in SQL Server

SQL Server Execution Times

 SQL Server Execution Times:
   CPU time = 390 ms,  elapsed time = 382 ms.
  • CPU time: čas, který procesory serveru věnují zpracování dotazu
  • Elapsed time: celková doba trvání dotazu
Improving Query Performance in SQL Server

Příklad: dotaz 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); 
Improving Query Performance in SQL Server

Příklad: dotaz 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.
Improving Query Performance in SQL Server

Příklad: dotaz 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.
Improving Query Performance in SQL Server

Příklad: dotaz 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.
Improving Query Performance in SQL Server

Porovnání dotazů

  • První dotaz obsahující dva poddotazy
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.
  • Druhý dotaz využívající 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.
Improving Query Performance in SQL Server

Elapsed time vs. CPU time

Elapsed time

  • Může se lišit při analýze časové statistiky dotazů
  • Nejlepší měřítko pro nejrychleji vykonávaný dotaz

CPU time

  • Při analýze časové statistiky by se měl měnit jen málo
  • Nemusí být užitečným měřítkem, pokud procesory serveru pracují paralelně
Improving Query Performance in SQL Server

Výpočet průměru

  • Nespoléhejte se na jedno měření – použijte průměr.
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.
Improving Query Performance in SQL Server

Lass uns üben!

Improving Query Performance in SQL Server

Preparing Video For Download...