Saya telah mewarisi database SQL Server yang cukup besar. Tampaknya mengambil lebih banyak ruang daripada yang saya harapkan, mengingat data yang dikandungnya.
Apakah ada cara mudah untuk menentukan berapa banyak ruang pada disk yang dikonsumsi setiap tabel?
sql-server
tsql
Eric
sumber
sumber
Jawaban:
sumber
Jika Anda menggunakan SQL Server Management Studio (SSMS), alih-alih menjalankan kueri ( yang dalam kasus saya mengembalikan baris duplikat ), Anda dapat menjalankan laporan standar .
Catatan: Tingkat kompatibilitas basis data harus diatur ke 90 atau di atasnya agar ini berfungsi dengan benar. Lihat http://msdn.microsoft.com/en-gb/library/bb510680.aspx
sumber
sp_spaceused dapat memberi Anda informasi tentang ruang disk yang digunakan oleh tabel, tampilan indeks, atau seluruh database.
Sebagai contoh:
Ini melaporkan informasi penggunaan disk untuk tabel ContactInfo.
Untuk menggunakan ini untuk semua tabel sekaligus:
Anda juga bisa mendapatkan penggunaan disk dari dalam klik kanan fungsionalitas Laporan Standar SQL Server. Untuk sampai ke laporan ini, navigasikan dari objek server di Object Explorer, pindah ke objek Database, lalu klik kanan database apa pun. Dari menu yang muncul, pilih Laporan, lalu Laporan Standar, dan kemudian "Disk Usage by Partition: [DatabaseName]".
sumber
sp_msforeachtable
SSMS dengan mudah mungkin memicuSystem.OutOfMemoryException
jika Anda memiliki sejumlah besar tabel, jadi mungkin ide yang lebih baik untuk menggunakan tabel sementara untuk menyimpan hasilnya.Berikut adalah metode lain: menggunakan SQL Server Management Studio , di Object Explorer , buka database Anda dan pilih Tables
Kemudian buka Rincian Obyek Explorer (baik dengan menekan F7 atau pergi ke View-> Rincian Obyek Explorer ). Di halaman detail objek explorer, klik kanan pada header kolom dan aktifkan kolom yang ingin Anda lihat di halaman. Anda dapat mengurutkan data berdasarkan kolom apa pun juga.
sumber
Setelah beberapa pencarian, saya tidak dapat menemukan cara mudah untuk mendapatkan informasi tentang semua tabel. Ada prosedur tersimpan yang berguna bernama sp_spaceused yang akan mengembalikan semua ruang yang digunakan oleh database. Jika disediakan dengan nama tabel, itu mengembalikan ruang yang digunakan oleh tabel itu. Namun, hasil yang dikembalikan oleh prosedur tersimpan tidak dapat disortir, karena kolom adalah nilai karakter.
Script berikut akan menghasilkan informasi yang saya cari.
sumber
Untuk semua tabel, gunakan .. (menambahkan dari komentar Paul)
sumber
exec sp_helpdb
yang tidak menunjukkan apa-apa tentang tabel, keexec sp_spaceused
yang tidak - tetapi hanya untuk satu tabel pada satu waktu ... itu tidak memberi Anda gambaran tentang tabel apa yang Anda miliki dan berapa banyak baris yang mereka miliki dan berapa banyak ruang yang mereka ambil.Kueri di atas baik untuk menemukan jumlah ruang yang digunakan oleh tabel (termasuk indeks), tetapi jika Anda ingin membandingkan berapa banyak ruang yang digunakan oleh indeks di atas meja, gunakan kueri ini:
sumber
where [i].[is_primary_key] = 0
. Sekarang ukurannya harus sesuai.sp_spaceused
. Saya mengukur GB jadi beberapa MB tidak cocok tidak banyak. Saya tidak peduli tentang ukuran pasti, hanya sebuah ide.Jika Anda perlu menghitung angka yang persis sama, yang ada di halaman 'properti tabel - penyimpanan' di SSMS, Anda perlu menghitungnya dengan metode yang sama seperti yang dilakukan dalam SSMS (berfungsi untuk sql server 2005 dan di atas ... dan juga berfungsi dengan benar untuk tabel dengan bidang LOB - karena hanya menghitung "used_pages" tidak cukup untuk menunjukkan ukuran indeks yang akurat):
sumber
Ekstensi ke @xav menjawab bahwa partisi tabel ditangani untuk mendapatkan ukuran dalam MB dan GB. Diuji pada SQL Server 2008/2012 (Mengomentari baris di mana
is_memory_optimized = 1
)sumber
Untuk Azure saya menggunakan ini:
Anda harus memiliki SSMS v17.x
Saya menggunakan;
Dengan ini, seperti yang disebutkan Sparrow Pengguna :
Buka
Databases
> Anda dan pilih Tables ,Kemudian tekan tombol F7 Anda akan melihat
row count
sebagai:
SSMS di sini terhubung ke database Azure
sumber
Kami menggunakan tabel partisi dan mengalami beberapa masalah dengan kueri yang disediakan di atas karena rekaman duplikat.
Bagi mereka yang membutuhkan ini, Anda dapat menemukan kueri di bawah ini yang dijalankan oleh SQL Server 2014 saat membuat laporan "Disk use by table". Saya menganggap itu juga berfungsi dengan versi SQL Server sebelumnya.
Itu bekerja seperti pesona.
sumber
sumber
Perubahan kecil pada jawaban Mar_c , karena saya telah sering kembali ke halaman ini, dipesan oleh sebagian besar baris pertama:
sumber
Ini akan memberi Anda ukuran, dan mencatat jumlah untuk setiap tabel.
sumber
{ }
) pada bilah alat editor untuk memformat dan sintaksis dengan baik!Untuk mendapatkan semua ukuran tabel dalam satu database Anda dapat menggunakan kueri ini:
Dan Anda dapat mengubahnya untuk memasukkan semua hasil ke tabel temp dan setelah itu pilih dari tabel temp.
sumber
Dari prompt perintah menggunakan OSQL :
sumber
Berikut adalah cara untuk mendapatkan ukuran semua tabel dengan cepat dengan langkah-langkah berikut:
Tulis perintah T-SQL yang diberikan untuk mendaftar semua tabel database:
Sekarang salin daftar tabel database, dan salin ke jendela penganalisa permintaan baru
Dalam penganalisis kueri SQL , pilih dari bilah alat pilihan hasil atas ke file ( Ctrl+ Shift+ F).
Sekarang akhirnya tekan tombol Execute yang ditandai merah dari bilah alat di atas .
Ukuran database semua tabel sekarang disimpan dalam file di komputer Anda.
sumber
Saya menambahkan beberapa kolom di atas jawaban marc_s:
sumber
Posting saya hanya relevan untuk SQL Server 2000 dan telah diuji untuk berfungsi di lingkungan saya.
Kode ini mengakses Semua database yang mungkin dari sebuah instance , bukan hanya satu database.
Saya menggunakan dua tabel temp untuk membantu mengumpulkan data yang sesuai dan kemudian membuang hasilnya ke satu tabel 'Langsung'.
Data yang dikembalikan adalah: DatabaseName, DatabaseTableName, Baris (dalam Tabel), data (ukuran tabel dalam KB tampaknya), entri data (saya menemukan ini berguna untuk mengetahui kapan terakhir kali saya menjalankan skrip).
Downfall ke kode ini adalah bidang 'data' tidak disimpan sebagai int (Karakter 'KB' disimpan di bidang itu), dan itu akan berguna (tetapi tidak sepenuhnya diperlukan) untuk menyortir.
Semoga kode ini membantu seseorang di luar sana dan menghemat waktu mereka!
Jika Anda perlu tahu, tabel rsp_DatabaseTableSizes dibuat melalui:
sumber
Sebagai ekstensi sederhana untuk jawaban marc_s (yang telah diterima), ini disesuaikan untuk mengembalikan jumlah kolom dan memungkinkan pemfilteran:
sumber
Riffing pada @Mark jawaban di atas, menambahkan @ updateusage = 'true' untuk memaksa statistik ukuran terbaru ( https://msdn.microsoft.com/en-us/library/ms188776.aspx ):
sumber
Berikut adalah contoh permintaan untuk mendapatkan tabel yang lebih besar dari 1GB yang dipesan berdasarkan ukuran menurun.
sumber