MSSQLSERVER_1204

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Detail

Atribut Value
Nama Produk Server SQL
ID Peristiwa 1204
Sumber Kejadian MSSQLSERVER
Komponen SQLEngine
Nama Simbolis LK_OUTOF
Teks Pesan Instans Mesin Database SQL Server tidak dapat memperoleh sumber daya LOCK saat ini. Jalankan ulang pernyataan Anda saat ada lebih sedikit pengguna aktif. Minta administrator database untuk memeriksa konfigurasi kunci dan memori untuk instans ini, atau untuk memeriksa transaksi yang berjalan lama.

Penjelasan

Selama eksekusi, kueri sering memperoleh dan melepaskan kunci pada sumber daya yang mereka akses. Memperoleh kunci menggunakan struktur kunci dari kumpulan struktur kunci yang tersedia. Ketika kunci baru tidak dapat diperoleh karena tidak ada lagi struktur kunci yang tersedia di kumpulan, pesan kesalahan 1204 dikembalikan. Masalah ini dapat disebabkan oleh salah satu alasan berikut:

  • SQL Server tidak dapat mengalokasikan lebih banyak memori, baik karena proses lain menggunakannya, atau karena SQL Server telah menggunakan semua memorinya dan mencapai nilai yang dikonfigurasi menggunakan opsi konfigurasi memori server maks.

  • Manajer kunci tidak akan menggunakan lebih dari 60 persen memori yang tersedia untuk SQL Server, dan ambang batas telah terpenuhi.

  • Anda telah menyiapkan kunci opsi konfigurasi dari prosedur tersimpan sistem sp_configure ke nilai non-default dan tidak dinamis.

  • Anda telah mengaktifkan bendera pelacakan 1211, 1224, atau keduanya di SQL Server Anda untuk mengontrol perilaku eskalasi kunci, dan Anda menjalankan kueri yang memerlukan banyak kunci.

Tindakan Pengguna

  • Jika Anda menduga bahwa SQL Server tidak dapat mengalokasikan memori yang memadai, cobalah hal berikut:

    • Identifikasi apakah ada petugas memori lain di dalam SQL Server yang telah menggunakan sebagian besar memori yang dikonfigurasi SQL Server dengan menggunakan kueri seperti berikut ini:

      SELECT pages_kb, type, name, virtual_memory_committed_kb, awe_allocated_kb
      
      FROM sys.dm_os_memory_clerks
      
      ORDER BY pages_kb DESC
      

      Kemudian kurangi konsumsi memori petugas memori tersebut agar memori kunci dapat menggunakan lebih banyak sumber daya. Untuk informasi selengkapnya, lihat Memecahkan masalah memori atau memori rendah di SQL Server.

    • Jika aplikasi selain SQL Server menggunakan sumber daya, coba hentikan aplikasi ini atau pertimbangkan untuk menjalankannya di server terpisah. Ini akan merilis memori dari proses lain untuk SQL Server.

    • Jika Anda telah mengonfigurasi memori server maks, tingkatkan pengaturan memori server maks.

  • Jika Anda mencurigai bahwa pengelola kunci telah menggunakan jumlah maksimum memori yang tersedia, identifikasi transaksi yang paling banyak menyimpan kunci dan hentikan. Skrip berikut akan mengidentifikasi transaksi yang memiliki kunci terbanyak:

    SELECT request_session_id, COUNT (*) num_locks  
    FROM sys.dm_tran_locks  
    GROUP BY request_session_id   
    ORDER BY count (*) DESC  
    

    Ambil id sesi tertinggi, dan hentikan dengan menggunakan perintah KILL .

  • Jika Anda menggunakan nilai non-default untuk locks, gunakan sp_configure untuk mengubah nilai locks ke pengaturan defaultnya dengan menggunakan pernyataan berikut:

    EXEC sp_configure 'locks', 0
    
  • Jika Anda menemukan pesan kesalahan di atas saat menggunakan bendera pelacakan SQL Server 1211, 1224, atau keduanya, tinjau penggunaannya dan nonaktifkan saat menjalankan kueri yang memerlukan sejumlah besar kunci. Untuk informasi selengkapnya, tinjau DBCC TRACEON - Trace Flags (Transact-SQL) dan Atasi masalah pemblokiran yang disebabkan oleh eskalasi kunci di SQL Server.