Disk sistem kehabisan ruang saat menjalankan kueri SQL yang berat pada SQL Server 2012

14

Saya cukup baru untuk SQL Server 2012, saya akan berterima kasih jika seseorang dapat membantu. Saya telah memulihkan salinan database besar ke SQL Server 2012 dan saya mencoba menjalankan beberapa pertanyaan sederhana yang menentangnya.

Saya mencoba menjalankan kueri SELECT terhadap tabel 136898115baris database . SELECTKueri ini hanya memiliki WHEREklausa sederhana . Setiap kali saya menjalankan kueri ini, ia gagal karena disk sistem (partisi tempat Windows diinstal - C:\) kehabisan ruang (partisi ini hanya memiliki ruang kosong 6GB), dan saya tidak mengerti mengapa. Saya menetapkan tempdb saya berada di drive yang berbeda, yang memiliki lebih dari 14 terabyte ruang kosong. Tentu saja basis data saya juga berada di drive yang berbeda.

Apa yang membuat partisi sistem saya kehabisan ruang? Apakah ini file halaman?

royv
sumber
2
saya kehabisan ruang dari sistem saya menjalankan SSMS, tetapi mesin yang sama. Saya menggunakan SSMS pada server SQL yang sebenarnya.
royv
2
Secara umum, disarankan untuk tidak menjalankan aplikasi lain pada kotak Windows SQL Server ( bukan SSMS), atau untuk memastikan pengaturan memori maks cukup rendah untuk memungkinkan cukup RAM gratis. Lihat jawaban saya di sini: dba.stackexchange.com/a/19776/2718
Jon Seigel

Jawaban:

12

SSMS kueri menghasilkan cache ke drive C: secara default. Buka Alat \ Opsi. Lihat Lampiran. Ubah ini ke volume lain dengan lebih banyak penyimpanan dan Anda akan baik-baik saja.

masukkan deskripsi gambar di sini

Eric Higgins
sumber
1
Jika Anda memilih Hasil ke File, di situlah kotak dialog Simpan Sebagai terbuka secara default. Saya tidak berpikir SSMS menyimpan set hasil ke disk secara default, tapi saya bisa salah.
Jon Seigel
1
Hasil yang Anda dapatkan di jendela permintaan Anda di-cache per posting saya. Periksa drive Anda, jalankan kueri besar dalam SSMS, dan periksa lagi. Anda akan melihat kehilangan penyimpanan, di drive C: jika Anda belum menentukan sebaliknya.
Eric Higgins
1
itu benar. ini tidak terkait dengan file halaman saya. saya memindahkan file halaman saya ke drive lain, dan drive C: saya masih kehabisan ruang.
royv
11

Oke, saya sudah menemukan jawabannya: Eric dan saya sama-sama benar!

  • Jalur dalam dialog adalah seperti yang saya katakan, hanya jalur default untuk menyimpan hasil kueri.
  • Hasil kueri di - cache ke disk (saya salah), tetapi di folder temp profil lokal ( C:\Users\<UserName>\AppData\Local\Tempdalam kasus saya di sini). Saya memeriksa, dan tampaknya tidak ada cara yang jelas untuk mematikan caching ini.

Jadi takeaways adalah:

  • Hindari menjalankan SSMS langsung di kotak SQL
  • Jangan SELECT *dari tabel besar di SSMS kecuali set hasil dapat masuk ke folder profil
  • Pastikan pengaturan memori SQL Server max dikonfigurasi dengan benar (mungkin atau mungkin tidak berkontribusi terhadap masalah ini sehubungan dengan pertumbuhan file halaman)
Jon Seigel
sumber
7

Saya baru saja mengalami masalah yang sama. Setelah membaca jawaban di atas, saya menemukan yang berikut.

Alat | Opsi bukanlah jawabannya. Tambang saya disetel ke drive Y: namun saya menyaksikan permintaan saya berlari dan ruang pada drive C: menyelam dari 2.9GB ke 5.04MB (sebelum saya membunuh permintaan).

Jadi saya pikir itu mungkin hasil caching (karena mereka sangat besar dengan setiap baris dikembalikan berisi sebagian besar XML) ke direktori Temp yang adalah apa yang dikatakan Jon tetapi dia tidak yakin bagaimana Anda akan mengubahnya.

Apa yang saya lakukan untuk mengubah di mana file temp ditulis adalah untuk membuka Variabel Lingkungan saya dan mengedit variabel Pengguna TEMP dan TMP (yang keduanya diatur ke C: \ Temp) untuk menulis ke Z: \ Temp.

Saya dapat mengonfirmasi bahwa setelah perubahan ini, saya menyaksikan permintaan membuat file yang sangat besar di direktori Z: \ Temp saya.

Nick Ryan
sumber
Informasi hebat ketika ada proses yang harus Anda lalui untuk mendapatkan ruang HD vm Anda ditingkatkan dan memiliki banyak penyimpanan jaringan. Saya agak penasaran, jika Anda memiliki masalah jaringan bottlenecking kecepatan transfer file, mungkin bergerak di luar c Anda: \ lambat kinerja query?
GibralterTop
Itu 3 tahun yang lalu dan saya tidak ingat persis apa situasinya saat itu. Saya sekarang memiliki laptop dengan jumlah RAM yang menyedihkan dan daya pemrosesan yang merupakan cerita lain. Saya cukup yakin drive Z: hanyalah drive "lokal" di VM saya. Tidak yakin mengapa mereka tidak memberi label D: atau E: tetapi bagian itu di luar kendali saya. Jadi, bagi saya sebenarnya tidak ada masalah jaringan.
Nick Ryan