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
SELECT: velocita varia grazie a Enterprise manager?
lunedì 21 aprile 2008 - 09.01
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Klaus-zanini
Profilo
| Senior Member
364
messaggi | Data Invio:
lun 21 apr 2008 - 09:01
Ciao a tutti,
ho creato una vista (su MSDE) un po' complessa che carica campi (tutti indicizzati) di tabelle in join tra loro. Nella select inserisco anche un campo risultato di una funzione che calcola differenze tra 2 campi di una delle tabelle in questione.
Quanto faccio girare la select nel SQL Query Analyzer ci mette circa 1 minuto e 30 secondi (ho abbastanza dati!). Ho provato anche a fare filtri e mostrare meno campi, ma non cambia di molto.
In particolare ho provato a cercare il campo che rallentava il tutto facendo la select solo di tale campo ed era uno di quelli calcolati dalla funzione.
Un po' per sperimentare ho creato un campo in più sulla tabella con l'ausilio di Enterprise Manager: risultato la stessa select ci mette 3 secondi netti!!!
E rimane così fino a quando il pc rimane acceso. Appena riavvio torna la lentezza di prima. Faccio una modifica (cancello il campo aggiunto prima) e ritorna a velocita di 3 secondi!!!
Ho pensato che il campo in più fosse la ragione, invece quando lo creo da Sql Query Analyzer, la velocità non cambia.
Sembra che al momento del salvataggio della struttura Enterprise Manager faccia qualcosa che una normale ADD non fa...
Mi sapreste dire cosa e come replicarlo in modo che al riavvio io possa ritrovare le medesime condizioni di velocità?
amelix
Profilo
| Expert
694
messaggi | Data Invio:
lun 21 apr 2008 - 09:09
Nella clauso from hai inserito dbo.[Tabella] o usi direttamente [Tabella]?
Andrea -
http://www.MelisWeb.eu/
CMS -
http://www.WebOrama.it/
Klaus-zanini
Profilo
| Senior Member
364
messaggi | Data Invio:
lun 21 apr 2008 - 09:21
Non lo metto di solito.
Ho fatto una prova con un campo che solitamente mi carica in 18 secondi, mettendolo ci mette 7 secondi. Poi l'ho tolto e mi mantiene 7 secondi.
Quindi dovrei mettere [dbo].[table] in tutti i punti (comprese le funzioni) per velocizzare il tutto?
Ma c'è una spiegazione anche per quel che riguarda quanto mi è accaduto con l'Enterprise Manager?
lbenaglia
Profilo
| Guru
5.625
messaggi | Data Invio:
lun 21 apr 2008 - 09:22
>Sembra che al momento del salvataggio della struttura Enterprise
>Manager faccia qualcosa che una normale ADD non fa...
Utilizzando il SQL Profiler sei in grado di catturare il comando SQL generato da EM quando confermi la modifica.
>Mi sapreste dire cosa e come replicarlo in modo che al riavvio
>io possa ritrovare le medesime condizioni di velocità?
Riavviando il servizio vai a deallocare tutte le cache, di conseguenza alla prima esecuzione dovranno essere ricalcolati i query plans delle query ma soprattutto ricaricare da disco le data pages interessate (operazione estremamente lenta se paragonata alla lettura delle stesse pagine dalla buffer cache).
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
Klaus-zanini
Profilo
| Senior Member
364
messaggi | Data Invio:
lun 21 apr 2008 - 09:48
>Riavviando il servizio vai a deallocare tutte le cache, di conseguenza
>alla prima esecuzione dovranno essere ricalcolati i query plans
>delle query ma soprattutto ricaricare da disco le data pages
>interessate (operazione estremamente lenta se paragonata alla
>lettura delle stesse pagine dalla buffer cache).
Questo lo capisco ma a me capita che la velocità aumenta immediatamente dopo la creazione del campo in più, quindi non credo sia una questione di cache anche perché altrimenti mi aspetterei di avere una maggiore velocità dopo il primo caricamento sempre e non solo se faccio una modifica alla struttura.
lbenaglia
Profilo
| Guru
5.625
messaggi | Data Invio:
lun 21 apr 2008 - 09:56
>Questo lo capisco ma a me capita che la velocità aumenta immediatamente
>dopo la creazione del campo in più, quindi non credo sia una
>questione di cache anche perché altrimenti mi aspetterei di avere
>una maggiore velocità dopo il primo caricamento sempre e non
>solo se faccio una modifica alla struttura.
Senza query plan stiamo parlando di aria fritta.
Compara i piani di esecuzione prima e dopo le modifiche ed osserva la differenze...
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
Klaus-zanini
Profilo
| Senior Member
364
messaggi | Data Invio:
lun 21 apr 2008 - 17:17
Ho provato a visualizzare il query plan sia prima di inserire il campo che dopo, ma risulta uguale.
Comincio a pensare che cambia come vuole lui!
Mi hanno detto che ad ogni modifica fatta alla struttura dell'Enterprise Manager questi distrugge e ricrea la tabella, è vero? Se sì potrebbe essere che lui nella ricostruzione riassegna indici o li ottimizza?
Eventualmente avete qualche idea per rendere più veloce la ricerca?
Allego il risultato del query plan, magari riuscite a vedere meglio il vero collo di bottiglia...
867x396
35Kb
lbenaglia
Profilo
| Guru
5.625
messaggi | Data Invio:
mar 22 apr 2008 - 08:21
>Ho provato a visualizzare il query plan sia prima di inserire
>il campo che dopo, ma risulta uguale.
>Comincio a pensare che cambia come vuole lui!
>Mi hanno detto che ad ogni modifica fatta alla struttura dell'Enterprise
>Manager questi distrugge e ricrea la tabella, è vero?
Dipende dal genere di modifica.
Ad esempio, questo accade se si aggiunge/toglie l'attributo IDENTITY.
Come ti ho indicato prima, utilizza il SQL Profiler per catturare i comandi SQL generati da Enterprise Manager e avrai il dettaglio di cosa accade dietro le quinte.
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
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 !