Più connessioni a un database da più thread di un'applicazione aumenteranno le prestazioni delle query di inserimento?

StackOverflow https://stackoverflow.com/questions/605607

Domanda

Qui ho a che fare con un database contenente decine di milioni di record. Ho un'applicazione che si collega al database, ottiene tutti i dati da una singola colonna in una tabella e fa alcune operazioni su di esso e lo aggiorna (per SQL Server - usando i cursori).

Per milioni di record ci vuole molto ... molto tempo per l'aggiornamento. Quindi voglio renderlo più veloce di

  1. utilizzando più thread con una connessione indipendente per ciascun thread.

o

  1. utilizzando una singola connessione in tutti i thread per attivare le query di aggiornamento.

Quale è più veloce o se hai altre idee per favore.

Ho bisogno di una soluzione che sia indipendente dal tipo di database, o anche se conosci soluzioni specifiche per ogni tipo di db, rispondi.

È stato utile?

Soluzione

La velocità che stai cercando di raggiungere non funzionerà. Al contrario, rallenterà l'elaborazione complessiva poiché il database deve anche sincronizzare più connessioni / sessioni / transazioni.

Mantenere il minor numero possibile di connessioni / transazioni per operazioni ripetitive e comparabili. Se impiega troppo tempo per i tuoi gusti, forse prova ad analizzare se le query possono essere ottimizzate in qualche modo. Dai anche un'occhiata alle estensioni specifiche del database (ad es. Operazioni in blocco) adatte al tuo problema.

Altri suggerimenti

Tutto dipende dal database e dall'hardware su cui è in esecuzione.

Se il database è in grado di utilizzare l'elaborazione simultanea ed evita la contesa sulle risorse condivise (ad esempio i blocchi della base di pagina si estenderebbero su più record, la base di record no). Le risorse condivise in questo caso includono l'hardware, un singolo core box non sarà in grado di eseguire più attività ad alta intensità di CPU (ad esempio l'analisi di SQL) in modo veramente parallelo.

La latenza di rete è qualcosa che potresti aiutare ad alleviare con inserimenti simultanei anche se il database stesso non è in grado di sfruttare la concorrenza.

Come per qualsiasi domanda relativa alle prestazioni, è possibile sostituire i test nel proprio scenario specifico.

Se possibile, provare a utilizzare la procedura memorizzata per eseguire tutte le elaborazioni e aggiornare i record.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top