Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
SQL Server 2000/2005/2008, Express, Access, MySQL, Oracle
Divergenze sulla velocità di esecuzione di query identiche
martedì 22 luglio 2008 - 18.16
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
tarabasch84
Profilo
| Junior Member
125
messaggi | Data Invio:
mar 22 lug 2008 - 18:16
Salve ragazzi,
ho realizzato una query di selezione parametrica in modo che l'utente possa, attrverso l'interfaccia web messa a disposizione, filtrare le sue ricerche. La query di selezione che ho tirato sù, viene richiamata dal CLR utilizzando LinqToSql in questo modo:
//richiamo la stored procedure attraverso il DataContext con LinqToSql
var objects = (from c in DataContext.nome_query(param1, param2, param3)
orderby c.nome_campo ascending
select c).ToList();
//pagino la selezione in base a due indici
var selection = objects.Skip(Convert.ToInt32(Session["start"])).Take(Convert.ToInt32(Session["page_count"]));
//popolo la griglia
this.dgv.datasource = selection;
this.dgv.databind();
Ora, tutto questo viene eseguito molto velocemente sul mio portatile in locale e per di più in debug. Mentre sul server tutto avviene molto più lentamente.
Velocità di connessione? No, in quanto le altre richieste avvengono normalmente. Risorse occupate? No, il server è sgombro.
Per di più ho eseguito la query includendo il piano di esecuzione allo scopo di verificare divergenze di velocità di esecuzione sia il locale che su server:
la velocità è identica. Allora il problema è nel CLR? Ma se in locale nonostante il debug è tutto più veloce? Insomma, non ci sto capendo più nulla....
Credo che parte della colpa sia di billy...
lbenaglia
Profilo
| Guru
5.625
messaggi | Data Invio:
mar 22 lug 2008 - 20:51
>Per di più ho eseguito la query includendo il piano di esecuzione
>allo scopo di verificare divergenze di velocità di esecuzione
>sia il locale che su server:
>la velocità è identica.
Non ho capito, i due query plans sono identici in tutto e per tutto?
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
tarabasch84
Profilo
| Junior Member
125
messaggi | Data Invio:
mer 23 lug 2008 - 08:48
Ciao,
i due query plans sono praticamente identici anche perchè i due database (quello in locale e quello sul server) sono strutturati allo stesso modo e contengono la stessa mole di dati.
Credo che parte della colpa sia di billy...
lbenaglia
Profilo
| Guru
5.625
messaggi | Data Invio:
mer 23 lug 2008 - 09:31
>i due query plans sono praticamente identici anche perchè i due
>database (quello in locale e quello sul server) sono strutturati
>allo stesso modo e contengono la stessa mole di dati.
La struttura non significa niente, dato che 2 db identici su due istanze distinte possono dare origine a piani di esecuzione COMPLETAMENTE differenti.
Verifica NEL DETTAGLIO i due piani di esecuzione...
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
tarabasch84
Profilo
| Junior Member
125
messaggi | Data Invio:
mer 23 lug 2008 - 09:56
Penso di aver migliorato il tempo di attesa che faceva andare in timeout il server. In pratica ho modificato la query eliminando un confronto nella clausola where con un parametro di input. Il confronto però l'ho delegato a LinqToSql nel CLR poco prima di effettuare l'ordinamento. Adesso la velocità di esecuzione è migliorata di gran lunga. Evidentemente quella condizione in t-sql non piaceva a sql server
...
Ho provato a confrontare i piani di esecuzione, ma i valori espressi in percentuale sono identici. Quali valori dovrei prendere in considerazione?
Credo che parte della colpa sia di billy...
lbenaglia
Profilo
| Guru
5.625
messaggi | Data Invio:
mer 23 lug 2008 - 10:01
>Ho provato a confrontare i piani di esecuzione, ma i valori espressi
>in percentuale sono identici.
Prima o dopo la nuova condizione nella clausola WHERE?
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
tarabasch84
Profilo
| Junior Member
125
messaggi | Data Invio:
mer 23 lug 2008 - 10:08
Beh, dopo aver applicato la modifica in t-sql e nel CLR.
Credo che parte della colpa sia di billy...
lbenaglia
Profilo
| Guru
5.625
messaggi | Data Invio:
mer 23 lug 2008 - 10:09
>Beh, dopo aver applicato la modifica in t-sql e nel CLR.
Eh, quindi significa che prima i piani di esecuzione con molta probablilità erano differenti
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
tarabasch84
Profilo
| Junior Member
125
messaggi | Data Invio:
mer 23 lug 2008 - 10:22
Ho riapportato le vecchie modifiche alla query. Chiaramente il piano di esecuzione è cambiato. Il tutto l'ho testato in locale. La prima query conteneva la clausola di condizione, mentre la seconda no. Ebbene, presentano due piani di esecuzione diversi. Il primo piano di esecuzione sembra essere più performante del secondo, cioè quello con la condizione, peccato che poi non si dimostra così...
Credo che parte della colpa sia di billy...
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !