Optimizaciones de PostgreSQL. Wu - wu@e-shell.org 15 de noviembre de 2003



Documentos relacionados
Monitorización SGBD PostgreSQL

Servicio de Informática Vicerrectorado de Tecnologías de la Información y la Comunicación

Manual De Instalación MySQl 5.1 MANUAL DE INSTALACIÓN Y CONFIGURACIÓN DE MYSQL

En caso de que el cliente nunca haya obtenido una concesión de licencia de un servidor DHCP:

Instalación de FileZilla FTP Server

REDES DE ÁREA LOCAL. APLICACIONES Y SERVICIOS EN WINDOWS

Guía de uso del Cloud Datacenter de acens

Instalar y configurar W3 Total Cache

MANUAL DE AYUDA TAREA PROGRAMADA COPIAS DE SEGURIDAD

MANUAL COPIAS DE SEGURIDAD

AGREGAR UN EQUIPO A UNA RED Y COMPARTIR ARCHIVOS CON WINDOWS 7

INSTALACIÓN Y CONFIGURACIÓN SERVIDOR DE BASES DE DATOS POSTGRESQL ADMINISTRACIÓN DE SISTEMAS OPERATIVOS DE RED FRANCISCO JAVIER DUARTE GARCIA

2. Instalación y configuración del servidor FTP IIS en Windows 2008 Server.

INSTALACIÓN DE ORACLE 8i (8.1.7) SOBRE NT

Instala y configura un servidor SSH/SFTP. Transferir ficheros a dicho servidor con un cliente SFTP y SCP.

Curso de PHP con MySQL Gratis

Instituto Tecnológico Las Américas (ITLA) Sistemas Operativos 3 (SO3) Daniel Alejandro Moreno Martínez. Matrícula:

Redes de área local: Aplicaciones y servicios WINDOWS

Guia rápida EPlus Cliente-Servidor

5. Crea un sitio Web seguro usando tu propio certificado digital (Windows y Linux).

Ficheros de configuración de Nagios (ejemplo con nrpe y snmp)

UNIDESYS UNIVERSAL BUSINESS SYSTEMS INSTALACIÓN NUEVO PUESTO DE TRABAJO

PROYECTO ADMINISTRACIÓN ORACLE ENTERPRISE MANAGER

Software de Comunicaciones. Práctica 7 - Secure Shell. SSH

Servidor DNS sencillo en Linux con dnsmasq

QUÉ ES UN SERVIDOR Y CUÁLES SON LOS PRINCIPALES TIPOS DE SERVIDORES? (PROXY, DNS, WEB, FTP, SMTP, ETC.) (DV00408A)

4.2- Instalación y Configuración de un Servidor DNS Dnsmasq en Ubuntu sin DHCP

Luis Eduardo Peralta Molina Sistemas Operativos Instructor: José Doñe Como crear un Servidor DHCP en ClearOS

Servicio de Informática Vicerrectorado de Tecnologías de la Información y la Comunicación

Iptables, herramienta para controlar el tráfico de un servidor

Optimizar base de datos WordPress

Manual hosting acens

Instalar protocolo, cliente o servicio nuevo. Seleccionar ubicación de red. Práctica - Compartir y conectar una carpeta

Backup & Recovery Oracle 9i. Las copias físicas offline, conocidas como Backups en frío, se realizan cuando la Base de Datos está parada.

MANUAL DE AYUDA MODULO TALLAS Y COLORES

Actividad 1: Utilización cliente FTP (mediante línea de comandos, entornos gráficos y navegadores/exploradores) (I).

Manual de software. Dynamic Cloud. 10/2014 MS-Dynamic_Cloud v1.2

Como crear una red privada virtual (VPN) en Windows XP

Programa de Ayuda EMCS Instalación Versión SQL Server Versión Marzo 2010

CTSQL Monitor Windows

Tenemos que instalar los programas de los usuarios también (los anteriormente mencionados) y los siguientes que vamos a nombrar.

Sitios remotos. Configurar un Sitio Remoto

COPIAS DE SEGURIDAD CON COBIAN BACKUP INSTALACIÓN Y CONFIGURACIÓN

Aviso Legal El presente libro electrónico se distribuye bajo Attribution-NonCommercial- NoDerivs 3.0 Unported

Instituto Tecnológico de Las América. Materia Sistemas operativos III. Temas. Facilitador José Doñe. Sustentante Robín Bienvenido Disla Ramirez

Dossier de prácticas

WINDOWS : TERMINAL SERVER

UNIDAD DIDACTICA 4 INTEGRACIÓN DE CLIENTES WINDOWS EN UN DOMINIO

How to Crear Servidor Samba

SIEWEB. La intranet corporativa de SIE

Hostaliawhitepapers. Las ventajas de los Servidores dedicados. Cardenal Gardoki, BILBAO (Vizcaya) Teléfono:

Transacciones y bloqueos en SQL-Server

INSTALACION DEL Terminal Services. Instalamos el Terminal Services. Siguiente. Nos saldrá una advertencia, seleccionamos instalar.

Configuracion Escritorio Remoto Windows 2003

Internet Information Server

M a n u a l Inventarios

30 de Mayo de

Activación de un Escritorio Remoto

Pasamos ahora a definir brevemente cual es el método de conexión más habitual usando un entorno gráfico.

Plataforma e-ducativa Aragonesa. Manual de Administración. Bitácora

Instalación de un nodo (cliente) - GIA

Curso 2º SMR Módulo: SOR Sesión 6 SAMBA: Creando usuarios y grupos en Zentyal

COMO CONFIGURAR UNA MAQUINA VIRTUAL EN VIRTUALBOX PARA ELASTIX

Instituto Tecnológico de Las Américas (ITLA)

CITRIX Citrix Application Streaming

Configuración de Samba para compartir Archivos

DHCP. Dynamic Host Configuration Protocol. Protocolo de Configuración Dinámica de Host. Administración de Redes de Computadores

Hostaliawhitepapers. Usar Plesk para, poner en marcha nuestro dominio.

MANUAL APLICACIÓN. SOFTWARE GESTIÓN DE CLÍNICAS DENTALES

Programa diseñado y creado por Art-Tronic Promotora Audiovisual, S.L.

Cómo crear y configurar un servidor FTP

Redes de área local Aplicaciones y Servicios Linux NFS

U.E JUAN DE VELASCO CREAR DATOS EN SQL

Instalación y Configuración de un Servidor FTP

DOMINIO CON IP DINÁMICA

Servidor FTP en Ubuntu Juan Antonio Fañas

WINDOWS : COPIAS DE SEGURIDAD

Tutorial: Primeros Pasos con Subversion

El proceso de Instalación de Microsoft SQL Server 2008

Formas de llevar a cabo un backup de una base de datos MySQL

Primero escoja el dispositivo de entre las opciones disponibles: Encontraremos varios espacios para llenar los más importantes son:

Introducción a las redes de computadores

Instituto Tecnológico Las Américas (ITLA) Sistemas Operativos 3 (SO3) Daniel Alejandro Moreno Martínez. Matrícula:

Cómo creo las bandejas del Registro de Entrada /Salida y de Gestión de Expedientes?

Manual de operación Tausend Monitor

FortiReporter

Guía nuevo panel de clientes Hostalia

INSTALACIÓN DE GATEWAYS SIP

Servicio de groupware

Redes II Universidad Nacional de Jujuy Facultad de Ingeniería Carrera: APU 2008

Instalación. Interfaz gráfico. Programación de Backups. Anexo I: Gestión de la seguridad. Manual de Usuario de Backup Online 1/21.

Ubuntu Server HOW TO : SERVIDOR VPN. EN ESTE SE REALIZA LO SIGUIENTE: En este how to se le va a enseñar como usar vpn. Qué es una VPN?

Gestión de Retales WhitePaper Noviembre de 2009

ACTIVE DIRECTORY - PROPIEDADES DE USUARIO

PROYECTO INTEGRADO CLUSTER DE ALTA DISPONIBILIDAD CON HAPROXY Y KEEPALIVED. Antonio Madrena Lucenilla 21 de Diciembre de 2012 I.E.S.

HOW TO SOBRE LA CREACION DE UNA DISTRIBUCION PERSONALIZADA DE LINUX

Web Publishing con LabVIEW (I)

5.2.- Configuración de un Servidor DHCP en Windows 2003 Server

Transcripción:

Optimizaciones de PostgreSQL Wu - wu@e-shell.org 15 de noviembre de 2003 1

2 Resumen En el articulo anterior de la serie ( PostgreSQL, instalación y primeros pasos) vimos como instalar un servidor PostgreSQL minimamente funcional en OpenBSD y FreeB- SD. Ahora es el momento de ver algunas de las opciones de las que dispone PostgreSQL para optimizar nuestro sistema y sacarle el máximo rendimiento posible. Veremos que hay algunas opciones que podremos cambiar on-the-fly con simples sentencias SQL, y veremos que hay otras configuraciones que requieren que le enviemos una señal SIGHUP al servidor. Las opciones que requieren que reiniciemos el sistema las vamos a establecer en el fichero $PGDATA/postgresql.conf, siendo $PGDATA la ruta al directorio donde se almacena la info de la base de datos.

ÍNDICE 3 Índice 1. Cambios dinámicos - pg settings 4 2. Cambios estáticos - postgresql.conf y parámetros de postmaster 6 2.1. postgresql.conf............................ 6 2.2. Pasándole opciones a postmaster.................. 6 3. Parámetros de configuracion interesantes 7

1 CAMBIOS DINÁMICOS - PG SETTINGS 4 1. Cambios dinámicos - pg settings Mediante la vista pg settings, tenemos acceso a varios parámetros de configuración interesantes de PostgreSQL, algunos de ellos podremos incluso cambiarlos on-the-fly con el server corriendo. template1=# \d pg_settings View "pg_catalog.pg_settings" Column Type Modifiers ---------+------+----------- name text setting text View definition: SELECT a.name, a.setting FROM pg_show_all_settings() a(name text, setting Rules: pg_settings_u, pg_settings_n template1=# La vista pg settings se compone de dos campos, name y settings. El primero es el nombre del parámetro, mietras el segundo es el valor que va a tener el parámetro. Para los que estamos acostumbrados a currar con sistemas unix, sobre todo a nivel de configuracion de kernel, se nos puede parecer el sistema al utilizado en las sysctl de los kernels unix-like (Linux, BSD, Solaris). Para una explicacion detallada de todas las opciones cambiables dinámicamente y lo que hace cada una, lo mejor es echarle un ojo a la documentacion del administrador de bases de datos PostgreSQL, en el apartado Server Run-time Environment. Para cambiar un valor que sea actualizable dinámicamente, lo haremos a través de una sentencia SQL UPDATE, vamos a ver un ejemplo, voy a actualizar el valor del parametro effective cache size, que sirve para establecer el tamaño efectivo del cache de disco que usara postgresql para guardar datos en espacio de kernel, el valor por defecto es 1000: template1=# select * from pg_settings where name= effective_cache_size ; name setting ----------------------+--------- effective_cache_size 1000 (1 row) template1=# Para actualizarlo, con un simple update: template1=# update pg_settings set setting=1024 where name= effective_cache_size ; set_config ------------ 1024 (1 row) template1=# Ahora podemos ver que efectivamente hemos actualizado el valor de ese parametro de 1000 a 1024:

1 CAMBIOS DINÁMICOS - PG SETTINGS 5 template1=# select * from pg_settings where name= effective_cache_size ; name setting ----------------------+--------- effective_cache_size 1024 (1 row) template1=# Esto es aplicable para casi todos los parámetros de configuración, lo que nos permite cambiar al momento determinados parámetros dependiendo del uso que el PostgreSQL esté haciendo del servidor. De todas formas, veremos ahora que hay parametros como max connections, que no permiten cambios con el servidor corriendo.

2 CAMBIOS ESTÁTICOS - POSTGRESQL.CONF Y PARÁMETROS DE POSTMASTER6 2. Cambios estáticos - postgresql.conf y parámetros de postmaster 2.1. postgresql.conf En algunos casos, los parámetros de configuración del PostgreSQL no pueden cambiarse haciendo un update en la vista pg settings, si no que hemos de cambiarlo en el fichero postgresql.conf, y lanzarle un SIGHUP al servidor, para reiniciarlo y que releea los ficheros de configuración. El fichero postgresql.conf tiene un formato sencillo, de la forma: nombre = valor Siguiendo el mismo estilo que en la vista pg settings, y similar tambien al fichero /etc/sysctl.conf de OpenBSD o FreeBSD. El archivo es como cualquier fichero de configuracion de unix, o shell script, de forma que todo lo que aparezca en una linea a partir del caracter # es considerado un comentario. Un ejemplo de valor que debemos de establecer en el fichero postgresql.conf es el max connections, que tiene un valor por defecto de 32 conexiones: max_connections = 32 Podriamos cambiarlo facilmente al numero que quisieramos (Con algunas limitaciones como veremos más adelante): max_connections = 1024 Una vez cambiado el parámetro, tendríamos que enviarle un SIGHUP al server, que en nuestro caso es sencillo gracias al script rc.pgsql que hemos visto en el articulo anterior, para reiniciar el server: rc.pgsql restart 2.2. Pasándole opciones a postmaster Otra opción para asignar valores a estos parámetros es en el momento de lanzar el postmaster para arrancar el servidor, invocandolo con la opcion -c parametro=valor establecemos ese valor para ese parámetro de configuracion. Esta forma es especialmente útil en tests y pruebas del server, para ir probando los valores rápidamente, sin tener que estar editando el postgresql.conf y lanzando señales SIGHUP. Para ver una descripción detallada de las opciones de llamada de postmaster, basta con echarle un ojo a la pagina man de postmaster(1).

3 PARÁMETROS DE CONFIGURACION INTERESANTES 7 3. Parámetros de configuracion interesantes Vamos a ver ahora algunos parámetros que de base serán interesantes, cada caso ha de ser estudiado luego aparte del resto, para encontrar una configuracion óptima para él. authentication timeout : Tiempo máximo que esperaremos una autenticación correcta del usuario, el valor por defecto es 60 segundos. Si pasados esos 60 segundos el usuario no se autentica correctamente el server cierra la conexión. Un valor adecuado serian entre 15 y 30 segundos, de esa forma nos evitaríamos usuarios que establecen conexiones sin autenticarse y que ocupan conexiones que no podrán ser usadas por otros usuarios. client min messages, server min messages : Ambos indican el nivel de información que se sacará del server, el primero indica la cantidad de información que le es enviada a un cliente conectado al sistema mientras que el segundo indica la información que se va a enviar al log del sistema. Los posibles valores y sus implicaciones podemos verlos en el apartado Run-time Configuration de la documentación de PostgreSQL. fsync : Con esta opcion = on, PostgreSQL llama a fsync() para asegurarse de que los datos son grabados a disco físicamente después de cada commit por transaccion. Esto tiene ventajas e inconvenientes ya que en caso de un fallo en el sistema, si la base de datos se cierra inapropiadamente y los datos se han guardado físicamente a disco no será necesaria una raparación de la base de datos, con lo que el rearranque del sistema se agiliza muchísimo, aparte de que la perdida de datos se reduce casi a 0. El incoveniente mas grande es que dependiendo del disco que tengamos, el proceso de fsync() puede ralentizar al sistema, ya que cada vez que se llame a fsync() ha de esperar a que se escriba en el disco. fsync() ha sido mejorada mucho a partir de las versiones 7.1 de pgsql, por lo que la diferencia de velocidad con la opcion activada o no puede no ser realmente ventajosa en un entorno en el que el sistema se reinicie con frequencia. geqo : O Generic Query Optimization, con esta opción activamos o desactivamos el algoritmo que utiliza PostgreSQL para optimizar las querys al sistema. El valor por defecto es on (activado) y es más que aconsejable dejarlo activado. De todas formas, disponemos de opciones relacionadas con geqo, de forma que se pueden optimizar determinados parametros. Una vez mas podemos encontrar mas informacion sobre estos parametros en el apartado Run-time Configuration de la documentación de PostgreSQL. hostname lookup : Si queremos que en lugar de la direccion ip desde la que se conecta el usuario, se loguee el nombre del host (si resuelve) deberiamos de poner a on esta opcion. Es bastante desaconsejable, ya que ralentiza bastante el sistema en general.

3 PARÁMETROS DE CONFIGURACION INTERESANTES 8 lc * : Establecidas como vimos en el articulo anterior en el momento de crear el database cluster (el directorio de trabajo de postgresql), podemos cambiarlas ahora si fuese necesario. De todas formas, y como ya hemos visto, es mejor crear el database cluster con las locales adecuadas y olvidarnos de esto. log * : Con estos parámetros configuramos el log del server, aquí le decimos si queremos que loguee las conexiones de los usuarios (log connections), que marque cada linea del log con el pid del proceso y la fecha (log pid y log timestamp respectivamente), y si queremos que loguee tambien las sentencias SQL ejecutadas en todo momento en el servidor (log statement). max expr depth : Este parámetro establece el numero máximo de subsentencias que se va a poder alcanzar, por ejemplo subselects, como máximo. El valor por defecto es 10000, lo cual en principio y si no tenemos ninguna necesidad fuera de lo normal, es mas que suficiente. password encryption: Si activamos esta opción, al hacer un create user with password, pero sin ponerle encrypted, nos encryptara el password de todas formas, evitando asi el tener passwords en plain text en el sistema. silent mode : Con esta opción activada, el servidor no suelta ningún tipo de mensaje ni por stderr ni por stdout. Esta opción es util si tenemos configurado PostgreSQL para loguear por syslog. ssl : Esta opción ha de estar activada para que podamos establecer conexiones encryptadas al servidor (la opcion hostssl de pg hba.conf). Para poder activar esta opción, tendremos que generar un certificado y configurar un par de cosas, eso lo veremos en el tercer articulo de la serie. statement timeout : Con esto podemos definir un número máximo de segundos que una sentencia puede estar ejecutandose. Por defecto es 0, lo que la desactiva. Es una opción interesante en entornos en los que no nos interese que un usuario pueda ejecutar consultas demasiado largas que bloqueen recursos del servidor demasiado tiempo. stats start collector : Con esta opción, activamos o desactivamos el statistics collector de PostgreSQL, que sirve para monitorizar numerosos parámetros del servidor. En próximos articulos veremos como beneficiarse de estas estadísticas para ir afinando el servidor a nuestras necesidades. syslog : Con esta opción establecemos el tipo de logueo que hará el server:

3 PARÁMETROS DE CONFIGURACION INTERESANTES 9 0 - stdout/stderr solamente 1 - loguea a syslog y por stdout/stderr 2 - syslog, aunque algunos errores saldran a stderr a menos que activemos la opcion silent mode que vimos antes. syslog ident : El string con el que se identificará ante el syslog (por defecto postgres). unix socket * : Estos parámetros nos permiten definir en que directorio se va a crear el socket unix mediante el que se hacen las conexiones locales (unix socket directory), el grupo dueño de ese fichero (unix socket group), y los permisos con los que será creado el fichero (unix socket permissions), por defecto 511 (usuario lectura y ejecucion, grupo y otros lectura). virtual host : Con este parámetro podemos definir para que dirección ip o nombre de host escuchará el PostgreSQL peticiones por tcp/ip, por defecto escucha en todas las interfaces de las que disponga la maquina. max connections y shared buffers : Estas dos las he dejado para el final por que son bastante especiales, además de ser dependientes una de la otra. Para cada valor de max connections (que indica el numero maximo de conexiones simultaneas que manejara el servidor) tenemos que tener al menos el doble para shared buffers (buffers de memoria utilizados por el servidor). A la hora de establecer estas opciones, tendremos que tener en cuenta el uso de SYSV semaphores del PostgreSQL; es un tema espinoso, ya que dependiendo de como se encuentren configurados determinados parámetros del kernel de nuestro servidor, veremos que se nos permite un determinado máximo en max connections o no. Para más información sobre esto, podemos recurrir al apartado Managing Kernel Resources de la documentación de PostgreSQL.