copia masiva - sybase

database sqlbulkcopy sybase

Pregunta

Necesito exportar selectivamente (tanto filas como columnas) alrededor de 20 millones de filas de una tabla a otra. Esto es lo que intenté:

--Run this in batch:
INSERT INTO Table 2
Select A, B from Table1 
where A > a and B < b

---Table1 have columns A, B....Z and got around 50 million records. 

Tarda alrededor de 12 horas en terminar. No creo que Sybase permita bcp con columnas y filas selectivas de Table1 y bcp en Table2. ¿Existe un enfoque rápido alternativo que se pueda utilizar? Me alegraría si se puede hacer <4 horas.

Gracias por leerlo.

Respuesta popular

Creo que quieres decir:

WHERE PK > start_value AND PK < end_value

No hay una buena razón para duplicar datos en dos tablas en el mismo servidor, por lo que esperamos que las tablas estén en servidores separados. Si está "archivando", tenga en cuenta que es lo incorrecto; mejorar la velocidad de la mesa en su lugar. Consulte esta publicación .

  1. Ese INSERT-SELECT eliminará el registro de transacciones, que se ejecutará progresivamente más lento para usted, y evitará que otros usuarios utilicen la base de datos. Si se divide en lotes de 1000 filas, será más rápido y más sociable.

Sería feliz si se pudiera hacer <4 horas.

  1. No debería ser problema. Depende de su hardware y diseño de disco. Puedo cargar 16 millones de filas en 13.2 segundos en mi pequeño cuadro de demostración que ejecuta ASE 15.5.

  2. bcp se ejecuta en dos modos, automáticamente, según las condiciones siguientes:

    • RÁPIDO. esto requiere que SELECT_INTO / BULK_COPY sp_dboption esté configurado, lo que permite que bcp NO registre INSERTOS, solo Asignaciones. También requiere que se eliminen los índices de la tabla (se pueden crear después de que finalice bcp).

    • LENTO. Cualquiera de las condiciones anteriores no se cumplen. Todos los INSERTOS están registrados. Asegúrese de tener un umbral en el registro que lo descarga (se llenará).

  3. No hay ningún problema en absoluto, ya sea que el archivo out_data_file o Table_2 sea un subconjunto de columnas de Table_1. Cree una vista de Table_2 en el servidor Table_1. Bcp-out la vista. También puede colocar una cláusula WHERE en la vista, hacer transformaciones, etc.

  4. Puede ejecutar bcp en paralelo (hasta el número de CPU / Cores que tenga en su sistema host). Divida el extracto en el no de flujos paralelos (por ejemplo, en una máquina de 8 núcleos, ejec. 8 extraiga trabajos en paralelo). Use los parámetros -F y -L para especificar un octavo de la Tabla_1. Use "&" si tiene un o / s y 8 x archivos BAT si no lo tiene.

  5. También puede ejecutar (por ejemplo) 8 x trabajos INSERT-SELECT en paralelo. Dividido por el valor de PK, no el número de fila.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué