«

»

May 04

Šta donosi SQL Server 2014?

Prvog aprila Microsoft je na tržište izbacio najnoviju verziju SQL Servera – 2014. Probna verzija može se preuzeti sa ove adrese.  Prethodna verzija raspoloživa je tek dve godine, a sva je prilika da se ni na sledeću neće čekati duže. U mnogim kompanijama još uvek je u upotrebi verzija 2008 ili 2008 R2 – jednostavno nije bilo vremena (ili potrebe) da se zahtevni process migracije za kratko vreme realizuje,a na vratima je već 2014-ca. No, o tome ćemo nekom drugom prilikom u nekom drugom postu. U ovome ćemo se pozabaviti novinama koje donosi SQL Server 2014, a u potonjim zalazićemo u detalje vezane za najznačajnije novine.

Nesumnjivo je da su glavni aduti najnovije verzije SQL Servera clustered columnstore indeksi i In-Memory XTP (Hekaton) koje mogu da donesu značajna poboljšanja u performansama (ukoliko se za njih pronađe odgovarajući use case), ali tu je i čitav niz malih novina ili promena koje zavređuju pažnju i mogu da budu značajne u svakodnevnom radu.

Kao i obično najbolji start za proučavanje novosti je SQL Server Books Online. Na stranici What’s New (Database Engine) izlistane su sve novine i promene u vezi sa database engine u SQL Server 2014.

Clustered columnstore indeksi

Columnstore indeksi stigli su sa verzijom SQL Server 2012 i njihovom upotrebom značajno su poboljšane performanse “star” upita tipičnih za DWH sisteme sa ogromnim fact tabelama. Kompresija podataka i procesiranje u batch modu doneli su pojedinim upitima i do 10-20x bolje performanse. Međutim, kao i kod većine novih komponenti prva verzija je prepuna ograničenja i onemogućava punu primenu feature u svoj svojoj snazi. Tako je i u prvoj verziji tabela zapravo bila row-stored a samo je indeks nad tom tabelom mogao da bude kreiran i uskladišten po kolonama. Pored toga, tabela nije mogla da se ažurira ako poseduje CS indeks, pa je to stvaralo dodatne probleme i povećavalo značajno vreme za kreiranje indeksa (indeks mora da se ukloni i ponovo kreira nakon ažuriranja tabele).

U SQL Server 2014 tabela je uskladištena po kolonama, tako da je to sada pravi columnstore i pritom je moguće ažurirati tabelu transparentno. Pored toga poboljšane su performanse perecesiranja u batch modu, pa su svi koji su nestrpljivo očekivali eliminisanje ograničenja iz 2012. dočekali svojih pet minuta. Ja neću pisati detaljno o CS, ali zato najtoplije preporučujem seriju članaka o njima koju je napisao i još uvek piše SQL Server MVP i komjuniti guru iz Lisabona Niko Neugebauer (twitter | blog) na ovoj adresi.

In-Memory OLTP aka In-Memory XTP aka Hekaton

Taj troimeni feature (ne mogu da završim ovu rečenicu a da se u nju ne ušunja Petar Markov Jakovljević) postao je već pomalo kontroverzan. Neretko može da se nabasa na forumima kako se lome koplja za i protiv, te ispoljavaju oduševljenje, razočaranja i frustracije. Kodno ime za ovaj feature koji je intenzivno razvijan u Microsoftu poslednjih pet godina je Hekaton, a marketing je po svojoj prilici izabrao In-Memory XTP za zvanično ime. U svakom slučaju na ime otpada samo mali deo kontroverzi. U pitanju je potpuno novi pristup database developmentu koji SQL Serveru omogućava da manipulacijama podacima pristupa optimistički, za razliku od pesimističkog modela koji ga krasi od prve verzije.

In-Memory XTP engine je nova komponenta integrisana u SQL Server koja omogućava i do 30x bolje performanse za memory optimizovane tabele nego što je to slučaj sa istim neoptimizovanim tabelama. Ovaj iskaz je tačan za neke tabele, za neke workloade. Ne za sve. Hekatonizovanjem nekih SQL 2012 tabela ne samo da ne može da dodje do takvih poboljšanja nego čak dolazi do smanjivanja performansi. Upravo je to razlog za kontroverze koje prate ovu značajnu novinu. S o bzirom da ja radim kao database developer u kopaniji bwin koja je među prvima implementirala Hekaton u produkciji nastojaću u seriji postova na tu temu da pojasnim otkud kontroverze i kako ih prevazići i pronaći pravi use case za ovaj veoma značajan feature koji određuje kuda će se kretati razvoj RDBMS u budućnosti.

Ukratko, Hekaton je integrisan u SQL Server database engine, nema posebne instalacije ili održavanja. Da bi se dobacilo do impozantnih brojeva s početka teksta potrebno je da kompletna tabela bude memoriji. To je jedan od razloga boljih performansi. Važniji i krucijelni je da je Hekaton dizajniran za rad u „lock and latch free“ modu. Umesto da konstantno zaključava i sprečava potencijelne konflikte (što logičke, što fizičke) u Hekaton modu SQL Server ne očekuje konflikte uopšte i ne zaključava ništa niti sprečava druge procese da rade štp su naumili. Zato je Hekaton brži. Dizajniran je za bolje performanse i čini sve da ih obezbedi. I sve što mu mu u toj misiji smeta ili ignoriše ili implementira drugačije. Otuda i mnoga ograničenja. Neka od njih su posledica nedostatka vremena za implementaciju (diktat tržišta), a neka su jednostavno nespojiva sa proklamovanim ciljem. Otuda sa Hekatonom su mogući problemi sa integritetom podataka (nema constrainta osim default, nema foreign keysa…), sa down-time (nema promena na tabeli i indeksima nakon kreiranja, ne podržava ALTER table!), developeri moraju da menjaju kod pošto sa Hekatonom ishod nekih akcija nije bio moguć pre SQL 2014 i stoga nije bio predviđen u kodu. Sve u svemu, mnogo je ograničenja, ali definitivno postoji nekoliko use case gde se Hekaton pokazao kao odličan izbor i ja ću nastojati da ih sve opišem.

Za kraj ovog posta navešću samo da je implementacijom Hekatona u bwin-u omogućeno procesiranje 16 puta više zahteva u sekundi nego pre njega što nam je omogućilo da 18 state servera pod SQL Server 2012 zamenimo samo jednim sa SQL Server 2014! Oficijelni customer case study može se naći na ovoj adresi.

Novi Cardinality Estimator

Nakon 15+ godina došlo je do nekih promena u cardinality estimator komponenti database engina. S obzirom da je kod star, da je dibagovanje naporno i zahtevno, i da je integracija novih featura ili ispravaka upakovana u mnoštvo trace flagova, Microsoft je odlučio da u SQL Server 2014 ubaci novonapisanu verziju cardinality estimatora. Da li je novi CE bolji od prethodno, koliko i kada? Ima li slučajeva u kojima je stari CE bolji? Koje su to najznačajnije promene? O ovim pitanjima bavićemo se u sledećem postu, a i jedan od narednih sastanaka SQL UG Beograd imaće za temu novi CE. Ukratko, novi CE donosi promene u vezi sa korelacijom između predikata (dva predikata iz iste relacije nisu više nezavisna, već pomalo zavisna, predikati iz različitih relacija su sada nezavisni, a nisu bili…). Najveća promena je definitivno u interpretaciji kardinalnosti za parametere koji se nalaze izvan statističkog histograma kod kolona sa monotono rastućim vrednostima. Sa jedne strane novi CE elegantno rešava jedan od ozbiljnijih problema u upitima nad ogromnim tabelama, ali sa druge strane dovodi do lošijih rešenja u drugim upitima. Kao što rekosmo, više o tome u narednom postu. O novinama Koje donosi CE u SQL Server 2014 prezentirao sam na nekoliko SQL Saturday konferencija, poslednji put u Lisabonu.  Materijal sa sesija (folije i kod) može se preuzeti pomoću ovog linka.

AlwaysOn

Umesto maksimalno četiri sada je moguće imati osam secondary replicas, a pride je readable secondary u funkciji čak i kada primary nije raspoloživ, što do sada nije bio slučaj.

Buffer Pool Extension

Omogućava povećanje kapaciteta BPE upotrebom SSD diskova. U slučaju da je BPE pun deo podataka se izmešta na brzi SSD drajv što je umnogome bolje nego da se čitanje obavlja sa diska. Ova ekstenzija dodatno dobija na značaju ukoliko su paralelno sa disk tabelama u upotrebi i nove in-memory tabele. U tom slučaju BPE se bori sa In-Memory OLTP za memoriju (u slučaju konflikta šanse su mu koliko i Javoru iz Ivanjice da izbaci Liverpool), pa je za workload koji se bazira na disk tabelama ova ekstenzija veoma dragocena.

Delayed Durability

Ovaj feature omogućava tzv. lazy commit korisničke transakcije. Umesto da se potvrda o uspešnosti transakcije dobija po upisu informacije o istoj u transakcioni log na disku, sada je moguće tom informacijom raspolagati ranije, po upisu transakcije u memorijski bafer, što je, razume se, dosta brže. Ovo je veoma značajno kod aplikacija koje intenzivno upisuju podatke (bilo da ih menjaju ili po prvi put unose u sistem). Obećavajući feature, nažalost nismo imali vremena da ga propustimo kroz benchmark.

Ostale novine

Nova verzija omogućava eknriptovanje bekapa, bekap može da se popne i u oblake (Windows Azure), od ove verzije Resource Governor može da upravlja ne samo CPU i memorijom, već i I/O resursima.

1 comment

  1. Slavimir

    Dobar pregled.

Leave a Reply