Paging i sorting

Objavljeno: 19-01-2015 | Autor: Milen Blagojević | Kategorija: T-SQL

0

Ukoliko imate zahtev da je potrebno stored procedurom vratiti određeni broj redova sortiranih po nekom redosledu ovo je jedan od načina kojim to može da se uradi.
Recimo da je gridu koji podržava sorting i paging potrebno vratiti crtane likove za određeni crtani film zajedno sa ukupnim brojem redova.
U tom slučaju bi kreirali sledeću stored proceduru:

Recovery modeli

Objavljeno: 21-10-2014 | Autor: Milen Blagojević | Kategorija: Administracija

1

SQL Server backup i restore operacije se dešavaju unutar konteksta recovery modela baze. Recovery model je podešavanje baze koje kontroliše kako se loguju transakcije za odgovarajuću bazu, da li je moguće backup-ovati transakcioni log i koji tipovi restorovanja baze su mogući. Postoje 3 tipa recovery modela:

Prost (Simple) recovery model – Osnovni recovery model, transakcije se automatski brišu prilikom završetka transakcije i nije podržana nijedna operacija koja zahteva backup-ovanje transakcionog loga. Moguće je izvršavati full i diferencijalni backup. U slučaju bilo kakvog pada sistema sve promene na bazi koje su se desile od poslednjeg backup-a se moraju ponovo izvršiti. Sledeće funkcionalnosti SQL Servera nije moguće koristiti ukoliko je baza u ovom recovery modelu:

Izvršavanje upita na više servera odjednom

Objavljeno: 02-07-2014 | Autor: Milen Blagojević | Kategorija: Management Studio

0

U SQL Server Management studiju postoji mogućnost izvršavanja istog upita (ili bilo koje druge komande) na više servera odjednom. Ovo je omogućeno pomoću funkcionalnosti za grupisanje SQL Servera (Local Server Groups).

U nastavku članka biće objašnjeno kako se kreiraju grupe servera, ali usput i kako se koristi sama opcija registrovanja servera, koja služi kao svojevrsni bookmarks vaših servera. Tab ‘Registred Servers’ obično je dostupan na levoj strani SSMS-a, a u slučaju da nije, otvara se iz menija preko opcije View->Registred Servers ili prečicom sa tastature CTRL+ ALT + G.

U ovom primeru grupišem svoje development servere. Nakon otvaranja taba ‘Registred Servers’, desnim klikom na ‘Local Server Groups’ otvara se dijalog za dodavanje nove grupe servera (New Server Groups):

tempdb

Objavljeno: 23-04-2014 | Autor: Milen Blagojević | Kategorija: Administracija, Saveti

0

Tempdb je sistemska baza dostupna svim korisnicima konektovanim na SQL Server i u njoj se čuva sledeće:

  • Privremeni objekti koji su eksplicitno kreirani, kao što su globalne i lokalne privremene tabele, privremene procedure, tejbl varijable ili kursori.
  • Interni objekti koji su kreirani od strane SQL Servera kao što su privremene tabele kreirane za čuvanje rezultata prilikom sortiranja ili join-ovanja.
  • Verzije redova iz tabela koje se generišu transakcijama u bazama koje koriste read-commited row versioning isolation ili snapshot isolation.
  • Verzije redova iz tabela koje se generišu transakcijama za: online indeks operacije, Multiple Active Result Sets (MARS) i AFTER trigere.

Operacije koje se izvršavaju u tempdb su minimalno logovane. Ovo omogućava da transakcije mogu biti rollback-ovane. Tempdb je baza koja se rekreira svakog puta kada se SQL Server startuje tako da sistem uvek kreće sa potpuno praznom tempdb bazom. Privremene tabele i procedure se automatski brišu prilikom diskonektovanja korisnika. Zbog toga ne postoje nikakvi objekti koji mogu biti sačuvani iz jedne sesije u drugu. Backup i restore operacije nisu dozvoljene nad tempdb.

Ovo su inicijalne vrednosti za tempdb fajove sa podacima i logom (ove vrednosti variraju u zavisnosti od verzije SQL Servera):

Fajl Logičko ime Fizičko ime Rast fajla
Podaci tempdev tempdb.mdf Automatski rast po 10% dok disk nije pun
Log templog templog.ldf Automatski rast po 10% do maksimuma od 2 TB

Veličina tempdb može uveliko uticati na performanse sistema. Na primer, ako je veličina tempdb premala, sistem može biti previše opterećen sa automatskim rastom umesto da izvršava zadatke. Ovo se može izbeći povećanjem veličine tempdb. Takođe, ukoliko je tempdb prevelika može ugroziti druge sisteme koji koriste isti disk, pa je preporuka uvek izdvajati tempdb na poseban disk na kome nije ni jedna druga korisnička baza, niti sistemski fajlovi.

CONTEXT_INFO

Objavljeno: 14-03-2014 | Autor: Milen Blagojević | Kategorija: T-SQL, Trikovi

0

Context informacija je binarna vrednost veličine do 128 bajtova koja se može postaviti na nivou sesije i koristiti u procedurama, trigerima ili funkcijama koje se izvršavaju u okviru iste sesije.

Postoje dve komande koje se koriste za postavljanje i čitanje ove informacije:

  • SET CONTEXT_INFO – za upisivanje vrednosti
  • CONTEXT_INFO () – za čitanje vrednosti

Ova vrednost se takođe može pročitati i u sledećim DMVs:

  • sys.dm_exec_requests
  • sys.dm_exec_sessions
  • sys.sysprocesses

Primer:

Osnovno o privremenim tabelama i tejbl varijablama

Objavljeno: 21-02-2014 | Autor: Milen Blagojević | Kategorija: Saveti

0

Od trenutka kada su uvedene privremene tabele i tejbl varijable u SQL Server vodi se rasprava kada je potrebno koristiti jedne a kada druge, a da bi znali odgovor na ovo pitanje potrebno je poznavati osnovne razlike između njih.
Privremene tabele su u stvari obične tabele koje se definišu i čuvaju u tempdb (sem što privremene tabele ne mogu imati FK i ne mogu se particionisati) i traju onoliko koliko traje sesija u kojoj su kreirane. Privremene tabele mogu biti:

  • Lokalne – kreiraju se sa prefiksom # i vidljive su samo unutar sesije u kojoj se izvršavaju
  • Globalne – kreiraju se sa prefiksom ## i vidljive su iz svih ostalih sesija

Sintaksa za kreiranje privremenih tabela:

Indeksirani view-ovi

Objavljeno: 23-01-2014 | Autor: Milen Blagojević | Kategorija: View-ovi

0

Indeksirani view je u stvari view na kome je kreiran unique clustered index čime mogu značajno da se unaprede performanse upita nad njim. Da bi view mogao da postane indeksirani, mora da ispunjava određena pravila. Neka od bitnijih su (SQL Server 2008/2008 R2):

  • Indeksirani view ne sme referencirati ni jedan drugi view.
  • Indeksirani view mora biti kreiran sa SCHEMABINDING opcijom (što znači da se ne mogu menjati tabele koje ulaze u view)
  • Ukoliko se indeksirani view referencira na funkcije one takođe moraju biti kreirane sa SCHEMABINDING opcijom.
  • Sve funkcije na koje se referencira view moraju biti determinističke.
  • Ukoliko select lista sadrži agregatne izraze, mora biti definisano i GROUP BY.
  • Ako postoji GROUP BY, select mora sadržati COUNT_BIG(*) i ne sme postojati HAVING, CUBE ili ROLLUP.
  • Ne mogu se koristiti: Derived tabele, Rowset funkcije, UNION, ugnježdeni upiti, OUTER ili SELF join-i, TOP, ORDER BY, DISTINCT, COUNT(*) (COUNT_BIG(*) se može koristiti)
  • Ne mogu se koristiti sledeće funkcije: AVG, MAX, MIN, STDEV, STDEVP, VAR, VARP.
  • U SELECT naredbi ne sme postojati * ili tabela.*, imena kolona se moraju eksplicitno navesti
  • Kolona iz tabele se ne može koristi više puta (sem ako nije deo neke kalkulacije)

Za razliku od običnih view-ova koji se uvek izvršavaju u trenutku njihovog korišćenja, indeksirani view-ovi se čuvaju na diskovima i SQL Server ih tretira kao ostale tabele u čemu je i glavna prednost njihovog korišćenja.
Recimo da imamo upit:

Interni tipovi join-ovanja

Objavljeno: 05-01-2014 | Autor: Milen Blagojević | Kategorija: Optimizacija

0

Prilikom logičkih join-ovanja tabela u SQL serveru, SQL Server Query Optimizer koristi jedan od 3 tipa internih join-ova:

Merge join

U većini slučajeva ovo je najefikasniji metod join-ovanja tabela. SQL Server koristi ovaj tip kada se join-uju tabele sa približnim brojem redova po kolonama koje imaju isto sortirane indekse.