Bagaimana cara memeriksa apakah saya mencapai batas ukuran Edisi Express?

10

Saya bingung. AFAIK SQL Server 2005 Express memiliki batas ukuran data basis data 4GB . Namun saya mendapat hasil berikut dari sp_spaceused:

berapa ukuran sebenarnya dari database

  1. Bagaimana saya bisa memeriksa apakah DB saya mencapai batas ukuran?
  2. Apakah ruang yang tidak terisi space leftsampai saya mencapai batas?
  3. Berapa banyak ruang yang tersisa?
  4. Apakah termasuk index_sizedalam batas?
G00fy
sumber
Anda dapat memeriksa kolom backup_size dari msdb.dbo.backupset.

Jawaban:

6

Berikut ini adalah skrip yang baik yang saya dapatkan tanpa malu-malu dari sini :

use [Insert DB Name]

select
a.FILEID,
[FILE_SIZE_MB] = 
convert(decimal(12,2),round(a.size/128.000,2)),
[SPACE_USED_MB] =
convert(decimal(12,2),round(fileproperty(a.name, 'SpaceUsed')/128.000,2)),
[FREE_SPACE_MB] =
convert(decimal(12,2),round((a.size-fileproperty(a.name, 'SpaceUsed'))/128.000,2)) ,
NAME = left(a.NAME,15),
FILENAME = left(a.FILENAME,30)
from
dbo.sysfiles a

Ini bagus karena ini akan memberi Anda ruang kosong di setiap file DB (Anda mungkin memiliki beberapa file dan mungkin seseorang mengaturnya untuk meletakkan beberapa objek di masing-masing) serta ukuran gratis.

Misalnya, Anda memiliki file data 4GB yang memiliki ruang kosong 3GB. Mungkin Anda memiliki 1 MDF tanpa banyak data tetapi NDF dengan banyak data. Kueri ini akan memberi tahu Anda ukuran bebas di setiap file dan DB apa yang dialokasikan untuk file tersebut. Ingatlah untuk menambahkan semua 'SPACE_USED_MB' untuk setiap DB untuk mendapatkan ukuran total.

Semoga berhasil!

Sunting: Menghapus perintah yang tidak didukung dan buggy yang saya pikir saya bisa lolos dari posting di sini untuk permintaan ini. :(

Ali Razeghi
sumber
PS jika Anda akan menggunakan tampilan kompatibilitas mundur yang lama, Anda dapat menyederhanakan ini sedikit dengan menggunakan sysaltfiles(ini meniadakan kebutuhan untuk masuk ke setiap database sama sekali).
Aaron Bertrand
1
Terima kasih Aaron untuk sysaltfiles, saya belum melihat yang itu! sp_msforeachdb memiliki banyak masalah yang menyakitkan, tapi saya pikir untuk menginstal SQL Express di mana orang itu hanya ingin menjalankan kueri untuk melihat berapa banyak ruang kosong yang dimilikinya.
Ali Razeghi
Kecuali ketika ia melewatkan basis data dan tidak menimbulkan kesalahan ...
Aaron Bertrand
Ya tetapi dalam kasus ini, apakah Anda benar-benar berpikir itu akan menjadi masalah di mana pengguna akhir hanya ingin menghitung ukuran db? Saya kira saya tidak boleh mempostingnya bahkan dalam kasus di mana pengguna akhir akan benar-benar melihat apakah itu melewatkan DB yang mereka cari sehingga tidak memperkuat perilaku buruk. Saya hanya akan menghapus bagian itu pada titik ini, Anda benar, kita tidak perlu perintah yang diplester di tempat lain.
Ali Razeghi
5

Ukuran basis data adalah ukuran file. Lihatlah ukuran sebenarnya dari file data (log transaksi tidak masuk hitungan). Ya, indeks dihitung. Jika Anda kehabisan ruang, pertimbangkan upgrade ke SQL 2012 Express karena meningkatkan batas ukuran hingga 10 Gigs.

mrdenny
sumber
6
SQL Server 2008 R2 Express juga memiliki batas 10 GB (hanya untuk kelengkapan)
marc_s
1

Ketika sp_spaceused menunjukkan ukuran database_ sekitar 25 GB di set hasil pertama Anda, itu termasuk file data / indeks, dan log transaksi. Hanya data dan indeks aktual yang dihitung terhadap batas SQL Server Express, sehingga Anda memiliki sekitar 3,3 GB data (seperti pada hasil kedua Anda) dan sisanya 22 GB akan menjadi log transaksi. Jika Anda menjalankan "sp_helpdb" ini menunjukkan gambar asli, karena melaporkan penggunaan data dan penggunaan log transaksi pada dua baris terpisah.

Ubercoder
sumber