Archive for February, 2012
SQL Server 2012 – Nowinki w planach wykonania
Feb 14th
Ostatnimi czasy bardzo dużo mówię o funkcjonalnościach SQL Server 2012, którego premiera zbliża się wielkimi krokami (na razie, w oczekiwaniu na wersję RTM produktu, warto wziąć udział w pewnym wirtualnym wydarzeniu). I tak, demonstruję m.in. AlwaysOn (arcyciekawe nowe podejście do wysokiej dostępności), ColumnStore Index (“turbo boost” dla zapytań wykonywanych na hurtowni danych) czy Power View (nowe podejście do interaktywnego raportowania). Ale oprócz kluczowych funkcjonalności, spośród których niektóre wymieniłem, są też takie, które umykają naszej uwadze.
Jedną z takich funkcjonalności jest nowinka w planach wykonania – ostrzeżenia przed operacjami wykonywanymi w bazie tempdb. Chodzi o scenariusze, gdy podczas wykonywania zapytania grant pamięci dla wykonywanych operacji typu Sort lub Hash jest zbyt mały, by operacja mogła być wykonana w pamięci i SQL Server dokonuje zrzutu danych do bazy tempdb.
Zobaczmy przykład (zapożyczony częściowo od Ramesha Meyyappan):
IF OBJECT_ID('tempdb.dbo.#T') IS NOT NULL DROP TABLE #T; GO --Tworzymy tabelę CREATE TABLE #T ( ID int IDENTITY(1,1) NOT NULL PRIMARY KEY, Name char(1000) NOT NULL, Size int NOT NULL ); GO --Wstawiamy 10k wierszy INSERT INTO #T (Name, Size) SELECT 'Item ' + CONVERT(varchar(10), v2.number) + '(' + CONVERT(varchar(10), v1.number) + ')', v1.number FROM master.dbo.spt_values AS v1, master.dbo.spt_values AS v2 WHERE v1.type = 'P' AND v2.type = 'P' AND v1.number BETWEEN 1 AND 10 AND v2.number BETWEEN 1 AND 1000; GO --Upewniamy się, że statystyki są aktualne UPDATE STATISTICS #T WITH FULLSCAN; GO --Testowe zapytanie (Sort w tempdb) SELECT * FROM #T WHERE ID <= 7000 ORDER BY Size OPTION (MAXDOP 1); GO
Przed wykonaniem ostatniego polecenia (SELECT) włączamy pokazywanie planu wykonania i naszym oczom ukazuje się coś takiego:
Uwagę przykuwa znaczek ostrzeżenia na ikonie operatora Sort. Gdy najedziemy myszką na ów operator, pokazuje się karta właściwości, a na niej:
Otrzymujemy jasną przesłankę, że operacja została wykonana z użyciem tempdb. Analogiczne ostrzeżenia możemy dostać w przypadku wystąpienia operatora Hash. Do tej pory takie ostrzeżenia można było przechwycić w aplikacji SQL Server Profiler (przy założeniu, że włączyliśmy w trace zdarzenia Sort Warning i Hash Warning). Niby niewiele, a jednak ta nowinka cieszy, bo może oszczędzić sporo czasu poświęconego na zastanawianie się, czemu zapytanie wykonuje się dłużej niż oczekujemy, choć plan wykonania wygląda w porządku. Dla mnie bomba :-)
PS. W miarę możliwości postaram się w niedługim czasie napisać coś o wspomnianych kluczowych funkcjonalnościach SQL Server 2012. Stay tuned!

Nazywam się Paweł Potasiński i pracuję w polskim oddziale Microsoft w dziale Small and Midmarket Solutions & Partners (SMS&P) jako Partner Technology Advisor.




