Tengo una tabla de 500 millones de filas (y en crecimiento)
Hice lo siguiente para mejorar el rendimiento de las inserciones:
En el lado de la base de datos:
- eliminó todos los índices y restricciones
- registro deshabilitado
En el lado de la aplicación:
- cambió de entidades administradas por JPA a consultas de inserción nativas, agregó la sugerencia APPEND Oracle a la consulta
- intentó comprometerse en lotes por 1k / 2k / 3k de filas
- Intenté escribir en paralelo (varios subprocesos, recuento de subprocesos = al recuento central en el servidor) en una tabla
Esto me dio alrededor de 300 filas por segundo.
Probado adicionalmente:
- escriba en paralelo en lotes en varias tablas (para agrupar y luego retroceder los resultados usando UNION)
Esto me dio aproximadamente 1k filas por segundo, pero en mesas vacías. Pero cuando llené las tablas con datos ficticios (200 de millones cada uno), la velocidad de las inserciones se redujo a 250 - 300 por segundo.
¿Alguien podría sugerir qué más puedo hacer para acelerar los insertos? Básicamente quiero entender qué es (qué podría ser) el cuello de botella primero.
UPD: la tabla está dividida por fecha de inserción, la tabla tiene aproximadamente 60 columnas; la mayoría de las columnas son VARCHAR2 (2000 BYTE)
/*+APPEND*/
sugerencia se ignora en las inserciones de una sola fila (si no tiene INSERT INTO ... SELECT
, no se moleste en agregar). (3) Debe configurar un ejemplo de SQL * Loader direct=true
para establecer una línea base como lo sugiere @parsifal.