MSDB adalah database sistem yang digunakan oleh SQL Server. MSDB menyimpan semua jenis data, seperti riwayat pencadangan dan pemulihan, riwayat pekerjaan Agen SQL, riwayat monitor pengiriman log, paket SSIS, data Penasihat Penyetelan Mesin Basis Data, dan data antrian Pialang Layanan. Sama seperti database pengguna, msdb membutuhkan pemeliharaan rutin, termasuk pengoptimalan indeks dan, yang lebih penting, pembersihan rutin.
Riwayat Pencadangan dan Pemulihan
Secara default, tidak ada metode untuk membersihkan atau menghapus cadangan dan memulihkan riwayat dari msdb. Itu disimpan selamanya sampai Anda mengatur proses manual atau otomatis untuk menghapus data. Dengan tidak menghapus data ini, msdb akan terus bertambah, yang berarti membaca dan menulis ke tabel tersebut dapat menjadi lebih lambat dan memengaruhi kecepatan tugas pencadangan Anda.
Sebagian besar alat pihak ketiga dan solusi pemeliharaan terkemuka menyertakan proses untuk menghapus riwayat pencadangan dan pemulihan untuk mencegah hal ini menjadi masalah. Cara mudah untuk mengetahui apakah Anda membersihkan riwayat pencadangan atau tidak adalah dengan menanyakan msdb secara langsung:
SELECT CONVERT(CHAR(100), SERVERPROPERTY('Servername')) AS Server, msdb.dbo.backupset.database_name, msdb.dbo.backupset.backup_finish_date, CASE msdb..backupset.type WHEN 'D' THEN ' Database' KETIKA 'L' LALU 'Log' SELESAI backup_typeFROM msdb.dbo.backupmediafamilyINNER GABUNG msdb.dbo.backupset PADA msdb.dbo.backupmediafamily.media_set_id =msdb.dbo.backupset.media_set_idORDER OLEH /pra>Jika Anda memiliki riwayat pencadangan atau pemulihan sejak lebih dari 90 hari, maka Anda harus menyelidiki apakah ada persyaratan peraturan yang mengamanatkan bahwa Anda harus menyimpan informasi historis tentang cadangan tersebut untuk jangka waktu tertentu. Jika tidak ada persyaratan, maka Anda harus mempertimbangkan untuk menghapus data yang lebih lama dari periode waktu tertentu. Riwayat pencadangan tidak diperlukan untuk memulihkan basis data Anda, dan kami sarankan untuk menghapusnya secara teratur untuk menjaga msdb pada ukuran yang wajar. Menjaga 90 hari atau kurang adalah kisaran yang biasanya saya rekomendasikan kepada klien.
Untuk menyiapkan proses pembersihan riwayat pencadangan dan pemulihan, buat tugas yang menjalankan
sp_delete_backuphistory
prosedur tersimpan di msdb dan berikan parameter tanggal. Prosedur tersimpan akan menghapus semua riwayat pencadangan dan pemulihan yang lebih lama dari tanggal yang Anda berikan. Anda juga dapat membuat Rencana Pemeliharaan Basis Data dan menggunakan tugas Membersihkan Riwayat.Penasihat Penyetelan Mesin Basis Data
Penasihat Penyetelan Mesin Basis Data, juga dikenal sebagai DTA, adalah alat yang dapat digunakan pengembang dan Administrator Basis Data untuk membantu menyempurnakan basis data. DTA memanfaatkan database msdb untuk menyimpan riwayat penyetelan dan objek pendukung lainnya.
Saya secara rutin menemukan sisa-sisa DTA di msdb di server produksi klien. Ketika saya menemukan tabel ini, saya langsung menanyakannya untuk menentukan apakah DTA masih digunakan. Untungnya, saya belum menemukan klien yang secara aktif menjalankan DTA terhadap produksi, karena dapat memengaruhi kinerja secara signifikan. Setelah saya mengkonfirmasi dan berkomunikasi dengan klien, saya menjatuhkan tabel DTA dari msdb. Dalam beberapa kasus ini membebaskan beberapa gigabyte ruang. Sebagai tindakan pencegahan, saya juga meluangkan waktu untuk menjelaskan dampak kinerja menjalankan DTA terhadap produksi dapat menyebabkan dan mendorong klien saya bahwa penggunaan apa pun di masa mendatang harus dilakukan pada server pengembangan.
Agen SQL Server
Kadang-kadang, saya akan menemukan klien yang secara tidak sengaja menghapus centang pada kotak untuk membatasi ukuran log riwayat pekerjaan. Ini adalah kesalahan yang mudah dilakukan jika Anda memiliki server yang sibuk dan log terus bergulir begitu cepat sehingga Anda tidak memiliki riwayat pekerjaan yang berguna untuk referensi saat memecahkan masalah pekerjaan Agen Server SQL. Pendekatan yang lebih baik adalah meningkatkan ukuran log riwayat pekerjaan maksimum (dalam baris) ke nilai yang jauh lebih tinggi daripada membiarkannya tumbuh tanpa batas.
Dalam kasus di mana klien memiliki pertumbuhan pekerjaan yang tidak dibatasi, tabel sysjobhistory telah tumbuh terlalu besar dan perlu dibersihkan. Cara terbaik untuk membersihkan riwayat adalah dengan menggunakan
sp_purge_jobhistory
dan berikan parameter tanggal. Prosedur tersimpan akan menghapus semua riwayat pekerjaan yang lebih lama dari tanggal yang Anda berikan. Jika Anda harus menyimpan jumlah hari minimum riwayat Agen Server SQL, membatasi log riwayat pekerjaan berdasarkan baris tidak efektif. Sebaliknya, jangan membatasi ukuran log riwayat pekerjaan dan juga menjadwalkan pekerjaan yang akan menjalankan sp_purge_jobhistory dan meneruskan parameter tanggal untuk jumlah hari minimum riwayat pekerjaan yang Anda butuhkan. Adalah umum untuk menggunakan nilai 14 atau 30 hari.Broker Layanan
Baru-baru ini saya mengalami masalah dengan klien di mana msdb telah berkembang menjadi 14GB. Setelah upaya memperbarui instans ke paket layanan saat ini, pemutakhiran gagal menerapkan skrip ke msdb dan menyebabkan msdb tumbuh lagi secara eksponensial. Setelah beberapa penelitian, kami menemukan bahwa Service Broker diaktifkan untuk pemberitahuan acara tetapi tidak dikonfigurasi dengan benar. Selama lebih dari setahun pemberitahuan acara sedang diantrekan, tetapi tidak dialihkan.
Dalam memeriksa sys.transmission_queue saya menemukan bahwa broker layanan di database target tidak tersedia, dan broker layanan secara administratif dinonaktifkan. Saya kemudian memeriksa untuk melihat pemberitahuan acara apa yang disiapkan dengan menanyakan sys.server_events_notifications dan hanya menemukan satu entri:tangkap semua peristiwa log kesalahan. Saya kemudian menanyakan sys.transmissions_queue untuk melihat berapa banyak peristiwa dalam antrian dan menemukan beberapa juta catatan di sana.
Setelah mendiskusikan hal ini dengan klien dan menjelaskan temuannya, kami sepakat bahwa tindakan terbaik adalah membatalkan pemberitahuan acara dan menghapus antrian saat ini dengan membuat broker baru. Untuk melakukan ini, saya menjalankan ALTER DATABASE msdb SET NEW_BROKER. Ini dilakukan setelah jam kerja dan setelah pencadangan penuh msdb yang baik.
Setelah menghapus transmission_queue dan menghapus acara, saya dapat mengurangi msdb dari 14GB menjadi 300MB. Sebelum memperbaiki masalah ini, database msdb memiliki latensi disk tertinggi pada instans dan klien mengalami kebuntuan biasa. Setelah menerapkan perubahan ini, serta pengoptimalan lainnya, pengalaman pengguna klien sangat meningkat.
Pengiriman Log
Di awal karir DBA saya, saya mewarisi server konsolidasi yang memiliki beberapa ratus database yang Dikirimkan secara Log ke server sekunder di pusat data lain. Server ini telah aktif dan berjalan selama beberapa tahun dan mengirimkan log setiap 15 menit. Instance ini tidak hanya menderita karena tidak menghapus riwayat pencadangan, tetapi juga tidak menghapus riwayat monitor Pengiriman Log dengan benar. Setelah saya membersihkan riwayat pencadangan dan memeriksa ukuran msdb, itu masih menunjukkan lebih banyak ruang yang digunakan daripada yang seharusnya. Saya menjalankan skrip untuk menunjukkan ukuran total setiap tabel dan menemukan bahwa
log_shipping_monitor_history_detail
meja itu sangat besar. Dalam hal ini saya dapat menjalankansp_cleanup_log_shipping_history
untuk membersihkan riwayat dan mengembalikan msdb ke ukuran normal.Pengindeksan
Mengoptimalkan indeks di msdb sama pentingnya dengan database pengguna Anda. Sering kali saya menemukan klien yang mengoptimalkan basis data pengguna tetapi bukan basis data sistem. Karena database msdb banyak digunakan oleh SQL Server Agent, Log Shipping, Service Broker, SSIS, backup dan restore, dan proses lainnya, indeks bisa menjadi sangat terfragmentasi. Pastikan bahwa pekerjaan pengoptimalan indeks Anda juga menyertakan database sistem Anda, atau setidaknya msdb. Saya telah melihat pengoptimalan indeks membebaskan beberapa gigabyte ruang dari indeks yang sangat terfragmentasi dalam msdb.
Ringkasan
Mengabaikan msdb dapat berdampak negatif pada kinerja lingkungan Anda. Sangat penting untuk memantau ukuran msdb, serta proses yang menggunakannya, untuk memastikan kinerjanya optimal. Riwayat pencadangan dan pemulihan adalah alasan paling umum mengapa basis data msdb membengkak, namun Penasihat Penyetelan Mesin Basis Data, riwayat Agen Server SQL, broker layanan, pengiriman log, dan kurangnya pemeliharaan indeks, semuanya dapat berkontribusi pada pertumbuhan msdb yang berlebihan dan memengaruhi kinerja basis data.