TEMPDB non cresce

venerdì 27 giugno 2014 - 18.28
Tag Elenco Tags  C#  |  .NET 3.0  |  .NET 3.5  |  .NET 4.0  |  Windows Server 2003  |  Visual Studio 2010  |  Visual Studio 2003  |  SQL Server 2000

gaemon78 Profilo | Newbie

Ciao a tutti.
Ho un problema di questo tipo.
Situazione : virtual machine windows server 2003 + SQL server 2000 STD
Archivi : circa 60 ... diverse centinaia di Gb in totale
Sintomi: tutto completamente rallentato (ma non bloccato) + CPU al 100 %
Soluzione temporanea : Aumento della ram + aumento della priorità della macchina virtuale
Abbiamo ricalcolato gli indici, abbiamo rigenerato le statistiche, abbiamo stoppato il servizio + cancellato 2 tempdb mdf ed ldf + riavviato servizio.
Generalmente il tempdb assume dimensioni dell'ordine di 4/5 Gb, invece ora NON cresce, è rimasto coime al riavvio, a 500Mb, di cui 5 Mb utilizzati e il resto disponibile.
Noi utilizziamo molto le tabelle temporanee ...

Cosa può essere successo ?

Ringrazio in anticipo chiunque possa aiutarmi.

PS: abbiamo in previsione passaggio a 2008/2012 ma il tutto sarebbe pianificato per settembre.

alx_81 Profilo | Guru

>Ciao a tutti.
ciao

>Situazione : virtual machine windows server 2003 + SQL server 2000 STD
>Archivi : circa 60 ... diverse centinaia di Gb in totale
>Sintomi: tutto completamente rallentato (ma non bloccato) + CPU al 100 %
>Soluzione temporanea : Aumento della ram + aumento della priorità della macchina virtuale
>Generalmente il tempdb assume dimensioni dell'ordine di 4/5 Gb,
>invece ora NON cresce, è rimasto coime al riavvio, a 500Mb, di
>cui 5 Mb utilizzati e il resto disponibile.
>Noi utilizziamo molto le tabelle temporanee ...
Che tipo di tabelle temporanee? Perchè se usi le @temp table la RAM aggiunta viene sfruttata al massimo e, non avendo più memory pressure, il tempdb non viene più toccato da quegli oggetti.
Inoltre, se le performance aumentano, anche l'impiego del tempdb è ridotto in termini di tempo, e quindi la sensazione è che non cresce più. Al contrario, cresce, ma sta nei 500MB perchè le risorse si liberano in fretta.
Ci sono specifiche da seguire per ottimizzare il tempdb..
Leggi qui: http://www.sqlskills.com/blogs/paul/a-sql-server-dba-myth-a-day-1230-tempdb-should-always-have-one-data-file-per-processor-core/

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi

gaemon78 Profilo | Newbie

CIAO !
Le tabelle temporanee che utilizziamo sono del tipo #temp e raramente ##temp.
Il tempdb è sempre stato molto sollecitato e non è MAI stato così piccolo.
Quando si fa una JOIN in cui una delle tabelle è temponea, i tempi si dilatano inverosimilmente.
Non parliamone nemmeno se nella join c'è una tabella legata con LINKED SERVER.

Grazie

alx_81 Profilo | Guru

>Le tabelle temporanee che utilizziamo sono del tipo #temp e raramente ##temp.
Le ultime, se puoi, evitale.. possono diventare veramente impegnative per il server.

>Quando si fa una JOIN in cui una delle tabelle è temponea, i tempi si dilatano inverosimilmente.
Questa frase nasconde mille questioni.. dove sta il tempdb fisicamente? Come l'hai organizzato? Quanti dati hai? Che tipo di latency hai? Hai fatto monitoring e analisi dei wait time?
Come sei messo ad indici? Che livello di isolamento hai? Purtroppo con le informazioni che dai, servirebbe proprio una giornata o due accanto alle tue macchine per capire che sta succedendo.
Il fatto che il tempdb non cresca non è da vedere così male, come ti dicevo prima, c'è da capire il motivo e uno potrebbe essere che le performance sono migliorate sulle query che ne fanno uso.

>Non parliamone nemmeno se nella join c'è una tabella legata con LINKED SERVER.
Beh sai, questo è anche normale. Ma anche qui, dipende da dove hai il server, quanti dati muovi, se ci sono scan, se c'è necessità di caricare tutto sul server di destinazione (questo costa molto in tempo), se hai problemi di rete tra un server ed un altro, se crei erroneamente una transazione distribuita, ecc..
Ci vuole più monitorizzazione.
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi

gaemon78 Profilo | Newbie

Risolto.
In realtà non abbiamo la certezza che il problema si sia risolto dopo queste impostazioni ma dopo aver configurato la server memory del motore di sql 2000 ad un min di 0.5 gb ed un max di 2gb (che poi è il max da lui gestibile), il sistema si è pian piano stabilizzato e il tempdb è ritornato a lavorare come in precedenza.

Ora la max server memory è a 2gb su un totale di 4gb del windows server 2003
Lasciando la max a 3,5 gb, SQL2000 non dovrebbe usarla ma "in caso di necessità" probabilmente ne usufruiva, il tempdb rimaneva inutilizzato e il server rimaneva con 0,5 gb a disposizione... e si siedeva.

Ora il sistema lavora normalmente.
Grazie !
Ciao
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5