Monitoreo y TunningMonitoreo y TunningIng. Lennin Caro PérezIng. Lennin Caro Pérez
Pasos para entonar...Pasos para entonar...
Probar
DocumentarEntonar
Hardware... el primer puntoHardware... el primer punto
Componentes básicos 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
Hoy en día las aplicaciones están relacionadas con los procesadores
Cuantos nucleos necesito para ejecutar consultas
Si puedes aumentar la cantidad de procesadores ... Hazlo
ProcesadorProcesador
Cualquier actividad genera E/S hasta la escritura en disco
PostgreSQL es multi-procesador
Cada núcleo solo puede procesar una consulta a la vez
Lo mejor es realizar maximo dos consultas por nucleo
No tienes que pagar licencias por procesadores adicionales
Tips del ProcesadorTips del Procesador
Procesador Los multiprocesadores simétricos no son perfectos
En ocasiones es mejor tener mas procesadores con menos núcleos
Características 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 solución al bajo rendimiento
Memoria RAMMemoria RAM Usar la memoria necesaria es un caso de ensayo
y error
Limites mas críticos
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
Tienes la RAM suficiente para mantener en share_buffers la base de datos
Aproximadamente 6 veces el tamaño 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 tamaño en disco de la base de datos
E/S el cuello de botellaE/S el cuello de botella Cual es el límite de E/S de tu base de datos
Alto volumen de escrituras
Escritura del log por cada transacción Base de datos mas grandes que la RAM (aprox. 3 veces)
Cada consulta sera afectada por el límite de E/S
Optimiza la E/S Si la base de datos es muy grande, invierte en discos Calcula cuánto tarda en escribir en disco un bloque de datos Calcula cuánto tarda en leer toda la base de datos desde el
disco Revisa cuantos log de transacciones se generan
El camino del hardware El camino del hardware
La RedLa 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 recuperación 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 HWPrueba 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
decisión No creas en todo lo que te venden Prueba nuevamente Y por ultimo prueba de nuevo y compara
Mitos...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 versión y tipo
Una pieza mal configurada o en mal estado no puede inutilizar tu sistema
Las estadísticas 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 combinación correcta, comprala
Y el Sistema Operativo.....Y el Sistema Operativo.....
Sistemas operativos recomendados Free BSD GNU/Linux (Debian) Red Hat Solaris Unix
Metodos de sync para los sistemas operativosPlatform open_datasync fdatasync fsync_writethrough fsync open_sync
Linux No Sí No Sí DirectoMac OS X/Darwin No No Sí Sí Sí (Directo?)Solaris Sí Sí No Sí YesBSD/OS No No No Sí Sí (Directo?)FreeBSD No No No Sí 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 tengán más transacciones que otras.
Tablespace diferente para las tablas que sean más grandes que otras.
Sistema de Archivos XFS para base de datos grandes
Entonación en GNU/LinuxEntonación en GNU/Linux
Etx2
Etx3
NFS o cualquier sistema de archivos remoto
No es seguro cuando sucede una caida
Mas lenta que ext2 pero mas segura ya que tiene Journalling
Raiser para base de datos pequeñas
No tiene el mismo archivo manejo semántico del sistema de archivos local, y pueden causar problemas de fiabilidad de los datos o la recuperación de fallas
Etx4 Presenta un bug con el fsync
Sistema Operativo Modifica los valores de tu kernel en el sistema operativo
Verifica la versión del kernel para mejorar el rendimiento
Shmmax y shmall
Versión 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
Monitorea pro-activamente Conoce el rendimiento de tu equipo antes de que sea crítico Planifica tus alertas
MonitoreoMonitoreo
Más alla del 80% es problemático
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
Entonación de PostgreSQLEntonación de PostgreSQL
shared_buffers Usa una pequeña 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 configuración Muchos SWAP: el parametro esta muy alto Archivos temporales de log: parametro muy bajo
Entonación de PostgreSQLEntonación de PostgreSQL
maintenance_work_mem Usada para los bulks de carga de datos, vacuum, entre otros
Entre 256 MB y 1 GB
wal_buffers Es la memoria usada por el WAL (Write Ahead Log)
8 MB para los SMP
Usada para la creación de indices Permite que el vacuum sea más rapido
Pero cuidado si se estan ejecutando multiples vacuum
TransaccionesTransacciones effective_io_concurrency
Solo si el sistema operativo soporta E/S asincronas Número de discos/canales
checkpoint_segment Cuantos segmentos de log de 8MB se crean antes del
proximo checkpoint
Usa 16, 64, 128 (es cuestion de probar)
synchronous_commit La velocidad es más importante que la integridad
Coloca el parametro synchronous_commit = off Puedes perder data en un apagado abrupto del sistema
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
ConsultasConsultas
default_statistics_target Aumenta entre 200 a 1000 para base de datos grandes El valor por omisión es de 100 Actualizar las estadísticas 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
Autovacuum Activalo para aplicaciones con base de datos OLTP No es recomendable para base de datos OLAP Asegurate de incluir la opción analyze Para versiones de 8.2 y menores usar esta configuración:
stats_start_collector = on stats_block_level = on stats_row_level = on Autovacuum = on
MantenimientosMantenimientos
Para monitorear los autovacuum SELECt schemaname, relname, last_autovacuum,
last_autoanalyze FROM pg_stat_all_tables;
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;
MantenimientosMantenimientos
Vacuum Puedes ejecutar Vacuum manualmente sobre tablas que
tengan un gran número 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 más agresivo contra las tuplas ya que buscas las que
tengan datos “Freezing” Verbose: Muestra el detalle de las acciones realizadas Analyze: Actualiza las estadísticas usadas por el planner para
determinar el mejor camino
MantenimientosMantenimientos
Diseño de los esquemas No optimice prematuramente Analiza cuales tablas tendrán 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
RecomendacionesRecomendaciones
Indices Indexa las llaves foranes Indexa los criterios mas comunes para los WHERE Indexa los criterios agreagados (expresiones) Verifica los demás metodos de indexación (expressions, full
text, partial) y busca el más adecuado para tu necesidad
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 pequeñas no necesitan indices, revisa su
cardinalidad Verifica los indices actuales y cuales se estan usando
RecomendacionesRecomendaciones
Usa el catálogo pg_stat_user_indexes
Verifica las tablas que son hacen SEQUENCIAL SCAN y hacer muchas actualizaciones y borrados de datos
Usa el catálogo pg_stat_user_tables
Particiones Particiona las tablas que son muy grandes
RecomendacionesRecomendaciones
Consultas Prueba usar NOT IN o NOT EXISTS para consultas lentas Optimiza para consultas en cache
Ubica el campo candidato para realizar la partición 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
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 optiomización En raras ocasiones el planner se equivoca, pero no cuesta nada
probar
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 ejecución
RecomendacionesRecomendaciones
Optimización de consultasOptimización de consultas
Revisa pg_stat_statement
Aplica lascorreciones
Modifica lasconsultas lentas oloas parametros
Ejecuta Explain Analize en las consultas lentas
Optimización de procedimientosOptimización de procedimientos
Ubica los procedimientos mas lentos
Revisa pg_stat_function
Aplica lascorreciones
Localiza las operaciones lentas
Los catálogosLos catálogosNombre del Catalogo Proposito
pg_aggregate funciones de agregadopg_am índice de acceso a métodospg_amop los operadores del método de accesopg_amproc procedimientos de acceso método de apoyopg_attrdef valores de las columnas por defectopg_attribute columnas de la tabla (los "atributos")pg_authid identificadores de autorización (roles)pg_auth_members autorización de las relaciones de identificación de miembropg_cast moldes (conversiones de tipos de datos)pg_class tablas, índices, secuencias, vistas ("relaciones")
pg_constraint
pg_collation colaciones (información local)pg_conversion conversión de codificación de la informaciónpg_database bases de datos dentro de este cluster de base de datospg_db_role_setting por función y por base de datos configuraciónpg_default_acl privilegios por defecto para los tipos de objetospg_depend dependencias entre los objetos de base de datospg_description descripciones o comentarios sobre los objetos de base de datospg_enum enumeración de etiquetas y definiciones de valorespg_extension extensiones instaladaspg_foreign_data_wrapper extranjeros-los datos de definiciones de envolturapg_foreign_server las definiciones de servidor extranjero
restricciones de comprobación, restricciones únicas, restricciones de clave principal, las claves foráneas
Nombre del Catalogo Propositopg_foreign_table información adicional tabla externapg_index información adicional de índicespg_inherits tabla de jerarquía de herenciapg_language idiomas para la escritura de funcionespg_largeobject páginas de datos de objetos de gran tamañopg_largeobject_metadata metadatos para objetos de gran tamañopg_namespace esquemaspg_opclass acceder a las clases método del operadorpg_operator los operadorespg_opfamily acceso de las familias método del operadorpg_pltemplate datos de la plantilla de las lenguas de procedimientopg_proc funciones y procedimientospg_rewrite reglas de consulta escribirpg_seclabel etiquetas de seguridad en los objetos de base de datospg_shdepend las dependencias de objetos compartidospg_shdescription comentarios sobre los objetos compartidospg_statistic estadísticas de planificadorpg_tablespace espacios de tablas dentro de este grupo de base de datospg_trigger desencadenantespg_ts_config configuraciones de búsqueda de textopg_ts_config_map asignaciones de las configuraciones de búsqueda de texto 'tokenpg_ts_dict diccionarios de búsqueda de textopg_ts_parser analizadores de búsqueda de textopg_ts_template plantillas de texto de búsquedapg_type los tipos de datospg_user_mapping asignaciones de usuarios a los servidores extranjeros
PreguntasPreguntas
Enlaces http://www.postgresql.org/docs/
http://archives.postgresql.org/pgsql-performance/
http://archives.postgresql.org/pgsql-es-ayuda/ PostgreSQL Performance
PostgreSQL en español
Esta charla es Copyleft 2011 Lennin Caro Pérez, y esta bajo los atributos de la licencia creative commons
Contacto:
@lennincaro
+58 412-5826767
Muchas gracias...Muchas gracias...
Recommended