ceturtdiena, 2012. gada 23. augusts

Norādi shēmas nosaukumu!

Viena no "labās prakses" rekomendācijām rakstā SQL Server labā prakse ir "Shēmas nosaukumu vienmēr rakstīt pirms objekta nosaukuma". Saskāros ar situāciju, kur šī punkta neievērošana rada ātrdarbības problēmas. Tādēļ vēlos pamatot rekomendācijas ievērošanu, aprakstīt un ar piemēru ilustrēt "slikto scenāriju", kas var rasties neievērojot šo rekomendāciju.

trešdiena, 2012. gada 8. augusts

SQL Server labā prakse

Datu bāzes koda rakstīšanas labā prakse nav viennozīmīga. Tāpat neviennozīmīga ir robeža starp koda rakstīšanas labo praksi (koda lasāmība, saprotamība, uztveramība) un to, kas būtu jāievēro SQL Server darbības uzlabošanai. Piemēram, procedūrām ieteikums nelietot 'pr_' ir ātrdarbības apsvērumu dēļ, kamēr lietot 'vw_' prefiksu skatiem ir ieteikums labākas lasāmības dēļ.

otrdiena, 2012. gada 7. augusts

Resource Governor: statistika

Kā jau minēju rakstā Resource Governor: CPU slodzes sadalīšana, Resource Governor (RG) ir pieejams sākot ar SQL Server 2008, Enterprice / Developer redakcijās un ir domāts CPU un atmiņas resursu sadalīšanai starp konekcijām vienas instances ietvaros.

RG savas darbības laikā uzkrāj informāciju par piešķirto resursu apjomu. Uzkrātā informācija ļauj atbildēt, piemēram, uz jautājumu "Cik % CPU patērē lietojums X?" vai "Cik milisekundes ilgs ir vidējais pieprasījums no lietojuma Y?"

pirmdiena, 2012. gada 6. augusts

Resursu prasīgākie vaicājumi, procedūras, trigeri

Ātrdarbības problēmu cēloņi var būt dažādi. Risinājumi arī (šo tēmu cītīgi cenšos izvērst sadaļā "Optimizācija"). Šajā rakstā plašāk izvērsta viena no problēmas konstatēšanas pieejām- noskaidrot, kuri no vaicājumiem/procedūrām ir visvairāk resursu prasīgi.

Vai redzi problēmu? (ar atbildi)

Ir divas tabulas:
Create Table dbo.T1
(
    T1ID int primary key identity,
    Value varchar(50)
)
Go
Create Table dbo.T2
(
    T2ID int primary key identity,
    T1ID int foreign key references dbo.T1 (T1ID),
    Value char(5000)
)
Ar datiem (T1 = 3 ieraksti, T2 = 10000 ieraksti):
-- SQL 2008 sintakse
set NoCount On;
Insert Into T1 (Value) Values ('jo'), ('jo 2'), ('jojo 2');
declare @i int = 0;
while @i < 10000
Begin
    Insert into dbo.T2 Values(1, @i);
    Set @i += 1;
End
Izpildu šādu komandu komplektu:
Insert Into T1 Values ('Jauna vērtība');
Delete T1 Where Value = 'Jauna vērtība';
Vai redzi problēmu??