Escolar Documentos
Profissional Documentos
Cultura Documentos
PostgreSQL es una de las grandes maravillas del software libre, robusto, potente, altamente
funcional, distribuido en miles de formas posibles (greenplum=clusterizador masivo, postgres
Plus=imitador de Oracle,deepgreen=granjas de datawarehousing con postgreSQL, etc)
puede ser optimizado (como todo lo que es software libre) de maneras inimaginables para
cada necesidad especfica. Entonces, por qu hay gente que denigra de l?
El primer error que comete la gente, es pretender que un sistema tan necesario como la
base de datos, sea utilizado directamente luego de su instalacin; un detalle de
distribuciones Linux como Debian, es no optimizar para ningn aspecto (ya que son metadistribuciones genricas sin una orientacin especfica).
Mientras Oracle saca libros de 900 pginas de cmo optimizar al mximo hardware, sistema
de archivos, sistema operativo y la base de datos como tal, mucha gente piensa migrar a
postgreSQL ejecutando un aptitude install postgresql y dejndolo as nada ms perdido y
lejos de la realidad.
Ac, ejecutaremos una instalacin que debera ser bsica, la ms bsica, para un entorno
pequeo de datos, para que sus sistemas rindan.
Prembulo
Uno de los aspectos ms importantes es que postgreSQL no debera compartir acceso a
disco con el sistema operativo, esto es, si es posible que postgreSQL est en una particin
distinta a root (incluso un disco separado, de ser recomendable); por lo que la opcin
instalar y usar no debera ser para instalaciones en produccin de postgreSQL 9.1.
Hay que tomar en cuenta que postgreSQL (como cualquier otra base de datos) debera ser
optimizada posteriormente a su instalacin de manera correcta, una de las optimizaciones
ms necesarias (pero que casi nadie sigue) es gestionar los espacios de datos y separarlos del
tablespace pg_default (que gestiona la DB postgres, la DB de information_schema y
dems informacin, por lo general en /var/lib/postgresql/9.1/main); adems, ambos
deberan estar separados de la particin raz donde est el sistema operativo.
Las optimizaciones ac realizadas son de las ms sencillas a nombrar para postgreSQL, se
tom una mquina virtual en Xen 4.1 en una porttil y se optimiz de lo ms bsico, para
demostrar, que hasta en los cambios ms sencillos, pueden afectar el performance de
aplicaciones diseadas con postgreSQL.
Preparacin primaria
Y de resto, un volumen lgico (LVM) que podemos modificar de tamao de acuerdo a nuestra
necesidad.
Luego de instalado el sistema, procedemos a instalar PostgreSQL.
Instalacin
La instalacin de postgreSQL 9.1 en Debian GNU/Linux es bastante sencilla:
Configuracin inicial
Siempre es recomendable dejar el usuario postgres (el super-usuario de PostgreSQL) como
un usuario para accesos de emergencia, ya que este usuario tiene garantizado el acceso a
todas partes(si eres root en el sistema), es recomendable que NINGUNA base de datos tenga
como owner el usuario postgres (y evitar en lo posible utilizarlo como usuario de acceso
desde sistemas, aunque esto, obviamente lo he visto ms de una vez ocurrir hasta en
sistemas web).
Creamos un usuario, que ser nuestro super-usuario para nuestros accesos, evitando
as el usuario postgres:
Enter it again:
psql (9.1.3)
GRANT
Y salimos de la consola:
postgres=#\quit
Configuracin de postgreSQL
Accedemos al directorio
/etc/postgresql/9.1/main
cd /etc/postgresql/9.1/main
# la forma es:
# host -> database (all: todas las db) -> usuario (all: todos los usuarios)
-> subnet (de nuestra red) -> modo de clave
host
all
jesuslara
192.168.100.0/24
md5
archivo /etc/postgresql/9.1/main/postgresql.conf
listen_addresses = '*'
temp_buffers: La memoria temporal utilizada por cada sesin para las tablas temporarias y
para apertura de tablas en cada sesin de cada base de datos, tome en cuenta que este valor
depender obviamente de la cantidad de datos que carga cada sesin y depender
muchsimo del sistema que se utiliza.
work_mem = 16MB
archivo: /etc/sysctl.conf
kernel.sem = 100 32000 100 128
kernel.shmall = 3279547
kernel.shmmax = 289128448
kernel.shmmni = 8192
fs.file-max = 287573
vm.dirty_bytes = 67108864
vm.dirty_background_bytes = 134217728
sysctl -p
--
vm.dirty_background_bytes = 134217728
/etc/init.d/postgresql restart
Restarting PostgreSQL 9.1 database server: main.
Y estamos listos para crear una particin y tablespace para nuestra DB.
Formateando la particin
Utilizamos ext4, porque en modo writeback tiene un mayor performance que XFS para
almacenar los tablespaces y tiene menor propensin a fallos.
Nota: utilice esta opcin a su propio riesgo, recuerde que no tener un journal afecta de 2
modos:
La data no es colocada en orden en el disco, fragmentando el mismo
Ante un fallo de energa, el FS no podr recuperar desde el journal las ltimas actividades
para recuperar esos datos.
Se ejecuta un chequeo de archivo bsico:
e2fsck -f /dev/xvdb1
nobh
ext4 asocia buffers de datos con las pginas de datos, esos bloques de cache proveen
garanta de ordenamiento de los datos; nobh evita el uso de estos buffers de
ordenamiento de datos (slo activable con data=writeback).
data=writeback
No se preserva el ordenamiento de los datos, la data ser escrita en el sistema de archivos
solo despus que la metadata ha sido guardada en el journal. Aunque hay personas que
recomiendan desactivar el journaling del disco, esto no es recomendable pues, aunque
postgreSQL gestiona correctamente los datos, los metadatos (informacin de los archivos y
carpetas en el FS) es responsabilidad de mantenerla consistente el FS.
commit=seconds
Los datos y metadatos son escritos a disco cada n cantidad de segundos, el valor por
defecto son 5 segundos (commit=0 es igual a dejar el valor por defecto), un valor ms bajo
puede mejorar la seguridad de los datos, un valor muy alto mejora el performance pero ante
un fallo podra perderse datos.
barrier=0
Deshabilita el uso de barreras de escritura, las barreras de escritura fuerzan el uso de
ordenamiento on-disk de los commits al journal, haciendo las cach de disco seguras de usar,
pero un dao en el performance del disco.
inode_readahead_blks=n
Cantidad de inodes que el sistema de pre-lectura de ext4 lee al buffer cach, el valor por
defecto de n es 32, pero un valor de 64 es normal para optimizar las lecturas.
discard
Permite decidir que realiza con los bloques que son liberados, por lo general ext4 ejecuta
una operacin de trim (limpieza), con esta opcin, ellos simplemente son marcados como
descartados, evitando la escritura innecesaria de bloques.
i_version
Permite indicar que los inodes sern de 64-bits, solo disponible si se est en un sistema a 64
bits.
/etc/fstab
Comprobamos:
mount -a
/srv/postgresql
su postgres
psql
Y listo!, ya tenemos un espacio de tablas disponible para crear bases de datos y optimizado!
13 mil cmputos de empleados en 3 segundos?, Nada mal para ser una porttil!