2009-05-14 9 views
8

Ho un'applicazione scritta in C# che utilizza Linq2SQL per comunicare con SQL Server. Ci sono alcune query che funzionano un po '(molto) lente, e penso che probabilmente abbia bisogno di alcuni indici per accelerare le cose.SQL Server: Evento non fa riferimento a nessuna tabella (avviso di Ottimizzazione guidata)

Ma io non so davvero come farlo o su cosa o dove o cosa dovrei o non dovrei fare. Quindi stavo pensando che potrei chiedere qui, ma poi ho scoperto il programma chiamato Ottimizzazione guidata motore di database che ho pensato di provare prima. Il problema è che non riesco a farlo funzionare. Probabilmente sono io che non so proprio come, ma non riesco proprio a capirlo. Per quanto posso vedere, ho fatto quello che dovrei fare secondo i file di aiuto.

  1. Aprire SQL Server Profiler.
  2. Avvia un nuovo Traccia utilizzando il modello sintonia .
  3. Avvia la mia applicazione e faccio alcune cose che generano query SQL.
  4. Chiude la mia domanda.
  5. Interrompe la traccia.
  6. Salvare la traccia come file di traccia.
  7. Aprire guidata motore di database
  8. Scegli File come Workload e selezionare il file Trace ho salvato in precedenza.
  9. Selezionare i database utilizzati dall'applicazione sotto Selezionare database e tabelle per ottimizzare.
  10. Fare clic su Inizia analisi.

Fin qui ho pensato che le cose andassero bene. Ma quando finisce dopo un po 'poco, ottengo questo:

Progress http://i39.tinypic.com/1235avd.jpg

E una completamente empy Raccomandazioni pagina. Evento non fa riferimento a nessuna tabella? Cosa significa (oltre all'ovvio ovviamente: p)? Ho frainteso qualcosa sul processo qui? Cosa sta succedendo?

+0

I comandi nella colonna "Evento" corrispondono a ciò che si aspettava di vedere? Riconoscete cose lì come provengono dalla vostra applicazione? – codeulike

+0

non tutti, ma molti di loro. – Svish

risposta

7

Penso che il motivo per cui non si ottengono raccomandazioni è perché non si dispone delle autorizzazioni "SHOWPLAN" sul proprio database. Concedi all'utente che stai utilizzando l'analizzatore che accede e riprova.

Inoltre, vedo anche alcuni errori di "nome oggetto non valido": accertarsi che l'utente che si sta eseguendo l'analizzatore abbia le autorizzazioni appropriate per tutte le tabelle coinvolte.

+0

Sì, l'ho scoperto anche io. Quale ho riparato ora. Ma continuo a ricevere "Evento non fa riferimento a nessun tavolo" seguito da "Evento sostituito bla bla". – Svish

+0

Hm ... Ho provato alcune altre operazioni più pesanti nella mia applicazione e sembra che funzioni adesso, anche se ricevo ancora un sacco di quei messaggi ... * confuso *. Oh bene ... accetterò la tua risposta da quando hai preso quella roba da SHOWPLAN. Pensa che più l'operazione più pesante avrebbe potuto fare la differenza =) – Svish

+0

Funziona per me. Grazie! – jeromeyers

7

C'è un'altra cosa che puoi controllare se ottieni questo errore. Se sei un tipo come me potresti aver dimenticato di selezionare il database appropriato dal menu a discesa "Database per analisi del carico di lavoro" nella scheda Generale

+1

Questo campo non deve essere impostato sul database che contiene la tabella su cui si desidera creare l'indice. È il db a cui inizierà il tuning advisor. Passerà quindi al db corretto come specificato nel file del carico di lavoro. – Gilles

3

Stavo eseguendo l'analizzatore come me (dbo) ma la mia traccia stessa conteneva query da un utente del pool di app IIS che non disponeva dell'accesso SHOWPATH.

Così ho concesso l'accesso SHOWPATH a quell'utente del pool di app IIS e quindi ha funzionato correttamente.

GRANT SHOWPLAN TO [COMPANYDOMIAN\IIS_APPUSER] 
Problemi correlati