piektdiena, 2012. gada 13. jūlijs

SQL Server CPU slodzes simulācija

Kā simulēt CPU slodzi SQL Server? Tāds vienkāršs variants kā to izdarīt- izveidot relatīvi nelielu tabulu, to sasiet pašu ar sevi, izmantojot "Cross Join" un atrast maksimālo vērtību rezultātu kopā. (ideja nāk no šejienes).

CPU slodzes simulēšana
Izveidotais vaicājums, lai slogotu SQL Server CPU (neesmu testējis uz vairāk kā 2 kodolu procesora):
create table #MyTab (c1 int primary key clustered, c2 int, c3 char(2000))
--testa datu kopa
set nocount on
declare @i int
set @i = 1
while @i <= 5000
begin
    insert into #MyTab values (@i, @i, 'a')
    set @i = @i + 1
end
While 1=1
Begin
    declare @StartTime datetime = getdate();
    declare @result int;
    declare @msg varchar(200);
    -- pats vaicājums

    select @result = max(t1.c2 + t2.c2)
    from #MyTab t1 cross join #MyTab t2
    --option (maxdop 1)
    Set @msg = ' Duration = ' + CONVERT(VARCHAR(30),getDate() - @StartTime,114) + '(hh:mi:ss:mmm)'
    RAISERROR (@msg, 0, 1) WITH NOWAIT
End

drop table #MyTab
Mainot aizkomentēto "option (maxdop 1)", var mainīt vaicājuma izpildes laikā izmantoto kodolu skaitu (plašāk par šo tēmu rakstā SQL Server parametrs: "max degree of parallelism"). Piemēram, ja ir mainīts servera parametrs ierobežojot maksimāli izmantojamo kodolu skaitu uz vaicājumu, tad servera ierobežojumu var apiet mainot šo parametru.

CPULoad.bat
Savām vajadzībām gan es izveidoju nelielu CPULoad.bat failu (Utilītprogramma: sqlcmd). Tajā jānorāda SQL Server instance pie kā slēgties izmantojot Windows autentifikāciju.

Jau gatavu CPULoad.bat failu varat lejupielādēt šeit.

Izpilde izskatās apmēram tā:

Nav komentāru:

Ierakstīt komentāru