Вы находитесь на странице: 1из 34

Monitoreo y Tunning

Ing. Lennin Caro Prez

Pasos para entonar...


Probar

Documentar

Entonar

Hardware... el primer punto


Componentes bsicos
Procesador
Memoria RAM
Disco E/S
Red

Cada equipo es diferente


Auque esten configurados igual, son diferentes
Para cada de base de datos existe un equipo
OLTP
OLAP
Web

Procesador
Hoy en da las aplicaciones estn relacionadas
con los procesadores
Cualquier actividad genera E/S hasta la escritura en disco

Cuantos nucleos necesito para ejecutar consultas


PostgreSQL es multi-procesador
Cada ncleo solo puede procesar una consulta a la vez
Lo mejor es realizar maximo dos consultas por nucleo

Si puedes aumentar la cantidad de procesadores ...


Hazlo
No tienes que pagar licencias por procesadores adicionales

Tips del Procesador


Procesador
Los multiprocesadores simtricos no son perfectos
En ocasiones es mejor tener mas procesadores con
menos ncleos
Caractersticas de los procesadores
Velocidad
Los que tienen mas memoria L2 son mejores
Los de 64 bit pueden mejorar considerablemente el
rendimiento
Especialmente cuando se use mas de 4 Gb de RAM
Pero no siempre es la solucin al bajo rendimiento

Memoria RAM
Usar la memoria necesaria es un caso de ensayo
y error
Mientras estes cerca (1% de diferencia) de la cantidad de
memoria que necesitas tu servidor sera rapido.
Estar mas alla del 2% de lo necesario bajaria el rendimiento

Limites mas crticos


Tienes la RAM suficiente para mantener en share_buffers la
base de datos
Aproximadamente 6 veces el tamao de la base de datos
Tienes la RAM suficiente para mantener la base de datos en
el cache
Aproximadamente de 2 a 3 veces el tamao en disco de la
base de datos

E/S el cuello de botella


Cual es el lmite de E/S de tu base de datos
Alto volumen de escrituras
Escritura del log por cada transaccin
Base de datos mas grandes que la RAM (aprox. 3 veces)
Cada consulta sera afectada por el lmite de E/S

Optimiza la E/S
Si la base de datos es muy grande, invierte en discos
Calcula cunto tarda en escribir en disco un bloque de datos
Calcula cunto tarda en leer toda la base de datos desde el
disco
Revisa cuantos log de transacciones se generan

El camino del hardware

La Red
Posibles cuellos de botella
Tiempo de respuesta
Ancho de banda
Switches mal configurados u obsoletos

Conexiones dedicadas
Entre el aplicativo y el servidor de BD
Entre el servidor de BD y el de replica o de recuperacin de
desastres
Varias interfaces de conexion

Transferencias de archivos
Conexiones Gigabits o Megabits
Calcular la capacidad de transferencia para la copia de la
data, los dumps, los logs y los WAL

Prueba tu HW
Herramientas para comprobar tu HW
Procesador: PassMark, sysbench, Spec CPU
Memroia RAM: memtest, cachebench, Stream
E/S: bonnie++, dd, iozone
Red: bwping, netperf
Base de datos: pgBench, sysbench

Prueba el HW antes de montar tu BD


Prueba y compara antes de comprar
Involucra a tus administradores de sistemas en la toma de
decisin
No creas en todo lo que te venden
Prueba nuevamente
Y por ultimo prueba de nuevo y compara

Mitos...
Todos los discos son iguales
Asi sean de la misma marca y hasta el mismo modelo

Todos las tarjetas de RAID son iguales


Todos los sistemas operativos son iguales
Asi sean la misma versin y tipo

Una pieza mal configurada o en mal estado no


puede inutilizar tu sistema
Las estadsticas te van a decir todo
Los vendedores siempre dicen la verdad
No existe un lugar donde te puedan ayudar con tu
manejador de base de datos PostgreSQL
No busques la combinacin correcta, comprala

Y el Sistema Operativo.....
Sistemas operativos recomendados
Free BSD
GNU/Linux (Debian)
Red Hat
Solaris
Unix

Metodos de sync para los sistemas operativos


Platform
Linux
Mac OS X/Darwin
Solaris
BSD/OS
FreeBSD

open_datasync fdatasync fsync_writethrough


No
No
S
No
No

S
No
S
No
No

No
S
No
No
No

fsync

open_sync

S
S
S
S
S

Directo
S (Directo?)
Yes
S (Directo?)
S (Directo?)

Separa el log de transacciones


Directorio de pg_xlog
Tener un arreglo de disco puede mejorar el rendimiento entre
un 10% y 50%

Tablespaces en discos distintos


Para tablespace que contengan tablas muy grandes
Para tablespace que contengan tablas particionadas
Para tablespace que tengan indices grandes
Para tablespace que tengan indices paticionados
Tablespace diferente para las tablas que tengn ms
transacciones que otras.
Tablespace diferente para las tablas que sean ms grandes
que otras.

Entonacin en GNU/Linux
Sistema de Archivos
XFS para base de datos grandes
Raiser para base de datos pequeas
Etx2
No es seguro cuando sucede una caida
Etx3
Mas lenta que ext2 pero mas segura ya que tiene Journalling

Etx4
Presenta un bug con el fsync

NFS o cualquier sistema de archivos remoto


No tiene el mismo archivo manejo semntico del sistema de
archivos local, y pueden causar problemas de fiabilidad de los datos
o la recuperacin de fallas

Sistema Operativo
Modifica los valores de tu kernel en el sistema operativo
Shmmax y shmall

Verifica la versin del kernel para mejorar el rendimiento


Versin superior a 2.6

Verifica las opciones de los puntos de montura


data = writeback, noatime, nodiratime

Ubica los puntos de monturas PM en diferentes discos o


arreglos
Crea la base de datos en un PM diferente
Crea enlaces simbolicos para colocar las tablas en PM diferentes
Crea enlaces simbolicos para ubicar los ndices
Mueve las tablas que realicen mucho en JOIN a PM diferentes
Coloca los WAL en un PM diferente

Monitoreo
Monitorea pro-activamente
Conoce el rendimiento de tu equipo antes de que sea crtico
Planifica tus alertas
Ms alla del 80% es problemtico

Monitorea todo
Uso de los procesadores (y sus cores)
Discos que mas escriben
Discos que mas se leen
Uso de la memoria
Horas picos o de alto impacto para el servidor

Usa las herramientas que quieras


nagios, cacti, reconnitor, Hyperic, OpenNMS

Entonacin de PostgreSQL
shared_buffers
Usa una pequea parte de la memoria
Cuanto se usa de la memoria
Entre el 15% y el 25% en servidores dedicados
Calcular acierto del buffer en PostgreSQL 9 EXPLAIN (ANALYZE
ON, BUFFERS ON) SELECT ...
Calcular acierto del buffer en versiones anteriores select
datname, blks_read, blks_hit from pg_stat_database;

work_mem
Para consultas de ordenamiento, tipo hash entre otras
Entre 32 MB y 64 MB

Detecta una mala configuracin


Muchos SWAP: el parametro esta muy alto
Archivos temporales de log: parametro muy bajo

Entonacin de PostgreSQL
maintenance_work_mem
Usada para los bulks de carga de datos, vacuum, entre otros
Entre 256 MB y 1 GB

Usada para la creacin de indices


Permite que el vacuum sea ms rapido
Pero cuidado si se estan ejecutando multiples vacuum

wal_buffers
Es la memoria usada por el WAL (Write Ahead Log)
8 MB para los SMP

Transacciones
effective_io_concurrency
Solo si el sistema operativo soporta E/S asincronas
Nmero de discos/canales

synchronous_commit
La velocidad es ms importante que la integridad
Coloca el parametro synchronous_commit = off
Puedes perder data en un apagado abrupto del sistema

checkpoint_segment
Cuantos segmentos de log de 8MB se crean antes del
proximo checkpoint
Usa 16, 64, 128 (es cuestion de probar)

Consultas
effective_cache_size
Estimado de la memoria disponible para guardar en
shared_buffers y cache del sistema de archivo
2/3 del total de RAM

default_statistics_target
Aumenta entre 200 a 1000 para base de datos grandes
El valor por omisin es de 100
Actualizar las estadsticas pr columnas es mejor

log_statement
Si quieres saber que consultas se ejcutan y el tiempo que
tardan.
log_statement=all
Esto genera una carga adicional de escritura en el log

Mantenimientos
Autovacuum
Activalo para aplicaciones con base de datos OLTP
No es recomendable para base de datos OLAP
Asegurate de incluir la opcin analyze
Para versiones de 8.2 y menores usar esta configuracin:
stats_start_collector = on
stats_block_level = on
stats_row_level = on
Autovacuum = on

Para monitorear los autovacuum


SELECt schemaname, relname, last_autovacuum,
last_autoanalyze FROM pg_stat_all_tables;

Mantenimientos
Verificar los disparadores de Autovacuum
Para verificar cuando se ejcutara el autovacuum y cuando se
ejecut existen un grupo de consultas:
SELECT max(age(datfrozenxid)) FROM pg_database;
SELECT datname,age(datfrozenxid) from pg_database ORDER BY
age(datfrozenxid) DESC;
SELECT relname, age(relfrozenxid) FROM pg_class WHERE
relkind = 'r' ORDE BY age(relfrozenxid) DESC;

Mantenimientos
Vacuum
Puedes ejecutar Vacuum manualmente sobre tablas que
tengan un gran nmero de inserciones o actualizaciones
Si no se mantiene un Vacuum continuo el planner de
consultas puede tomar un camino equivocado
Existen varios tipos de Vacuum
Full: Para obtener mas espacio pero toma mucho mas tiempo
Freeze: Es ms agresivo contra las tuplas ya que buscas las que
tengan datos Freezing
Verbose: Muestra el detalle de las acciones realizadas
Analyze: Actualiza las estadsticas usadas por el planner para
determinar el mejor camino

Recomendaciones
Diseo de los esquemas
No optimice prematuramente
Analiza cuales tablas tendrn mayor volumen de inserciones,
consultas o actualizaciones
Existe una gran variedad de tipos de datos, elige la que mejor
responda a la necesidad
Los tipos de datos BLOB son muy lento, usalos con cuidado

Indices
Indexa las llaves foranes
Indexa los criterios mas comunes para los WHERE
Indexa los criterios agreagados (expresiones)
Verifica los dems metodos de indexacin (expressions, full
text, partial) y busca el ms adecuado para tu necesidad

Recomendaciones
No indexes todo
Los indices significan mayor carga al realizar las inserciones,
el borrado y las actualizaciones
Demasiados indices en la misma tabla pueden ocasionar
problemas al planner
Las tablas pequeas no necesitan indices, revisa su
cardinalidad
Verifica los indices actuales y cuales se estan usando
Usa el catlogo pg_stat_user_indexes

Verifica las tablas que son hacen SEQUENCIAL SCAN y


hacer muchas actualizaciones y borrados de datos
Usa el catlogo pg_stat_user_tables

Recomendaciones
Particiones
Particiona las tablas que son muy grandes
Ubica el campo candidato para realizar la particin
Si tienes muchas consultas donde un campo tiene poca
cardinalidad (valores S/No) y este es usado constantemente en el
WHERE particiona la tabla o usa indices particionados

Consultas
Prueba usar NOT IN o NOT EXISTS para consultas lentas
Optimiza para consultas en cache
Aumenta o disminuye el valor de seq_page_cost y
random_page_cost en una sesion de trabajo y verifica el resultado

Deshabilita las opciones de optiomizacin


En raras ocasiones el planner se equivoca, pero no cuesta nada
probar

Recomendaciones
Explain Analize
Verifica como se resuelven tus consultas
Verifica si existe un conteo de registros equivocado
Verifica los sequencial scan que se realizan
Verifica si existe un conteo alto de loops
Trata de re-excribir las consulta con un mal plan de ejecucin

Optimizacin de consultas
Revisa pg_stat_statement

Ejecuta Explain
Analize en las
consultas
lentas

Aplica las
correciones

Modifica las
consultas lentas o
loas parametros

Optimizacin de procedimientos
Revisa pg_stat_function

Aplica las
correciones

Localiza las
operaciones lentas

Ubica los
procedimientos
mas lentos

Los catlogos
Nombre del Catalogo
pg_aggregate
pg_am
pg_amop
pg_amproc
pg_attrdef
pg_attribute
pg_authid
pg_auth_members
pg_cast
pg_class

Proposito

funciones de agregado
ndice de acceso a mtodos
los operadores del mtodo de acceso
procedimientos de acceso mtodo de apoyo
valores de las columnas por defecto
columnas de la tabla (los "atributos")
identificadores de autorizacin (roles)
autorizacin de las relaciones de identificacin de miembro
moldes (conversiones de tipos de datos)
tablas, ndices, secuencias, vistas ("relaciones")
restricciones de comprobacin, restricciones nicas, restricciones de
pg_constraint
clave principal, las claves forneas
pg_collation
colaciones (informacin local)
pg_conversion
conversin de codificacin de la informacin
pg_database
bases de datos dentro de este cluster de base de datos
pg_db_role_setting
por funcin y por base de datos configuracin
pg_default_acl
privilegios por defecto para los tipos de objetos
pg_depend
dependencias entre los objetos de base de datos
pg_description
descripciones o comentarios sobre los objetos de base de datos
pg_enum
enumeracin de etiquetas y definiciones de valores
pg_extension
extensiones instaladas
pg_foreign_data_wrapper extranjeros-los datos de definiciones de envoltura
pg_foreign_server
las definiciones de servidor extranjero

Nombre del Catalogo


pg_foreign_table
pg_index
pg_inherits
pg_language
pg_largeobject
pg_largeobject_metadata
pg_namespace
pg_opclass
pg_operator
pg_opfamily
pg_pltemplate
pg_proc
pg_rewrite
pg_seclabel
pg_shdepend
pg_shdescription
pg_statistic
pg_tablespace
pg_trigger
pg_ts_config
pg_ts_config_map
pg_ts_dict
pg_ts_parser
pg_ts_template
pg_type
pg_user_mapping

Proposito
informacin adicional tabla externa
informacin adicional de ndices
tabla de jerarqua de herencia
idiomas para la escritura de funciones
pginas de datos de objetos de gran tamao
metadatos para objetos de gran tamao
esquemas
acceder a las clases mtodo del operador
los operadores
acceso de las familias mtodo del operador
datos de la plantilla de las lenguas de procedimiento
funciones y procedimientos
reglas de consulta escribir
etiquetas de seguridad en los objetos de base de datos
las dependencias de objetos compartidos
comentarios sobre los objetos compartidos
estadsticas de planificador
espacios de tablas dentro de este grupo de base de datos
desencadenantes
configuraciones de bsqueda de texto
asignaciones de las configuraciones de bsqueda de texto 'token
diccionarios de bsqueda de texto
analizadores de bsqueda de texto
plantillas de texto de bsqueda
los tipos de datos
asignaciones de usuarios a los servidores extranjeros

Preguntas
Ing. Lennin Caro Prez
lennin.caro@yahoo.com
lcarop01@cantv.com.ve
@lennincaro

Enlaces
http://www.postgresql.org/docs/
PostgreSQL en espaol

http://archives.postgresql.org/pgsql-es-ayuda/
PostgreSQL Performance

http://archives.postgresql.org/pgsql-performance/

Esta charla es Copyleft 2011 Lennin Caro Prez, y esta bajo los
atributos de la licencia creative commons

Muchas gracias...

Вам также может понравиться