Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk: SQL Server
Azure SQL Managed Instance
Artikel ini membahas berbagai metode yang bisa Anda gunakan untuk menyusutkan tempdb database di SQL Server.
Anda dapat menggunakan salah satu metode berikut untuk mengubah ukuran tempdb. Tiga opsi pertama dijelaskan dalam artikel ini. Jika Anda ingin menggunakan SQL Server Management Studio (SSMS), ikuti instruksi di Mengecilkan database.
| Metode | Perlu menghidupkan ulang? | Informasi selengkapnya |
|---|---|---|
ALTER DATABASE |
Ya | Memberikan kontrol penuh pada ukuran file default tempdb (tempdev dan templog). |
DBCC SHRINKDATABASE |
Tidak | Beroperasi pada tingkat database. |
DBCC SHRINKFILE |
Tidak | Memungkinkan Anda menyusutkan file individual. |
| SQL Server Management Studio | Tidak | Menyusutkan file database melalui antarmuka pengguna grafis. |
Keterangan
Secara bawaan, database tempdb dikonfigurasi untuk tumbuh otomatis sesuai kebutuhan. Oleh karena itu, database ini mungkin secara tak terduga tumbuh dari waktu ke waktu ke ukuran yang lebih besar dari ukuran yang diinginkan. Ukuran database yang lebih besar tempdb tidak berdampak buruk pada performa SQL Server.
Ketika SQL Server dimulai, tempdb dibuat ulang dengan menggunakan salinan database model, dan tempdb dikembalikan ke ukuran terakhir yang telah dikonfigurasi. Ukuran yang dikonfigurasi adalah ukuran eksplisit terakhir yang Anda tetapkan menggunakan operasi perubahan ukuran file seperti ALTER DATABASE dengan opsi MODIFY FILE, atau pernyataan DBCC SHRINKFILE dan DBCC SHRINKDATABASE. Oleh karena itu, kecuali Anda perlu menggunakan nilai yang berbeda atau ingin segera menyelesaikan database besar tempdb , Anda dapat menunggu mulai ulang layanan SQL Server berikutnya agar ukurannya berkurang.
Anda bisa mengecilkan tempdb saat aktivitas tempdb sedang berlangsung. Namun, Anda mungkin mengalami kesalahan lain seperti pemblokiran, kebuntuan, dan sebagainya, yang dapat mencegah penyusutan selesai. Untuk memastikan bahwa penyusutan tempdb berhasil, lakukan operasi ini saat server berada dalam mode pengguna tunggal, atau ketika Anda menghentikan semua tempdb aktivitas.
SQL Server hanya mencatat informasi yang tempdb cukup dalam log transaksi untuk mengembalikan transaksi, tetapi tidak mengulangi transaksi selama pemulihan database. Fitur ini meningkatkan performa INSERT pernyataan di tempdb. Selain itu, Anda tidak perlu mencatat informasi untuk mengulangi transaksi apa pun karena tempdb dibuat ulang setiap kali Anda menghidupkan ulang SQL Server. Oleh karena itu, tidak memiliki transaksi untuk digulirkan ke depan atau untuk menggulung balik.
Untuk informasi selengkapnya tentang mengelola dan memantau tempdb, lihat Perencanaan kapasitas dan Memantau penggunaan tempdb.
Gunakan perintah ALTER DATABASE
Catatan
Perintah ini hanya berfungsi pada file tempdb logis default tempdev dan templog. Jika Anda menambahkan lebih banyak file ke tempdb, Anda dapat menyusutkannya setelah memulai ulang SQL Server sebagai layanan. Semua tempdb file dibuat ulang selama pengaktifan. Namun, file-file ini kosong dan dapat dihapus. Untuk menghapus file tambahan di tempdb, gunakan perintah ALTER DATABASE dengan opsi REMOVE FILE.
Metode ini mengharuskan Anda untuk memulai ulang SQL Server.
Catatan
Anda dapat terhubung ke instans SQL Server menggunakan alat klien SQL Server yang sudah dikenal, seperti sqlcmd, SQL Server Management Studio (SSMS), atau ekstensi MSSQL untuk Visual Studio Code.
Hentikan SQL Server.
Pada prompt perintah, mulai instans dalam mode konfigurasi minimum. Untuk melakukan ini, ikuti langkah-langkah berikut:
Pada prompt perintah, ubah ke folder tempat SQL Server diinstal (ganti
<VersionNumber>dan<InstanceName>dalam contoh berikut):cd C:\Program Files\Microsoft SQL Server\MSSQL<VersionNumber>.<InstanceName>\MSSQL\BinnJika instans adalah instans bernama SQL Server, jalankan perintah berikut (ganti
<InstanceName>dalam contoh berikut):sqlservr.exe -s <InstanceName> -c -f -mSQLCMDJika instans adalah instans default SQL Server, jalankan perintah berikut:
sqlservr -c -f -mSQLCMDCatatan
Parameter
-cdan-fmenyebabkan SQL Server dimulai dalam mode konfigurasi minimum yang memilikitempdbukuran 1 MB untuk file data, dan 0,5 MB untuk file log. Parameter-mSQLCMDmencegah aplikasi lain selain sqlcmd mengambil alih koneksi pengguna tunggal.
Sambungkan ke SQL Server dengan sqlcmd, lalu jalankan perintah Transact-SQL berikut. Ganti
<target_size_in_MB>dengan ukuran yang Anda inginkan:ALTER DATABASE tempdb MODIFY FILE (NAME = 'tempdev', SIZE = <target_size_in_MB>); ALTER DATABASE tempdb MODIFY FILE (NAME = 'templog', SIZE = <target_size_in_MB>);Hentikan SQL Server. Untuk melakukan ini, tekan
Ctrl+Cdi jendela prompt perintah, mulai ulang SQL Server sebagai layanan, lalu periksa ukurantempdb.mdffile dantemplog.ldf.
Gunakan perintah DBCC SHRINKDATABASE
DBCC SHRINKDATABASE mengambil parameter target_percent. Parameter ini mengatur persentase ruang kosong yang ingin Anda tinggalkan dalam file database setelah menyusutkan database. Jika Anda menggunakan DBCC SHRINKDATABASE, Anda mungkin perlu memulai ulang SQL Server.
Gunakan prosedur tersimpan
sp_spaceuseduntuk memeriksa ruang yang saat ini digunakan olehtempdb. Kemudian, hitung persentase ruang kosong yang akan digunakan sebagai parameter untukDBCC SHRINKDATABASE. Perhitungan ini didasarkan pada ukuran database yang diinginkan.Catatan
Dalam beberapa kasus, Anda mungkin perlu menjalankan
sp_spaceused @updateusage = trueuntuk menghitung ulang ruang yang digunakan dan mendapatkan laporan yang diperbarui. Untuk informasi selengkapnya, lihat sp_spaceused.Pertimbangkan contoh berikut:
Asumsikan bahwa
tempdbmemiliki dua file: file data utama (tempdb.mdf) yaitu 1.024 MB dan file log (tempdb.ldf) yaitu 360 MB. Asumsikan bahwasp_spaceusedmelaporkan bahwa file data utama berisi 600 MB data. Selain itu, asumsikan bahwa Anda ingin menyusutkan file data utama menjadi 800 MB. Hitung persentase ruang kosong yang diinginkan setelah penyusutan: 800 MB - 600 MB = 200 MB. Sekarang, bagi 200 MB dengan 800 MB = 25 persen, dan nilai itu adalahtarget_percentAnda. File log transaksi disusutkan sesuai dengan itu, membiarkan 25 persen atau 200 MB ruang kosong setelah database menyusut.Jalankan perintah Transact-SQL berikut. Ganti
<target_percent>dengan persentase yang diinginkan:DBCC SHRINKDATABASE (tempdb, '<target_percent>');
Perintah DBCC SHRINKDATABASE memiliki batasan saat digunakan pada tempdb. Anda tidak dapat mengatur ukuran target untuk data dan file log menjadi lebih kecil dari ukuran yang ditentukan saat database dibuat. Anda juga tidak dapat mengaturnya lebih kecil dari ukuran terakhir yang Anda tetapkan secara eksplisit dengan menggunakan operasi pengubahan ukuran file seperti ALTER DATABASE dengan MODIFY FILE opsi . Batasan lain dari DBCC SHRINKDATABASE adalah perhitungan parameter target_percentage dan ketergantungannya pada ruang yang digunakan saat ini.
Gunakan perintah DBCC SHRINKFILE
DBCC SHRINKFILE Gunakan perintah untuk menyusutkan file individualtempdb.
DBCC SHRINKFILE memberikan lebih banyak fleksibilitas daripada DBCC SHRINKDATABASE karena Anda dapat menggunakannya pada satu file database tanpa memengaruhi file lain yang termasuk dalam database yang sama.
DBCC SHRINKFILE mengambil parameter target_size. Parameter ini menetapkan ukuran akhir yang diinginkan untuk file database.
Tentukan ukuran yang diinginkan untuk file data utama (
tempdb.mdf), file log (templog.ldf), dan file tambahan yang ditambahkan ketempdb. Pastikan bahwa ruang yang digunakan dalam file kurang dari atau sama dengan ukuran target yang diinginkan.Sambungkan ke SQL Server dengan SSMS, Visual Studio Code, atau sqlcmd. Kemudian jalankan perintah Transact-SQL berikut untuk file database tertentu yang ingin Anda susutkan. Ganti
<target_size_in_MB>dengan ukuran yang diinginkan:USE tempdb; GO -- This command shrinks the primary data file DBCC SHRINKFILE (tempdev, '<target_size_in_MB>'); GO -- This command shrinks the log file, examine the last paragraph. DBCC SHRINKFILE (templog, '<target_size_in_MB>'); GO
Keuntungannya DBCC SHRINKFILE adalah dapat mengurangi ukuran file ke ukuran yang lebih kecil dari ukuran aslinya. Anda dapat menjalankan DBCC SHRINKFILE pada salah satu dari file data atau log. Anda tidak bisa membuat database lebih kecil dari ukuran model database.
Kesalahan 8909 saat Anda menjalankan operasi penyusutan
Jika tempdb sedang digunakan dan Anda mencoba menyusutkannya dengan menggunakan DBCC SHRINKDATABASE perintah atau DBCC SHRINKFILE , Anda mungkin menerima pesan yang menyerupai output berikut. Pesan yang tepat tergantung pada versi SQL Server yang Anda gunakan:
Server: Msg 8909, Level 16, State 1, Line 1 Table error: Object ID 0, index ID -1, partition ID 0, alloc unit ID 0 (type Unknown), page ID (6:8040) contains an incorrect page ID in its page header. The PageId in the page header = (0:0).
Kesalahan ini tidak menunjukkan kerusakan nyata di tempdb. Namun, mungkin ada alasan lain untuk kesalahan kerusakan data fisik seperti kesalahan 8909, dan alasan tersebut termasuk masalah subsistem I/O. Oleh karena itu, jika kesalahan terjadi di luar operasi penyusutan, Anda harus menyelidiki lebih lanjut.
Meskipun pesan 8909 dikembalikan ke aplikasi atau kepada pengguna yang menjalankan operasi penyusutan, operasi penyusutan tidak gagal.
Konten terkait
- Pertimbangan untuk pengaturan autogrow dan autoshrink di SQL Server
- File database dan filegroup
- sys.databases (T-SQL)
- sys.database_files (Transact-SQL)
- Mengecilkan ukuran database
- DBCC SHRINKDATABASE (Transact-SQL)
- DBCC SHRINKFILE (Transact-SQL)
- Menghapus Data atau File Log dari Database
- Menyusutkan file