Velocizzare inserimento dati in database SQL

giovedì 27 giugno 2013 - 10.31
Tag Elenco Tags  C#  |  .NET 4.0  |  Windows 7  |  Visual Studio 2010  |  SQL Server 2008 R2

hydra Profilo | Junior Member

Ciao a tutti.
Innanzitutto mi scuso se non è la sezione giusta, non so bene se è un problema di database o di programmazione.
La mia situazione è questa: sto implementando un database SQL (attualmente utilizzo SQL2008 R2 Express) per salvare dei dati di produzione. Nella mia applicazione utilizzo Linq to SQL per gestire tutto. Contando che dovrei andare ad inserire dei dati ogni 4 secondi circa, mi sono posto questo problema, ossia cosa succede quando la tabella inizia a crescere. In pratica, facendo alcune prove di inserimento, ho notato che al crescere del numero delle righe nella tabella aumenta anche il tempo di inserimento di un singolo record, passando da circa 0.001s a tabella vuota (tenete conto che i valori sono arrotondati al ms) a circa 0.017s con 30000 righe. Ora, questi 0.02s mi si andranno ad aggiungere al tempo di gestione del ciclo produttivo, con conseguente rallentamento nel momento in cui vado ad inserire la riga nella tabella. Mi sapete dare dei consigli su come gestire? Avevo pensato anche di utilizzare due tabelle temporanee dove salvare un tot numero di righe e poi eseguire la copia sulla tabella principale utilizzando un thread, ma mi succede che a volte viene lanciato il commit sia dal thread sia dal metodo che inserisce la riga nella tabella temporanea, con conseguente eccezione. Mi sapete dare una mano? Tenendo conto che il thread principale dovrebbe avere la priorità.
Grazie mille

alx_81 Profilo | Guru

>Ciao a tutti.
ciao

>Mi sapete dare una mano?
dipende molto da com'è la tabella di cui parli.
Puoi postare la create e il comando che viene lanciato sulla insert?

>Grazie mille
di nulla!
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

Allora, io la tabella l'ho creata senza usare comandi, direttamente da MSSMS, poi non ti so dire neanche che tipo di query lanci perchè uso linq, dovrei scaricarmi qualcosa per vedere le query che crea. In ogni caso ho risolto in questo modo: ho messo la tabella che mi serve in un datacontext per conto suo, poi ogni volta che lancio l'inserimento di una riga vado ad eliminare e ricreare la connessione del datacontext al database. Non sarà una soluzione elegante ma ho visto che mi mantiene un tempo minimo di inserimento, ho fatto varie prove, tra cui una di inserimento di 1000000 di record e non ho visto decadimento di prestazioni sull'inserimento, che varia tra 1 e 2 ms; certo per inserire tutti i record ci ha messo un po' ma non era questo il problema, per cui se non ci sono soluzioni più eleganti direi che mi va bene anche così.
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 !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5