Domanda

Il server A e il server B hanno identiche configurazioni hardware e istanza (A è la produzione, B è QA). I DB di B sono stati ripristinati dai backup di A di una settimana fa. Mi è stata fornita questa domanda dal team di sviluppo.

SELECT 
        c.Start
        ,c.[End]
        ,c.Word
        ,doc.UniqueDocumentNumber
        ,doc.EID
        ,c.CUI
        ,c.Concept
        ,a.OID
        ,doc.DocumentTypeName
        ,doc.ActivityDtTm
        ,CAST(doc.DocumentTypeId AS INT) AS MedCode
        ,CASE WHEN c.[Count] = 0 THEN  CAST(0.00 AS REAL)
           ELSE CAST(LOG(c.TotalCount / c.[Count]) AS REAL) END AS 'idf'
        ,c.[Count]
        ,c.TotalCount
FROM ECHO..AEID201 a
INNER JOIN ALPHA..XADocuments doc (NOLOCK) ON a.EID = doc.EID
CROSS APPLY (SELECT t.start,t.[end],t.word,t.cui,t.eid,
   t.UniqueDocumentNumber,cu.[Count],cc.TotalCount,core.Concept 
FROM HOTEL.dbo.Htf_Index AS t
INNER JOIN HOTEL..Doc_CUI_Counter AS cu ON cu.CUI=t.CUI AND cu.DocumentTypeID=t.DocumentTypeID
INNER JOIN HOTEL..Doc_Counter AS cc ON cc.DocumentTypeID=t.DocumentTypeID
INNER JOIN HOTEL..CUI_CORE AS core ON core.CUI=cu.CUI
WHERE t.eid = doc.eid AND doc.UniqueDocumentNumber=t.UniqueDocumentNumber
) AS c
WHERE a.OID='00005159-9567-4187-a278-5b8e1e2ed20c' 
AND ISNUMERIC(doc.DocumentTypeId) = 1

Sul server B, la revisione del piano di esecuzione indica che i criteri per la tabella [A] in basso fanno parte di un'operazione di ricerca dell'indice all'inizio del piano di esecuzione, il che rende l'esecuzione rapida della sottocquery [C].

Sul server A, la revisione dello stesso piano di esecuzione indica che la sottoquery [C] si sta eseguendo per prima con scansioni di indice complete a causa di criteri esterni non applicati.

Gli indici utilizzati in entrambi i piani di esecuzione sono identici. I conteggi delle righe della tabella sono leggermente più grandi sul server A poiché il ripristino a causa delle normali operazioni, ma la frammentazione dell'indice è quasi identica. Un indice partecipante sulla tabella [T] nella sottoquery sul server B ha il doppio del numero di pagine come sul server A ma identico conteggio delle righe. Le statistiche vengono aggiornate ogni notte contemporaneamente su entrambi i server.

Ho tentato le ricostruzioni dell'indice sulla tabella [t] e l'aggiornamento manuale delle statistiche per tentare di ottenere entrambi i piani di esecuzione da abbinare. Quali altri fattori potrebbero causare questo cambiamento nell'ordine di esecuzione?

Ho suggerito allo sviluppatore che sostituisce la sottoquery con un UDF che prende i campi EID e UniquedocumentNumber da [DOC] come argomenti. Quali altre opzioni posso esplorare con lo sviluppatore per aumentare la probabilità che i piani di esecuzione sul QA vengano utilizzati su Prod?

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a dba.stackexchange
scroll top