MSSQL: Neměňte „Maximum server memory (in MB)“ na 0

Dneska jsem se nechal unést a chtěl jsem vypnout na MS SQL 2008 R2 horní mez využité paměti, kterou jsme měli na serveru staženou na 2.5 GB.

Nu což, vlezl jsem do SQL Management Studia, dal jsem si vlastnosti serveru, koukám do nastavení Memory a změnil jsem nastavení vlastnosti „Maximum server memory (in MB)“ z 2500 na 0 (velmi naivně jsem předpokládal, že stejně jako jinde to bude interpretováno jako „no limit“).

Omyl, to nezkoušejte. Poslední, co jsem ještě záhledl bylo, že si to SQL sám změnil na 16 (MB) a to bylo na dlouho všechno, co jsem z SQL serveru viděl.

Následný pokus změny na vyšší hodnotu už SQL Management Studio neprovedlo, nové připojení na SQL Management Studio už neúspěšné (ani nevytvořil connection).

Zůstal viset ve stavu, kdy si nechal asi 500 MB paměti a bral 25% CPU, což nekleslo ani po odpojení zátěže (kterou již stejně neodbavoval).

Stop service nic, takže kill procesu z task manageru.

Nový start service, zabraná paměť procesem 70 MB, bez šance na připojení z Management Studia.

Zkouším OSQL, sp_reconfigure, nic, hlášky typu „There is insufficient system memory in resource pool ‚internal‘ to run this query.“, nebo se vůbec nevytvoří connection.

Nakonec jsem to vybojoval na několikátý pokus (vždy těsně po startu service) přes „sqlcmd -A -E“ (Dedicated Administrator Connection) a volby

sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'max server memory', 2147483647;
GO
RECONFIGURE;
GO

…horká půlhodinka.

VaDo said:

Nepomohlo nastartovat SQL server z command line? http://msdn.microsoft.com/en-us/library/ms190737.aspx

David Hlaváček said:

Právě pro tyto stavy je k dispozici DAC (Dedicated Administrator Connection). Je to vyhrazené připojení pro systémového administrátora, které má přednostní právo v přidělení prostředků. V praxi se SQL Server z důvodu nedostatku paměti může dostat do stavu, který je ve článku posán.

Management Studio dokáže DAC použít také, tam je to o změně connection stringu kdy v před název serveru se uvede ADMIN: tedy „ADMIN:SQLServer1“.

DAC je standardně zapnuto pouze lokálně tzn. protokol Shared memory. Pokud by se tedy celý server dostal do problémů s pamětí, DAC není nic platné, když ho lokálně nevytvoříme. Proto je možné zapnout DAC s možností vzdáleného přístupu, což je vlastnost, která je po instalaci standardně zablokována a je nutné ji povolit.

One thought on “MSSQL: Neměňte „Maximum server memory (in MB)“ na 0

  1. hell

    Tak musim podekovat Davidovi, pomohlo mi to.
    Toto je link, jak se z Management studia pripojit pomoci DAC.
    http://technet.microsoft.com/en-us/library/ms178068(v=sql.105).aspx

    File->New->New database engine query
    Do Server name zadat „admin:localhost:“

    zde jsem nasledne pustil

    sp_configure ‚show advanced options‘, 1;
    GO
    RECONFIGURE;
    GO
    sp_configure ‚max server memory‘, 2147483647;
    GO
    RECONFIGURE;
    GO

    a zase mi to beha.

Napsat komentář

Vyplňte detaily níže nebo klikněte na ikonu pro přihlášení:

WordPress.com Logo

Komentujete pomocí vašeho WordPress.com účtu. Log Out / Změnit )

Twitter picture

Komentujete pomocí vašeho Twitter účtu. Log Out / Změnit )

Facebook photo

Komentujete pomocí vašeho Facebook účtu. Log Out / Změnit )

Google+ photo

Komentujete pomocí vašeho Google+ účtu. Log Out / Změnit )

Připojování k %s