Aracılığıyla paylaş


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 SQLHANDLE %hs, PlanHandle %hs, başlangıç konumu %d, bitiş konumu %dolan olası bir sonsuz yeniden derleme algılandı. Son yeniden derleme nedeni %d.

Explanation

Bir veya daha fazla deyim, sorgu toplu işleminin en az 50 kez yeniden derlenmesine neden oldu. Daha fazla yeniden derlemeyi önlemek için belirtilen deyim düzeltilmelidir.

Aşağıdaki tabloda yeniden derlemenin nedenleri listelenmiştir.

Reason code Description
1 Schema changed
2 Statistics changed
3 Deferred compile
4 Seçenek değişikliğini ayarla
5 Geçici tablo değiştirildi
6 Uzak satır kümesi değiştirildi
7 Değiştirilen göz atma izinleri için
8 Sorgu bildirim ortamı değiştirildi
9 PartitionView changed
10 İmleç seçenekleri değiştirildi
11 Seçenek (yeniden derleme) istendi
12 Parametreli plan boşaltıldı
13 Test planı doğrusallaştırma
14 Veritabanı sürümünü etkileyen plan değiştirildi
15 Sorgu Deposu planı zorlama ilkesi değiştirildi
16 Sorgu Deposu planı zorlanamadı
17 Sorgu Deposu planı eksik
18 Araya kaydedilen yürütme gerekli yeniden derleme
19 Yeniden derleme değil
20 Sorgu Deposu ipuçları değiştirildi
21 Sorgu Deposu ipuçları uygulaması başarısız oldu
22 İmleç sorgusunu yakalamak için Sorgu Deposu yeniden derleme
23 Çok düzlemli dağıtıcı planını temizlemek için yeniden derleme

Tüm derleme kodlarını görüntülemek için aşağıdaki dinamik yönetim görünümü sorgusunu çalıştırın:

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

User action

  1. Aşağıdaki sorguyu çalıştırarak yeniden derlemeye neden olan deyimini görüntüleyin. Replace the sql_handle, starting_offset, ending_offset, and plan_handle placeholders with the values specified in the error message. database_name ve object_name sütunları NULL geçici ve hazırlanmış Transact-SQL deyimleri içindir.

    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. Neden kodu açıklamasına bağlı olarak, yeniden derlemeleri önlemek için deyimini, toplu işlemi veya yordamı değiştirin. Örneğin, saklı yordam bir veya daha fazla SET deyim içerebilir. Bu deyimler yordamdan kaldırılmalıdır.

    Yeniden derleme nedenleri ve çözümleri hakkında daha fazla örnek için bkz. SQL Server 2005'te Toplu Derleme, Yeniden Derleme ve Plan Önbelleğe Alma Sorunları. Yeniden derlemeler hakkında daha fazla bilgi için bkz. Yürütme planlarını yeniden derleme.

  3. Sorun devam ederse Microsoft Müşteri Destek Hizmetleri'ne başvurun.