Hola a todos.

En la base de datos que tenemos en produccion tenemos el siguiente error en
el log

2016-08-01 14:26:34 COT 30621 ERROR:  out of shared memory
2016-08-01 14:26:34 COT 30621 HINT:  You might need to increase
max_locks_per_transaction.

Una transaccion tipica del sistema ejecuta la funcion *procesamiento*().
Para verificar el numero de locks que realiza esta transaccion hice lo
siguiente en una consola de psql

BEGIN;
SELECT procesamiento();

Verificando entonces en pg_locks y pg_stat_activity encontre que esta
transaccion realiza 1921 locks de 3 tipos RowExclusiveLock, AccessShareLock
y RowShareLock.

Tengo varias dudas y agradeceria el consejo que me puedan dar:

   - Ahora estamos usando el particionamiento de tablas para dividir
   informacion. Hay una tabla padre y varias tablas hijas. Las tablas hijas
   heredan de la tabla padre y en la tabla padre hay un trigger que decide a
   que hija insertar. Cada tabla hija tiene una llave primaria definida y
   varios indices. Veo que a que pesar de que en teoria solo se inserta en un
   tabla, se hace un lock de tipo RowExclusiveLock en todas las llaves
   primarias de las tablas hijas. Esto deberia ser asi?
   - Vamos a reducir el numero de tablas hijas. Creo que podriamos reducir
   el numero de locks a aproximadamente 600. Esto quiere decir que el
   parametro max_locks_per_transaction se debe configurar a 600?

Muchas gracias.

-- 
Sergio E. Sinuco Leon
Arquitecto de desarrollo
Datatraffic S.A.S.
Móvil: (57) 310 884 26 50
Fijo (+571) 7426160 Ext 115
Carrera 47 A No 91 - 91
Bogotá, Colombia.
www.datatraffic.com.co

Responder a