Menyusutkan database

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Artikel ini menjelaskan cara menyusutkan database di SQL Server dengan menggunakan Object Explorer di SQL Server Management Studio atau Transact-SQL.

Menyusutkan file data memulihkan ruang dengan memindahkan halaman data dari akhir file ke ruang yang tidak ditempati lebih dekat ke bagian depan file. Ketika ruang kosong yang cukup dibuat di akhir file, halaman data di akhir file dapat dibatalkan alokasinya dan dikembalikan ke sistem file.

Pembatasan dan batasan

  • Database tidak dapat dibuat lebih kecil dari ukuran minimum database. Ukuran minimum adalah ukuran yang ditentukan ketika database awalnya dibuat, atau ukuran eksplisit terakhir yang ditetapkan dengan menggunakan operasi pengubahan ukuran file, seperti DBCC SHRINKFILE. Misalnya, jika database awalnya dibuat dengan ukuran 10 MB dan tumbuh menjadi 100 MB, ukuran terkecil database dapat dikurangi menjadi 10 MB, bahkan jika semua data dalam database telah dihapus.

  • Anda tidak dapat menyusutkan database saat database sedang dicadangkan. Sebaliknya, Anda tidak dapat mencadangkan database saat operasi penyusutan pada database sedang dalam proses.

Rekomendasi

  • Untuk melihat jumlah ruang bebas saat ini (tidak dialokasikan) dalam database. Untuk informasi selengkapnya, lihat Menampilkan Data dan Informasi Ruang Log untuk Database

  • Pertimbangkan informasi berikut saat Anda berencana menyusutkan database:

    • Operasi penyusutan paling efektif setelah operasi yang membuat sejumlah besar ruang penyimpanan yang tidak digunakan, seperti pernyataan DELETE besar, memotong tabel, atau operasi drop table.

    • Sebagian besar database memerlukan ketersediaan ruang kosong untuk operasi rutin sehari-hari. Jika Anda menyusutkan database berulang kali dan melihat bahwa ukuran database tumbuh lagi, ini menunjukkan bahwa ruang kosong diperlukan untuk operasi reguler. Dalam kasus ini, berulang kali menyusutkan database adalah operasi yang sia-sia. Peristiwa autogrow yang diperlukan untuk menumbuhkan performa penghambat file database.

    • Operasi penyusutan tidak mempertahankan status fragmentasi indeks dalam database, dan umumnya meningkatkan fragmentasi ke tingkat tertentu. Ini adalah alasan lain untuk tidak berulang kali menyusutkan database.

    • Kecuali Anda memiliki persyaratan khusus, jangan setel opsi database AUTO_SHRINK ke AKTIF.

Izin

Memerlukan keanggotaan dalam peran server tetap sysadmin atau peran database tetap db_owner .

Keterangan

Menyusutkan operasi yang sedang berlangsung dapat memblokir kueri lain pada database, dan dapat diblokir oleh kueri yang sudah berlangsung. Diperkenalkan di SQL Server 2022 (16.x), menyusutkan operasi database memiliki opsi WAIT_AT_LOW_PRIORITY. Fitur ini adalah opsi tambahan baru untuk DBCC SHRINKDATABASE dan DBCC SHRINKFILE. Jika operasi penyusutan baru dalam mode WAIT_AT_LOW_PRIORITY tidak dapat memperoleh kunci yang diperlukan karena kueri yang berjalan lama sudah berlangsung, operasi penyusutan pada akhirnya akan kehabisan waktu setelah satu menit dan keluar secara diam-diam, mencegah kueri lain diblokir. Untuk informasi selengkapnya, lihat DBCC SHRINKDATABASE.

Untuk informasi tentang manajemen file dan operasi penyusutan khusus untuk Azure SQL Database, lihat Mengelola ruang file untuk database di Azure SQL Database.

Menggunakan SQL Server Management Studio

Berlaku untuk: SQL Server, Azure SQL Managed Instance

Menyusutkan database

  1. Di Object Explorer, sambungkan ke instans Mesin Database SQL Server, lalu perluas instans tersebut.

  2. Perluas Database, lalu klik kanan database yang ingin Anda susutkan.

  3. Arahkan ke Tugas, arahkan ke Susutkan, lalu pilih Database.

    • Database

      Menampilkan nama database terpilih.

    • Ruang yang dialokasikan saat ini

      Menampilkan total ruang yang digunakan dan tidak digunakan untuk database terpilih.

    • Ruang kosong yang tersedia

      Menampilkan jumlah ruang kosong dalam log dan file data dari database yang dipilih.

    • Mengatur ulang file sebelum melepaskan ruang yang tidak digunakan

      Memilih opsi ini setara dengan menjalankan DBCC SHRINKDATABASE yang menentukan opsi persentase target. Menghapus opsi ini setara dengan mengeksekusi DBCC SHRINKDATABASE dengan opsi TRUNCATEONLY. Secara default, opsi ini tidak dipilih saat dialog dibuka. Jika opsi ini dipilih, pengguna harus menentukan opsi persentase target.

    • Ruang kosong maksimum dalam file setelah menyusut

      Masukkan persentase maksimum ruang kosong yang akan dibiarkan dalam file database setelah database disusutkan. Nilai yang diizinkan adalah antara 0 dan 99.

  4. Pilih OK.

Menggunakan Transact-SQL

Menyusutkan database

  1. Koneksi ke Mesin Database.

  2. Dari bilah Standar, pilih Kueri Baru.

  3. Salin dan tempel contoh berikut ke dalam jendela kueri dan pilih Jalankan. Contoh ini menggunakan DBCC SHRINKDATABASE untuk mengurangi ukuran data dan file log dalam UserDB database, dan untuk memungkinkan 10 persen ruang kosong dalam database.

DBCC SHRINKDATABASE (UserDB, 10);
GO

Setelah Anda menyusutkan database

Data yang dipindahkan untuk menyusutkan file dapat tersebar ke lokasi yang tersedia dalam file. Hal ini menyebabkan fragmentasi indeks dan dapat memperlambat performa kueri yang mencari rentang indeks. Untuk menghilangkan fragmentasi, pertimbangkan untuk membangun kembali indeks pada file setelah menyusut. Untuk informasi selengkapnya, lihat Membangun ulang indeks.