Il disco di sistema esaurisce lo spazio quando si eseguono query SQL pesanti su SQL Server 2012


14

Sono abbastanza nuovo in SQL Server 2012, sarei grato se qualcuno potesse aiutarti. Ho ripristinato una copia di un enorme database in SQL Server 2012 e ho provato a eseguire alcune semplici query su di esso.

Sto cercando di eseguire una query SELECT su una tabella di 136898115righe del database . Questa SELECTquery ha solo una WHEREclausola semplice . Ogni volta che eseguo questa query, fallisce perché il disco di sistema (la partizione in cui è installato Windows - C:\) esaurisce lo spazio (questa partizione ha solo 6 GB di spazio libero) e non capisco perché. Ho definito il mio tempdb su un'unità diversa, che ha più di 14 terabyte di spazio libero. Ovviamente anche il mio database si trova su un'unità diversa.

Ciò che rende la mia partizione di sistema a corto di spazio? È il file di paging?


2
sto esaurendo lo spazio dal sistema sto eseguendo SSMS, ma è la stessa macchina. sto usando SSMS sul server SQL effettivo.
Roy

2
In genere, si consiglia di non eseguire altre applicazioni su una finestra di Windows Server ( non SSMS) o di assicurarsi che l'impostazione di memoria massima sia sufficientemente bassa da consentire sufficiente RAM libera. Vedi la mia risposta qui: dba.stackexchange.com/a/19776/2718
Jon Seigel

Risposte:


12

I risultati della query SSMS vengono memorizzati nella cache sull'unità C: per impostazione predefinita. Vai a Strumento \ Opzioni. Vedi allegato. Cambia questo in un altro volume con più spazio di archiviazione e dovresti andare bene.

inserisci qui la descrizione dell'immagine


1
Se si seleziona Risultati su file, è lì che si apre la finestra di dialogo Salva con nome per impostazione predefinita. Non penso che SSMS salvi i set di risultati sul disco di default, ma potrei sbagliarmi.
Jon Seigel,

1
I risultati ottenuti nella finestra della query vengono memorizzati nella cache per il mio post. Controlla l'unità, esegui una query di grandi dimensioni in SSMS e ricontrolla. Vedrai la perdita di memoria, sul tuo disco C: se non specificato diversamente.
Eric Higgins,

1
è vero. non è correlato al mio file di paging. ho spostato il mio file di paging su un'altra unità, e ancora il mio disco C: esaurito lo spazio.
Roy

11

Ok, l'ho capito: Eric ed io avevamo entrambi ragione!

  • Il percorso nella finestra di dialogo è come ho detto, solo un percorso predefinito per il salvataggio dei risultati della query.
  • I risultati della query vengono memorizzati nella cache del disco (mi sono sbagliato), ma nella cartella temp del profilo locale ( C:\Users\<UserName>\AppData\Local\Tempnel mio caso qui). Ho controllato e non sembra esserci un modo ovvio per disattivare questa memorizzazione nella cache.

Quindi i takeaway sono:

  • Evitare di eseguire SSMS direttamente nella casella SQL
  • Non SELECT *da una tabella enorme in SSMS a meno che il set di risultati non si adatti alla cartella del profilo
  • Assicurarsi che l'impostazione della memoria massima di SQL Server sia configurata correttamente (potrebbe o non potrebbe aver contribuito a questo problema rispetto alla crescita del file di paging)

7

Ho appena avuto lo stesso problema. Dopo aver letto le risposte sopra, ho trovato quanto segue.

Strumenti | Le opzioni non sono la risposta. Il mio era impostato su Y: unità, ma ho visto mentre la mia query era in esecuzione e lo spazio sull'unità C: si spostava da 2,9 GB a 5,04 MB (prima di interrompere la query).

Quindi ho pensato che probabilmente i risultati della memorizzazione nella cache (in quanto sono molto grandi con ogni riga restituita contenente un grosso pezzo di XML) nella directory Temp che è quello che Jon ha detto, tuttavia non era sicuro di come lo avresti cambiato.

Quello che ho fatto per cambiare la posizione in cui sono scritti i file temporanei è stato aprire le variabili di ambiente e modificare le variabili utente TEMP e TMP (che erano entrambe impostate su C: \ Temp) per scrivere su Z: \ Temp.

Posso confermare che dopo questa modifica ho visto la query creare un file molto grande nella mia directory Z: \ Temp.


Grandi informazioni quando è necessario eseguire un processo per aggiornare lo spazio HD della tua VM e disporre di un sacco di spazio di archiviazione di rete. Sono un po 'curioso, tuttavia, se hai problemi di rete colli di bottiglia nella velocità di trasferimento dei file, potresti spostarti al di fuori della tua performance query c: \ slow?
Gibilterra

Sono passati 3 anni e non ricordo esattamente quali fossero le circostanze in quel momento. Ora ho un laptop con una patetica quantità di RAM e potenza di elaborazione che è un'altra storia. Sono abbastanza sicuro che l'unità Z: era solo un'altra unità "locale" sulla mia macchina virtuale. Non so perché non l'hanno etichettato D: o E: ma quella parte era fuori dal mio controllo. Quindi, per me non c'era davvero un problema di rete.
Nick Ryan,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.