Bagikan melalui


MSSQLSERVER_2814

Applies to:SQL Server

Details

Attribute Value
Product Name SQL Server
Event ID 2814
Event Source MSSQLSERVER
Component SQLEngine
Symbolic Name PR_POSSIBLE_INFINITE_RECOMPILE
Message Text Kemungkinan kompilasi ulang tak terbatas terdeteksi untuk SQLHANDLE %hs, PlanHandle %hs, memulai offset %d, mengakhiri offset %d. Alasan kompilasi ulang terakhir adalah %d.

Explanation

Satu atau beberapa pernyataan menyebabkan batch kueri kompilasi ulang setidaknya 50 kali. Pernyataan yang ditentukan harus dikoreksi untuk menghindari kompilasi ulang lebih lanjut.

Tabel berikut mencantumkan alasan kompilasi ulang.

Reason code Description
1 Schema changed
2 Statistics changed
3 Deferred compile
4 Atur perubahan opsi
5 Tabel sementara diubah
6 Set baris jarak jauh diubah
7 Untuk izin penjelajahan diubah
8 Lingkungan pemberitahuan kueri berubah
9 PartitionView changed
10 Opsi kursor berubah
11 Opsi (kompilasi ulang) diminta
12 Rencana berparameter dibersihkan
13 Uji linierisasi rencana
14 Rencana yang memengaruhi versi database berubah
15 Kebijakan memaksa paket Penyimpanan Kueri diubah
16 Penerapan rencana Query Store gagal
17 Penyimpanan Query tidak memiliki rencana
18 Eksekusi interleaved diperlukan kompilasi ulang
19 Bukan kompilasi ulang
20 Petunjuk Penyimpanan Kueri diubah
21 Aplikasi petunjuk Penyimpanan Kueri gagal
22 Kompilasi ulang Penyimpanan Kueri untuk mengambil kueri kursor
23 Kompilasi ulang untuk membersihkan paket dispatcher multiplan

Untuk menampilkan semua kode kompilasi, jalankan kueri tampilan manajemen dinamis berikut:

SELECT * FROM sys.dm_xe_map_values
WHERE name LIKE '%compile%cause%';

User action

  1. Tampilkan pernyataan yang menyebabkan kompilasi ulang dengan menjalankan kueri berikut. Replace the sql_handle, starting_offset, ending_offset, and plan_handle placeholders with the values specified in the error message. Kolom database_name dan object_name adalah NULL untuk ad hoc dan pernyataan Transact-SQL yang disiapkan.

    SELECT DB_NAME(st.dbid) AS database_name,
           OBJECT_NAME(st.objectid) AS object_name,
           st.text
    FROM sys.dm_exec_query_stats AS qs
    CROSS APPLY sys.dm_exec_sql_text(0x01000600B74C2A1300D2582A2100000000000000000000000000000000000000000000000000000000000000
     /* replace the 0x01000600B... value with the actual sql_handle */
    ) AS st
    WHERE qs.statement_start_offset = 123 /* replace 123 with actual starting_offset value */
          AND qs.statement_end_offset = 456 /* replace 456 with actual ending_offset value */
          AND qs.plan_handle = 0x06000100A27E7C1FA821B10600; /* replace 0x06000100A27E7C1FA821B10600 with actual plan_handle value */
    
  2. Berdasarkan deskripsi kode alasan, ubah pernyataan, batch, atau prosedur untuk menghindari kompilasi ulang. Misalnya, prosedur tersimpan mungkin berisi satu atau beberapa SET pernyataan. Pernyataan ini harus dihapus dari prosedur.

    Untuk contoh selengkapnya tentang penyebab dan resolusi kompilasi ulang, lihat Masalah Kompilasi Batch, Kompilasi Ulang, dan Penembolokan Paket di SQL Server 2005. Untuk informasi selengkapnya tentang kompilasi ulang, lihat Rencana eksekusi kompilasi ulang.

  3. Jika masalah berlanjut, hubungi Layanan Dukungan Pelanggan Microsoft.