2012-05-02 8 views
6

que tienen un SQL como esto:acerca de Oracle rendimiento de las inserciones en paralelo

Insert into A 
Select * from B; 

Ahora quiero que se ejecute en paralelo. Mi pregunta es paralelizar el inserto o seleccionar o ambos? Consulte los siguientes sqls, ¿puede decirme cuál es el correcto o cuál tiene el mejor rendimiento? No tengo permiso de dba, por lo que no puedo verificar su plan de ejecución.

1) Insert /*+ parallel(A 6) */ into A select * from B;

2) Insert into A select/*+ parallel(B 6) */ * from B;

3) Insert /*+ parallel(A 6) */ into A select /*+ parallel(B 6) */ * from B;

Gracias!

+0

Paralelamente, probablemente no lo ayude en esta situación de todos modos. IO va a ser el cuello de botella ya que se necesita poco procesamiento (a menos que haya simplificado demasiado). Mire 'INSERT/* + APPEND */....' si es una opción – Phil

+0

@Phil La ejecución paralela puede mejorar significativamente IO. –

Respuesta

12

Paralelo, tanto el INSERT como el SELECT es el más rápido.

(Si usted tiene una cantidad suficientemente grande de datos, tener un servidor decente, todo está configurado con cordura, etc.)

Usted definitivamente quiere probar por sí mismo, sobre todo para encontrar el grado óptimo de paralelismo. Hay muchos mitos alrededor de la ejecución paralela de Oracle, e incluso el manual a veces es horribly wrong.

En 11gR2, recomendaría ejecutar su sentencia como esta:

alter session enable parallel dml; 
insert /*+ append parallel(6) */ into A select * from B; 
  1. Uno siempre quiere habilitar primero DML paralelo.
  2. parallel(6) usa statement-level parallelism, en lugar de paralelismo a nivel de objeto. Esta es una característica de 11gR2 que le permite ejecutar todo fácilmente en paralelo sin tener que preocuparse por alias de objetos o métodos de acceso. Para 10G, tendrás que usar múltiples sugerencias.
  3. Normalmente, la sugerencia append no es necesaria. Si su DML se ejecuta en paralelo, usará automáticamente insertos de ruta directa. Sin embargo, si su estado se degrada a serie, por ejemplo, si no hay servidores paralelos disponibles, la sugerencia append puede marcar una gran diferencia.
+2

Merece la pena señalar que la inserción en paralelo, o la inserción en serie de ruta directa (apéndice), toma un bloqueo exclusivo en la tabla (o las particiones con nombre en las que tiene lugar la inserción). –

1

No necesita privilegios de DBA para ejecutar un plan de explicación. Creo que SELECT_CATALOG es el privilegio correcto.

Cuestiones relacionadas