Tip
Configuración básica de PostgreSQL
17-10-2014
Una de las primeras acciones que deberíamos realizar, después de instalar el motor de base de datos PostgreSQL, es configurar los parámetros básicos, para obtener un buen rendimiento.
He de aclarar que disto mucho de ser un experto, y que esta materia da para cubrir varios libros, sin embargo en mi experiencia práctica he determinado que ajustando algunos parámetros se puede percibir un importante incremento en el rendimiento.

Cómo en todo, es súper importante saber cuál es el uso que le daremos a nuestras bases de datos y que servicios conviven en nuestro servidor. Más allá de las recomendaciones de hardware que se puedan hacer (mucha RAM, CPU poderosas, Discos rápidos, etc...) conocer cuánto de esos recursos podemos destinar a PostgreSQL es fundamental para establecer un plan de mejoras, así es que su primera tarea, es determinar de qué recursos dispone (en este ejemplo asumiremos 4Gb de RAM) el archivo de configuración es el postgresql.conf (búsquelo porque su ubicación dependen de su distribución), los parámetros que considero importantes son:

- shared_buffers
Este es el parámetro que utiliza PostgreSQL para todas las tareas que utilizan memoria compartida y caché, en mi opinión un 30% de la memoria disponible es un valor adecuado (En nuestro ejemplo 1228 MB)

- work_mem
Este parámetro indica la cantidad de memoria utilizada para realizar ordenamientos, dependiendo de la concurrencia aconsejo entre un 2% a 10%, tenga presente que este valor es por consulta, por ejemplo si tiene 32 MB de work_mem y 5 usuarios están realizando ordenamientos la cantidad de memoria usada será 5*32 = 160 MB y cada join ocupa la memoria de un work_mem, este parámetro es delicado, pero aporta mucho rendimiento si se configura adecuadamente.

- maintenance_work_mem
Esto indica la cantidad de memoria utilizada para tareas administrativas, personalmente nunca he notado diferencias por sobre los 256 MB, de hecho un valor de 128MB es bastante razonable en la mayoría de los casos.

- effective_cache_size

Este es el parámetro más importante en mi opinión, establece cuanta memoria puede llegar a consumir la base de datos, entre un 50% y 75% de la memoria disponible es un valor adecuado, sin embargo esto dependerá del uso y de las características de su servidor.

shared_buffers = 30%
work_mem = 2 a 10%
maintenance_work_mem = 256Mb
effective_cache_size = 50~75%

                                    

Historial en Bash
03-10-2014
Existe un comando muy útil en bash, para encontrar comandos utilizados con anterioridad, el comando es history, y si se combina con un grep podemos hacer un filtrado muy rápido de comandos complejos que son difíciles de recordar.
Por ejemplo, si queremos encontrar la ejecución del comando wsdl2java (que regularmente tiene muchos parámetros), podríamos ejecutar lo siguiente:

history | grep -i wsdl2java

                                    

Búsqueda en archivos en bash
16-09-2014
Muchas veces es cómodo buscar patrones dentro de los archivos, existe un comando muy cómodo y poco utilizado, el comando es  xargs que acepta un comando como argumento, realmente es muy útil.
Por ejemplo, si queremos buscar los archivos java que tengan el texto "casa", dentro de nuestro directorio $HOME, deberíamos ejecutar lo siguiente:

find $HOME | grep java | xargs grep --color -inH casa

                                    

Almacenar los coredump
09-09-2014
En el afán de hacer más amigable linux para el usuario común, muchas características dedicadas al desarrollo de aplicaciones se han ocultado. Con la ayuda del comando sysctl (como root) es posible definir un lugar para almacenar los coredumps generados (los coredumps se deben activar con el comando: ulimit -c unlimited), para hacer el cambio permanente es necesario agregarlo al archivo sysctl.conf (o el que corresponda según su distribución)
sysctl -w kernel.core_uses_pid = 1
sysctl -w kernel.core_pattern=/var/tmp/%h-%e-%p.core

                                    

Habilitar dmesg en Linux
01-09-2014
Si nos encontramos con un kernel que no tiene compilada la opción de dmesg para los usuarios, existe una forma de habilitarlo usando el comando sysctl (como root), como se especifica abajo.
Para hacer el cambio permanente, se debe modificar el archivo sysctl.conf (el que corresponda según su distribución)

sysctl -w kernel.dmesg_restrict=0


                                    

Zona horaria en f:convertDateTime
31-08-2014
En la construcción de este sitio web, me topé con un problema, el objeto Date de java, almacena los datos en UTC, y al mostrarlo en la capa web, el tiempo me quedaba desfasado, sin embargo la etiqueta tiene dos parámetros muy útiles:
  • locale que permite indicarle el idioma con el cual estamos trabajando
  • timeZone que permite indicar la zona horaria en que queremos mostrar la fecha.

<f:convertDateTime 
pattern="dd/MM/yyyy HH:mm:ss" 
locale="#{bean.locale}" 
timeZone="America/Santiago" />