¿Las conexiones múltiples a una base de datos desde múltiples hilos de una aplicación aumentarán el rendimiento de las consultas de inserción?

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

Pregunta

Aquí estoy tratando con una base de datos que contiene decenas de millones de registros. Tengo una aplicación que se conecta a la base de datos, obtiene todos los datos de una sola columna en una tabla, realiza algunas operaciones y la actualiza (para SQL Server - usando cursores).

Para millones de registros se está demorando mucho ... mucho tiempo en actualizarse. Así que quiero hacerlo más rápido por

  1. utilizando varios subprocesos con una conexión independiente para cada subproceso.

o

  1. utilizando una sola conexión en todos los subprocesos para activar las consultas de actualización.

Cuál es más rápido, o si tiene alguna otra idea, por favor explique.

Necesito una solución que sea independiente del tipo de base de datos, o incluso si conoce soluciones específicas para cada tipo de db, responda.

¿Fue útil?

Solución

La aceleración que intentas lograr no funcionará. Por el contrario, ralentizará el procesamiento general, ya que la base de datos ahora también tiene que mantener sincronizadas varias conexiones / sesiones / transacciones.

Manténgase con la menor cantidad de conexiones / transacciones posibles para operaciones repetitivas y comparables. Si toma demasiado tiempo para su gusto, tal vez intente analizar si las consultas pueden optimizarse de alguna manera. También eche un vistazo a las extensiones específicas de la base de datos (es decir, operaciones masivas) adecuadas para su problema.

Otros consejos

Todo depende de la base de datos y del hardware en el que se ejecuta.

Si la base de datos puede hacer uso del procesamiento simultáneo y evita la contención en los recursos compartidos (por ejemplo, los bloqueos de la base de la página abarcarían varios registros, el registro basado no lo haría). Los recursos compartidos en este caso incluyen hardware, una única caja central no podrá ejecutar múltiples actividades intensivas de CPU (por ejemplo, análisis de SQL) realmente en paralelo.

La latencia de la red es algo que podría ayudar a aliviar con inserciones simultáneas, incluso si la base de datos no es capaz de explotar la concurrencia.

Como con cualquier cuestión de rendimiento, hay un sustituto para las pruebas en su escenario específico.

Si es posible, intente utilizar el procedimiento almacenado para hacer todo el procesamiento y actualizar los registros.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top