Optymalizacja zapytań w SQL Server

1 Optymalizacja zapytań w SQL ServerRoman Czarko-Wasiutyc...
Author: Adrian Góra
0 downloads 3 Views

1 Optymalizacja zapytań w SQL ServerRoman Czarko-Wasiutycz

2 Roman Czarko-WasiutyczOd kilkunastu lat zbieram doświadczenia związane z technologiami Microsoftu. Począwszy od developera C++, PHP, C#, administratora SharePoint poprzez administrację bazami Microsoft SQL Server na projektowaniu i rozwijaniu dużych hurtowni danych kończąc. Posiadacz tytułów: MCTS, MCSA: SQL Server 2012, MCSE: BI oraz MCSE: Data Management and Analytics Członek Zarządu Stowarzyszenia Użytkowników SQL Server PLSSUG Wolontariusz oraz współorganizator konferencji SQLDay , SQLDay Lite, SQLSaturday i innych. Lider Wrocławskiego oddziału Stowarzyszenia PLSSUG Prywatnie fan gier komputerowych :)

3 Proces wykonania i operatory Demo NarzędziaAgenda Indeksy Proces wykonania i operatory Demo Narzędzia

4 Indeksy Jak działają indeksy Gdzie w indeksie są dane?Z czym wiąże się zbyt duża liczba indeksów Indeksy w OLTP i DWH Jak typować kolumny do indeksowania

5 CREATE CLUSTERED INDEX [CX_Id] ON [dbo].[Acount] ([Id] ASC)CREATE NONCLUSTERED INDEX [IX_accountNumber_bankName] ON [dbo].[Account] ( [accountNumber] ASC, [bankSymbol] ASC ) INCLUDE ( [bankName]); 8K DANE W CI ! CI / NCI

6 Indeksy – jak typować kolumnyJak będzie wyglądał dostęp do danych, jak wstawianie nowych wierszy? Używane w klauzulach WHERE, JOIN, ORDER BY, GROUP BY – zwróć uwagę na SELECT Dane unikalne lub z dużą różnorodnością Dane w kolumnie są sekwencyjne (Clustered!) Stałe, niezmienne dane w kolumnie indeksowanej Małe typy danych Ilość indeksów dostosuj do charakteru tabeli

7 Proces wykonania Operatory budujące drzewo wykonaniaŻądania nowych danych płyną w „dół i prawo” drzewa od pierwszego elementu Dane w odpowiedzi na żądania płyną w „górę i w lewo” Podstawowe metody komunikacji pomiędzy operatorami: Init, GetNext, Close https://msdn.microsoft.com/en-us/library/ms aspx

8 Operatory – na co zwrócić uwagę?Operatory alokujące pamięć – alokują pamięć na podstawie statystyk przed wykonaniem zapytania – np. sort, hash aggregate, and hash join Operatory blokujące – muszą odczytać wszystkie wiersze, żeby przekazać rezultat dalej np. sort, count, min, max… Operatory nie blokujące – po odczytaniu i przetworzeniu wiersza przekazują wynik działania dalej np. compute scalar https://blogs.msdn.microsoft.com/craigfr/2006/06/19/properties-of-iterators/

9 DEMO

10 PLSSUG Polish SQL Server User Group http://plssug.org.pl

11 Jeśli masz pytanie to jest dobry czas, żeby je zadać 

12 Źródła https://technet.microsoft.com/en-us/library/ms187373(v=sql.105).aspx https://www.youtube.com/watch?v=GSZPvF2u6WY https://www.youtube.com/watch?v=lxdDg2F0hfs https://sqlperformance.com/2012/07/t-sql-queries/running-totals https://technet.microsoft.com/en-us/library/ sqlquery.aspx https://technet.microsoft.com/en-us/library/bb510478(v=sql.105).aspx

13 Dziękuję za uwagę  Abstrakt:Wielokrotnie podczas pracy z SQLServer spotykamy się z zapytaniami,  które na pierwszy rzut oka wyglądają całkiem niewinnie. Niestety ich  wydajność często jest mocno niezadowalająca. Na sesji przypomnę kilka  rzeczy o indeksach i dostępie do danych, zapoznamy się z przykładami  zapytań oraz pomyślimy jak możemy je zmodyfikować, aby otrzymać wyniki  szybciej i mniejszym kosztem. Oprócz tego poruszymy temat strategii  indeksowania -  co i w jaki sposób warto indeksować, żeby poprawić  wydajność a jednocześnie jak najmniej z tej wydajności stracić przy  wstawianiu danych.