FIX: Kinerja lambat atau kebuntuan ketika Anda gulung balik database dan mengeksekusi pernyataan pada waktu yang sama di SQL Server 2012

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 2725950 - Melihat produk di mana artikel ini berlaku.
Microsoft mendistribusikan perbaikan Microsoft SQL Server 2012 sebagai satu file download. Karena perbaikan kumulatif, setiap rilis baru berisi semua perbaikan terbaru dan semua perbaikan keamanan yang disertakan dengan sebelumnya SQL Server 2012 fix rilis.
Perbesar semua | Perkecil semua

Pada Halaman ini

Gejala

Skenario 1

Pertimbangkan skenario berikut:
  • Anda gulung balik database dalam Microsoft SQL Server 2012.
  • Sebelum operasi pemulihan database selesai, proses lain referensi sys.database_recovery_status katalog tampilan dan memerlukan bukti kunci pada database yang sama. Misalnya, Anda menjalankan Pilih pernyataan berikut:

    SELECT * FROM sys.database_recovery_status
Dalam skenario ini, kinerja lambat terjadi di mana proses untuk Pilih pernyataan menunggu sampai database pemulihan proses selesai.

Skenario 2

Pertimbangkan skenario berikut:
  • Anda gulung balik database SQL Server 2012.
  • Sebelum operasi pemulihan database selesai, Anda mengeksekusi pernyataan berikut:

    IF EXISTS (SELECT * FROM sys.database_recovery_status WHERE database_id= DataBaseID AND database_guid IS NOT NULL)
    Catatan The DataBaseID mewakili ID dari database di mana Anda melakukan operasi pemulihan database.
Dalam skenario ini, kebuntuan terjadi dalam proses pemulihan database. Kebuntuan ini menyebabkan proses pemulihan database gagal.

Penyebab

Dua skenario yang dijelaskan di bagian "Gejala" disebabkan oleh penyebab sama.

Di bagian "Scenario1", masalah ini terjadi karena proses pemulihan database membutuhkan exclusive lock pada database. Ketika Anda mengeksekusi pernyataan yang disebutkan di bagian tersebut, bersama bukti kunci diperlukan pada database yang sama. Oleh karena itu, bukti kunci bersama menunggu untuk exclusive lock sampai exclusive lock dirilis.

Di bagian "Skenario 2", ketika Anda mengeksekusi pernyataan yang disebutkan di bagian itu, bukti kunci bersama diperlukan pada database yang sama serta Daftar Tabel sys.sysdbreg . Pada tahap terakhir dari proses pemulihan database, proses membutuhkan bukti kunci update pada Daftar Tabel sys.sysdbreg . Namun, bersama bukti kunci tidak dirilis dari database. Oleh karena itu, kebuntuan terjadi di tabel atak sys.sysdbreg , dan proses pemulihan database bertekad untuk menjadi korban kebuntuan.

Pemecahan masalah

Informasi pembaruan kumulatif

Paket pembaruan kumulatif 1 untuk SQL Server 2012 Service Pack 1

Perbaikan untuk masalah ini pertama kali dirilis pada 1 Update kumulatif. Untuk informasi lebih lanjut tentang cara mendapatkan paket pembaruan kumulatif ini untuk SQL Server 2012 Service Pack 1, klik nomor artikel berikut ini untuk melihat artikel di dalam Pangkalan Pengetahuan Microsoft:
2765331 Paket pembaruan kumulatif 1 untuk SQL Server 2012 Service Pack 1
Catatan Karena membangun kumulatif, setiap baru memperbaiki rilis berisi semua perbaikan terbaru dan semua perbaikan keamanan yang disertakan dengan sebelumnya SQL Server 2012 fix rilis. Kami sarankan agar Anda menerapkan rilis perbaikan terbaru yang berisi perbaikan terbaru ini. Untuk informasi lebih lanjut, klik nomor artikel berikut ini untuk melihat artikel di dalam Pangkalan Pengetahuan Microsoft:
2772858 SQL Server 2012 membangun yang dibebaskan setelah SQL Server 2012 Service Pack 1 telah dirilis

Paket pembaruan kumulatif 3 untuk SQL Server 2012

Perbaikan untuk masalah ini pertama kali dirilis pada 3 Update kumulatif. Untuk informasi lebih lanjut tentang cara mendapatkan paket pembaruan kumulatif ini untuk SQL Server 2012, klik nomor artikel berikut ini untuk melihat artikel di dalam Pangkalan Pengetahuan Microsoft:
2723749 Pembaruan kumulatif 3 untuk SQL Server 2012
Catatan Karena membangun kumulatif, setiap baru memperbaiki rilis berisi semua perbaikan terbaru dan semua perbaikan keamanan yang disertakan dengan sebelumnya SQL Server 2012 fix rilis. Kami sarankan agar Anda menerapkan rilis perbaikan terbaru yang berisi perbaikan terbaru ini. Untuk informasi lebih lanjut, klik nomor artikel berikut ini untuk melihat artikel di dalam Pangkalan Pengetahuan Microsoft:
2692828 SQL Server 2012 membangun yang dibebaskan setelah SQL Server 2012 dirilis

Status

Microsoft telah mengkonfirmasi bahwa ini merupakan masalah di dalam produk Microsoft sebagaimana didaftar di dalam bagian "Applies to".

Teknik pemecahan masalah

Untuk mengatasi masalah dalam skenario 2, gunakan salah satu metode berikut.
Metode 1


Mengubah pernyataan untuk menghindari bukti kunci bersama di tabel atak sys.sysdbreg dengan menggunakan tanda-tanda "NOLOCK".
IF EXISTS (SELECT * FROM sys.database_recovery_status with(NOLOCK) WHERE database_id= DataBaseID AND database_guid IS NOT NULL)
Metode 2
Menentukan prioritas kebuntuan pernyataan untuk "Rendah."
SET DEADLOCK_PRIORITY LOW
IF EXISTS(SELECT * FROM sys.database_recovery_status where database_id = DataBaseID AND database_guid IS NOT NULL)
Catatan Bila Anda menggunakan metode kedua untuk menghindari kebuntuan dalam pernyataan dan proses pemulihan database, kode dalam pernyataan jika tidak akan dijalankan.

Referensi

Untuk informasi lebih lanjut tentang exclusive lock, bersama bukti kunci, dan pembaruan bukti kunci, pergi ke website MSDN berikut:
Informasi umum tentang bukti kunci mode
Untuk informasi lebih lanjut Model pelayanan inkremental untuk SQL Server, klik nomor artikel berikut ini untuk melihat artikel di dalam Pangkalan Pengetahuan Microsoft:
935897 Model pelayanan tambahan tersedia dari tim SQL Server untuk memberikan hotfix untuk masalah yang dilaporkan
Untuk informasi lebih lanjut tentang Skema penamaan SQL Server pembaruan, klik nomor artikel berikut ini untuk melihat artikel di dalam Pangkalan Pengetahuan Microsoft:
822499 Skema penamaan untuk paket pembaruan peranti penangkap lunak Microsoft SQL Server
Untuk informasi selengkapnya tentang terminologi pembaruan peranti penangkap lunak, klik nomor artikel berikut ini untuk melihat artikel di dalam Pangkalan Pengetahuan Microsoft:
824684 Keterangan tentang terminologi standar yang digunakan untuk menjelaskan pembaruan peranti penangkap lunak Microsoft

Properti

ID Artikel: 2725950 - Kajian Terakhir: 20 November 2012 - Revisi: 2.0
Berlaku bagi:
  • Microsoft SQL Server 2012 Developer
  • Microsoft SQL Server 2012 Enterprise
  • Microsoft SQL Server 2012 Express
  • Microsoft SQL Server 2012 Standard
  • Microsoft SQL Server 2012 Web
Kata kunci: 
kbtshoot kbqfe kbfix kbsurveynew kbexpertiseadvanced kbmt KB2725950 KbMtid
Penerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini: 2725950

Berikan Masukan

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com