Bagikan melalui


MSSQLSERVER_1204

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Detail

Atribut Nilai
Nama Produk SQL Server
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 dapat menggunakan lebih dari 60 persen memori yang tersedia untuk SQL Server, dan ambang batas telah terpenuhi.

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

  • Anda 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, coba opsi 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:

      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 merilis memori dari proses lain untuk SQL Server.

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

  • Jika Anda menduga bahwa manajer kunci menggunakan jumlah maksimum memori yang tersedia, identifikasi transaksi yang memegang kunci terbanyak dan hentikan. Skrip berikut 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.