1. Documentación en Tahiti -> Masters Book List -> VLDB and Partitioning Guide -> 8 Using Parallel Execution -> Tuning General Parameters for Parallel Execution
2. En el objetivo de «Configure and use parallel execution for queries» hemos visto cómo configurar PX de varias formas y también hemos utililizado varios parámetros para ello. Ahora entiendo que nos piden qué sepamos todos los parámetros que afectan a PX y sepamos utilizarlos.
3. Veamos la lista de parámetros completa qué podemos usar y afectan a PX.
PARÁMETRO POR DEFECTO COMENTARIOS ------------------------------- -------------------------- ----------------------------------------------------------------------- PARALLEL_ADAPTIVE_MULTI_USER TRUE Reduce el DOP para prevenir saturación en el sistema PARALLEL_DEGREE_LIMIT CPU_COUNT X Controla el máximo DOP que puede tener una sentencia PARALLEL_THREADS_PER_CPU X Número de Instancias PARALLEL_DEGREE_POLICY MANUAL Determina la política para calcular DOP (MANUAL, LIMITED o AUTO) PARALLEL_EXECUTION_MESSAGE_SIZE 16KB El tamaño de los buffers que utilizan los PX Servers PARALLEL_FORCE_LOCAL FALSE Permite forzar PX a la instancia local en RAC PARALLEL_MAX_SERVERS PARALLEL_THREADS_PER_CPU X Máximo número de procesos Parallel Servers 1|2|4 (NO MM|PGAMM|ASMM) X 5 (Valor fijo) PARALLEL_MIN_SERVERS 0 Controla el número de procesos PX que arrancan a la iniciar la BD PARALLEL_MIN_PERCENT 0 Porcentaje de procesos PX que tienen que estar libres para comenzar la sentencia. Si no hay suficientes puede producirse el error ORA-12827 PARALLEL_MIN_TIME_THRESHOLD 10 Tiempo mínimo de ejecución de una consulta para poder valor PX PARALLEL_SERVERS_TARGET PARALLEL_THREADS_PER_CPU X Controla el número de procesos PX disponibles antes de usar Queueing 1|2|4 (NO MM|PGAMM|ASMM) X 2 (Valor fijo) PARALLEL_THREADS_PER_CPU 2 Número de procesos PX por THREAD (o instancia) en RAC SHARED_POOL_SIZE Depende de varios factores Cuando utilicemos PX es recomendable ampliar este parámetro (Ver doc.) En nuestro caso utilizamos AMM así que no nos preocupamos por ello
4. Existen otros parámetro que afectan o están relacionados con PX (FAST_START_PARALLEL_ROLLBACK, DML_LOCKS, etc…). Es recomendable leer la documentación referencia al comienzo del objetivo para conocer las implicaciones que tienen con PX.
5. Para monitorizar el rendimiento de PX tenemos una serie de vistas que nos pueden aportar bastante información. La lista completa con las descripciones la tenemos en la Documentación Oficial. Listamos y resumimos para que se utiliza cada una de ellas.
· V$PX_BUFFER_ADVICE: Proporciona estadísticas acerca de los Buffers de PX. Útil para redimensionar la SGA.
· V$PX_SESSION: Información acerca de las sesiones, DEGREE, …
· V$PX_SESSTAT: Información cruzada entre V$PX_SESSION y V$SESSTAT
· V$PX_PROCESS: Información acerca de los procesos PX
· V$PX_PROCESS_SYSSTAT: Información acerca de los procesos PX con estadísticas sobre los buffers
· V$PQ_SESSTAT: Estadísticas acerca de la ejecución de consulta con PX. Útil para ajustar ciertos parámetros.
· V$PQ_TQSTAT: Información del tráfico de mensajes a nivel de colas de cada proceso PX
-- Mostramos información de las sesiones y el grado de DOP que se está utilizando. SELECT QCSID, SID, INST_ID "Inst", SERVER_GROUP "Group", SERVER_SET "Set", DEGREE "Degree", REQ_DEGREE "Req Degree" FROM GV$PX_SESSION ORDER BY QCSID, QCINST_ID, SERVER_GROUP, SERVER_SET; -- Consultamos el estado de los procesos PX SELECT * FROM V$PX_PROCESS;
Las siguientes vistas son útiles cuando aplicamos el Resource Manager para controlador el grado de paralelización. De momento no lo vamos a prácticar porque ya tenemos un objetivo completo con el Resource Manager en la sección de «Performance Management».
· V$RSRC_CONS_GROUP_HISTORY
· V$RSRC_CONSUMER_GROUP
· V$RSRC_PLAN
· V$RSRC_PLAN_HISTORY
· V$RSRC_SESSION_INFO
6. Un posible ejemplo que podemos realizar de tuning de PX es calcular el tamaño adicional de memoria que estamos manejando en nuestra instancia para evaluar si debemos ampliar la memoria o no.
-- Calculamos el número de buffers que estamos utilizando en estos momentos (Buffers HWM) -- STATISTIC VALUE -- ------------------------------ ---------- -- Buffers Allocated 376 -- Buffers Freed 376 -- Buffers Current 0 -- Buffers HWM 107 SELECT * FROM V$PX_PROCESS_SYSSTAT WHERE STATISTIC LIKE 'Buffers%'; -- Obtenemos el tamaño del Buffer -- NAME TYPE VALUE -- ------------------------------------ ----------- ------------------------------ -- parallel_execution_message_size integer 16384 SHOW PARAMETER PARALLEL_EXECUTION_MESSAGE_SIZE -- Obtenemos el tamaño actual dedicado a PX -- POOL NAME BYTES -- ------------ -------------------------- ---------- -- large pool PX msg pool 8192000 SELECT POOL,NAME,BYTES FROM V$SGASTAT WHERE NAME = 'PX msg pool';
Para calcular el tamaño multiplicamos el valor de «Buffers HWM» * PARALLEL_EXECUTION_MESSAGE_SIZE = 107 * 16K = 1.7MB. El tamaño dedicado de memoria para PX es de 8MB, que es bastante superior a lo que estamos utilizando, por lo que no tendríamos que realizar acción alguna. Además hay que tener en cuenta que estamos usando la gestión automática de memoria (AMM), luego si es necesario, el tamaño de la SGA aumentaría para ampliar este pool. Si vemos que nuestro sistema utiliza bastante memoria para PX, podemos evaluar la necesidad de aumentar el tamaño total de la memoria y/o subir el mínimo dedicado a la SGA para evitar operaciones de ampliación (parámetros MEMORY_TARGET, SGA_TARGET y SHARED_POOL_SIZE).