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
Velocità database SQL Express 2008 R2
martedì 30 settembre 2014 - 09.15
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Elenco Tags
C#
|
.NET 4.0
|
Visual Studio 2010
|
SQL Server Express
hydra
Profilo
| Junior Member
158
messaggi | Data Invio:
mar 30 set 2014 - 09:15
Buongiorno a tutti, vorrei chiedere un parere a qualcuno di esperto.
Mi capita di utilizzare dei database nelle applicazioni che sviluppo e normalmente utilizzo Linq con SQL Express, dato che non sono database complessi ma si occupano generalmente di raccolta dati su una sola tabella.
Capita però che quando il database inizia a contenere qualche migliaio di righe l'applicazione rallenti in modo vistoso (eppure la dimensione fisica del database non è eccessiva, se arriviamo a 30MB è tanto). Mi sapete dire se c'è qualche accorgimento che potrei prendere?
Ringrazio tutti in anticipo e se avete bisogno di maggiori informazioni chiedete pure.
alx_81
Profilo
| Guru
8.814
messaggi | Data Invio:
mar 30 set 2014 - 10:24
>Buongiorno a tutti, vorrei chiedere un parere a qualcuno di esperto.
ciao
>Mi sapete dire se c'è qualche accorgimento che potrei prendere?
dovresti innanzitutto verificare cosa rallenta. Che tipo di chiamate fai ad esempio, e catalogarle con i tempi impiegati reali.
Una volta localizzate le query "lente" allora c'è da capire come hai fatto il design, se hai indici, se servono, ecc..
ma prima devi capire cosa fa rallentare.
Potrebbe anche essere un ciclo relativo a n mila righe, indipendente dal database..
Considera comunque che Express non usa più di un processore.
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT
http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi
hydra
Profilo
| Junior Member
158
messaggi | Data Invio:
mer 1 ott 2014 - 09:08
Ciao e grazie per la risposta.
Queste applicazioni si occupano tra le altre cose di acquisire dei dati di processo, vale a dire che ogni tot secondi acquisiscono dei dati e li salvano nel database. Come ti dicevo c'è una sola tabella, quindi non ci sono relazioni con altre tabelle e ogni elemento ha una PK che ho impostato del tipo intero (cioè è un numero progressivo); all'inizio calcolo il numero del primo ID libero e poi quando faccio l'inserimento dei dati l'ID viene automaticamente incrementato (in modo da non dover andare ogni volta a calcolare il primo intero libero scorrendo tutti gli indici già inseriti).
Essendo che devo andare ad acquisire un tot di dati, ripetuti per una serie di dispositivi, ho pensato di non inserire i dati appena li acquisisco ma attualmente li salvo in una lista e li scrivo nel database alla fine dell'acquisizione di ogni dispositivo (spero sia chiaro come l'ho spiegato), quindi vado ad eseguire una InsertAllOnSubmit e quindi una SubmitChanges.
Queste sono le operazioni che faccio. Tra le altre cose ho fatto anche un'altra prova: siccome mi serviva che il cliente mi girasse il database, per fargli una cosa veloce senza che vada a smanettare con le connessioni ho fatto in modo di esportare il database in un file csv e poi io me lo importo leggendo tutti i dati dal csv, formattandoli in una lista e poi inserendo la lista intera; quello che non mi torna è che andando ad acquisire ad esempio 30000 righe ed inserendole in blocco direttamente in una tabella vuota non mi pare che sia così lento (ovviamente non è immediato ma non è neanche così lento), eppure i metodi che vado a richiamare sono gli stessi identici che uso durante il processo. Boh.
alx_81
Profilo
| Guru
8.814
messaggi | Data Invio:
mar 7 ott 2014 - 15:45
>Queste applicazioni si occupano tra le altre cose di acquisire
>dei dati di processo, vale a dire che ogni tot secondi acquisiscono
>dei dati e li salvano nel database.
Ok quindi c'è un "polling" di un servizio che continua a leggere/scrivere.
Prime domande:
- il processo fa INSERT solamente o anche UPDATE?
- ci sono letture prima delle scritture (tipo dei controlli)?
>Come ti dicevo c'è una sola tabella, quindi non ci sono relazioni con altre tabelle e ogni
>elemento ha una PK che ho impostato del tipo intero (cioè è un numero progressivo);
>all'inizio calcolo il numero del primo ID
>libero e poi quando faccio l'inserimento dei dati l'ID viene
>automaticamente incrementato (in modo da non dover andare ogni
>volta a calcolare il primo intero libero scorrendo tutti gli indici già inseriti).
ma come lo fai questo calcolo? fai tu +1? o è un'identità?
>Essendo che devo andare ad acquisire un tot di dati, ripetuti
>per una serie di dispositivi, ho pensato di non inserire i dati
>appena li acquisisco ma attualmente li salvo in una lista e li
>scrivo nel database alla fine dell'acquisizione di ogni dispositivo
>(spero sia chiaro come l'ho spiegato), quindi vado ad eseguire
>una InsertAllOnSubmit e quindi una SubmitChanges.
cerca di capire come viene salvato questo set. Row by row? in batch da x righe?
>Queste sono le operazioni che faccio. Tra le altre cose ho fatto
>anche un'altra prova: siccome mi serviva che il cliente mi girasse
>il database, per fargli una cosa veloce senza che vada a smanettare
>con le connessioni ho fatto in modo di esportare il database
>in un file csv e poi io me lo importo leggendo tutti i dati dal
>csv, formattandoli in una lista e poi inserendo la lista intera;
>quello che non mi torna è che andando ad acquisire ad esempio
>30000 righe ed inserendole in blocco direttamente in una tabella
>vuota non mi pare che sia così lento (ovviamente non è immediato
>ma non è neanche così lento), eppure i metodi che vado a richiamare
>sono gli stessi identici che uso durante il processo. Boh.
Eh devi andare in debug molto profondamente.. Purtroppo senza avere il tuo processo davanti è dura.
Andiamo per passo, per ora rispondi alle domande che ti ho fatto e vediamo se ci saltiamo fuori.
ciao
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT
http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi
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 !