SlideShare una empresa de Scribd logo
1 de 93
Descargar para leer sin conexión
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
1/93
Curso de PostgreSQL DBACurso de PostgreSQL DBA
Desde Básico a AvanzadoDesde Básico a Avanzado
20112011
Parte 2Parte 2
Ernesto Quiñones AzcárateErnesto Quiñones Azcárate
ernesto@eqsoft.neternesto@eqsoft.net
●1: Instalación, Configuración y Logs bajo Gnu/Linux
●2: Software administración y SQL para DBAs
●3: Objetos de la DB, Herencias y Tablas particionadas
●4: Schemas y Tablespaces, Roles y Accesos
●5: Backup/Restore/Vacuum, Migraciones, Indices
●6: DBLinks, DbiLinks y Paquetes del Contrib
●7: Análisis de Hardware para soluciones avanzadas,
Monitoreo sobre Gnu/Linux.
●8: Configuración Avanzada y Problemas Comunes
●9: Replicación Asíncrona con PostgreSQL 9.0
●10: Pool de Conexiones con PgPool
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
2/93
●6: DBLinks, DbiLinks y Paquetes del Contrib
1. DBLinks
PostgreSQL no permite acceder de manera transparente entre la data de un servidor y 
otro, incluido entre propios servidores PostgreSQL para ello se requiere crear una 
conexión entre ambos servidores.
Tome en cuenta uan cosa, acceder a otra db desde la cual se esta trabajando y operar 
sobre ella requerirá que PostgreSQL jale toda la data de las tablas que involucren la 
operación, luego el dbms filtrará la necesaria en la db actual pero solo después de 
haber jalado todo.
DbLink no viene por defecto, es necesario instalar el paquete “contrib” de la versión 
que estemos usando
        [root@host] yum install postgresql­contrib
Ahora debemos entrar a la base de datos que se conectará con las demás bases de datos 
y ejecutar este script:
        prueba5=# i /usr/share/pgsql/contrib/dblink.sql 
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
3/93
1. DBLinks
a) CREATE FOREIGN DATA WRAPPER
Creamos una fuente de datos externa, esto es parecido a un canal de comunicación, solo 
el super usuario “postgres” debe realizar esta acción.
Prueba5=# CREATE FOREIGN DATA WRAPPER dw_prueba VALIDATOR postgresql_fdw_validator;
VALIDATOR postgresql_fdw_validator esta predeterminado para chequear la consistencia 
de la conexión, si no se especifica esto no se validará la misma.
b) CREATE SERVER
Con está sentencia creamos el servidor al cual nos vamos a conectar
prueba5=# CREATE SERVER srv_prueba FOREIGN DATA WRAPPER dw_prueba OPTIONS (hostaddr  '127.0.0.1', 
dbname 'drupal7',port '5432');
c) CREATE USER MAPPING
Creamos un usuario de conexión a la db foranea.
prueba5=# CREATE USER MAPPING FOR dbadmin SERVER srv_prueba OPTIONS (user 'usuario_foraneo', 
password 'password_foraneo');
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
4/93
●6: DBLinks, DbiLinks y Paquetes del Contrib
1. DBLinks
dbadmin          <­­ es el usuario/rol al cual le vamos a dar acceso al servidor, ya debe existir
                     en el servidor.
usuario_foraneo  <­­ es el usuario que tiene acceso a la db foránea, debe estar creado en la db
                     foranea y configurado para permitir el acceso desde la IP del servidor que
                     desea conectarse.
password_foraneo <­­ clave
d) SELECT dblink_connect
Una vez configurada la conexión salimos del usuario “postgres” y utilizamos el usuario 
que hemos definod va a hacer uso de la conexión, el primer paso entonces será activar 
la conexión dblink de esta forma:
prueba5=# SELECT dblink_connect('dw_prueba','srv_prueba');
e)Probando la conexión:
prueba5=# select dblink_exec('dw_prueba','create table tbl_pruebas(id serial,nombre varchar(100))');
 dblink_exec  
­­­­­­­­­­­­­­
 CREATE TABLE
prueba5=# select dblink_exec('dw_prueba','insert into tbl_pruebas (nombre) values (''ernesto'')');
 dblink_exec 
­­­­­­­­­­­­­
 INSERT 0 1
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
5/93
●6: DBLinks, DbiLinks y Paquetes del Contrib
1. DBLinks
prueba5=# select dblink_exec('dw_prueba','insert into tbl_pruebas (nombre) values (''juan'')');
 dblink_exec 
­­­­­­­­­­­­­
 INSERT 0 1
ernesto@depeche:~$ psql drupal7 ­U dbadmin                                                           
psql (8.4.4)                                                                                         
                                                                                               
drupal7=# select * from tbl_pruebas;                                                                 
                    
 id | nombre                                                                                         
­­­­+­­­­­­­­­                                                                                       
  1 | ernesto                                                                                        
  2 | juan                                                                                           
(2 filas)                                                                                            
f)Trayendo Data:
prueba5=# select * from dblink('mi_conexion','select * from tbl_pruebas') as (f_id integer, f_nomber 
varchar(100));
 f_id | f_nomber 
­­­­­­+­­­­­­­­­­
    1 | ernesto
    2 | juan
(2 filas)
Para conocer más sobre las funciones de dblink 
http://www.postgresql.org/docs/9/static/dblink.html 
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
6/93
●6: DBLinks, DbiLinks y Paquetes del Contrib
●6: DBLinks, DbiLinks y Paquetes del Contrib
2. DBiLinks
Así como necesitamos/podemos establecer conexiones entre diversos servidores 
PostgreSQL podemos establecer conexiones con servidores NO PostgreSQL, servidores como 
MySQL, Oracle, Ms SQL Server y en general casí cualquier servidores de bases de datos 
que tenga un cliente de conexión para el lenguaje de programación Perl (en CentOS solo 
tenemos MySQL y SQLite).
a) Instalar los paquetes de software necesarios:
   [root@host] yum install postgresql­plperl                <­­ soporte de lenguaje Perl para
                                                                Postgresql.
   [root@host] yum install libdbi­dbd­mysql perl­DBD­MySQL  <­­ liberias de Perl para conectarse
                                                                a la base de datos deseada.
   [root@host] yum install perl­YAML                        <­­ metalenguaje de Perl para bases de
                                                                datos.
b) Descargar el paquete del DbiLink, desde el url:
   http://pgfoundry.org/projects/dbi­link/  
c) Configurar el soporte del lenguaje Perl en la base de datos PostgreSQL desde la 
   Que deseamos establecer la conexión a la base de datos remota (en este caso MySQL).
   [root@host] createlang plperlu pruebas ­U dbadmin        <­­ “plperlu” es el lenguaje Perol para
                                                                PostgreSQL y “pruebas” es la base 
                                                                de datos donde se instalará el
                                                                lenguaje.
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
7/93
●6: DBLinks, DbiLinks y Paquetes del Contrib
2. DBiLinks
d) Desempaquetamos el paquete de DbiLink que bajamos de PgFoundry en un directorio
   desde el que pueda accederse para una vez logeado como el usuario que llevará a 
   cabo la conexión importar el script que añade el soporte de DbiLink a nuestra
   base de datos.
   [root@host] cd dbi­link­2.0.0/
   [root@host] psql ­f dbi_link.sql pruebas ­U dbadmin
   Este paso nos creará todo un entorno especial dentro de la base de datos “pruebas”
   para activar conecciones a servidores NO PostgreSQL remotos, la información
   recidirá en un schema especial llamado “dbi_link”.
e) Dentro de la base de datis “pruebas” configuramos un ingreso automático a las
   funciones de Dbi_Link por facilidad para la administración.
    pruebas=# UPDATE pg_catalog.pg_settings
    pruebas­#   SET setting = CASE WHEN 'dbi_link' = ANY(string_to_array(setting, ','))
    Pruebas­#                   THEN setting
    pruebas­#                   ELSE 'dbi_link,' || setting
    pruebas­#                 END
    pruebas­# WHERE name = 'search_path';
           set_config        
    ­­­­­­­­­­­­­­­­­­­­­­­­­
     dbi_link,"$user",public
    (1 row)
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
8/93
●6: DBLinks, DbiLinks y Paquetes del Contrib
2. DBiLinks
f) Configuramos la conexión a la base de datos remota (en este caso en MySQL).
SELECT make_accessor_functions(
'dbi:mysql:database=mydb;host=localhost',       <­­ “mydb” debe ser el nombre de la db a conectarse
'usuario_coneccion',                            <­­ usario autorizado en la db a conectarse
'password_coneccion',                           <­­ password
'­­­
AutoCommit: 1                                   <­­ Si esto es 0 entonces debemos hacer commit a
RaiseError: 1                                       nuestras transacciones
',
NULL,
NULL,
NULL,
'mydb'                                          <­­ nombre del esquema en PostgreSQL desde al que
);                                                  accederemos a la data en el servidor foraneo.
OJO no intente escribir todo el query en una sola linea, por algún motivo que no 
comprendo el servicio requiere que dejes los saltos de linea que se pueden ver aqui, 
las cadenas de conexión y parámetros podrían variar si la base de datos a la que nos 
queremos conectar es otra como por ejemplo Oracle.
Luego de ejecutarlo se creara un nuevo esquema con el nombre "mydb", osea el mismo 
nombre de la db a la que me quiero conectar.
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
9/93
●6: DBLinks, DbiLinks y Paquetes del Contrib
2. DBiLinks
Probamos la conexión.
pruebas=# select * from db_en_mysql.tablita;
NOTICE:  SELECT dbi_link.cache_connection( 1 ) at line 12.
 campo 
­­­­­­­
 1
 2
 3
(3 rows)
Restricciones:
a. No podemos hacer create, drop ó alter.
b. Cambios en la estructura de la base de datos remota no se ven reflejados
   automáticamente en la base de datos PostgreSQL, para ello es necesario actualizar
   la información del Schema.
    pruebas=# select dbi_link.refresh_schema(1)       <­­ “1” es el número de la conexión.
    pruebas=#  from dbi_link.dbi_connection 
    pruebas=#  where local_schema = 'db_en_mysql';
Para saber el número de una conexión:
    pruebas=# select data_source_id, data_source from dbi_connection;
     data_source_id |                  data_source                  
    ­­­­­­­­­­­­­­­­+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
                  1 | dbi:mysql:database=db_en_mysql;host=localhost
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
10/93
3. Paquetes del Contrib
El contrib es un conjunto de aplicaciones adicionales que se ejecutan sobre PostgreSQL 
y añaden nueva funcionalidad, estos no son necesariamente programas independientes, en 
su mayoría son scripts en diferentes lenguajes “PL”, especialmente “pl/pgSQL”.
El paquete Contrib que acompaña una distribución Gnu/Linux podría variar en cantidad 
de aplicativos del que existe en otra distribución.
    [root@ernesto ~]# rpm ­qla postgresql­contrib
    ....
    ....
    /usr/share/pgsql/contrib/_int.sql
    /usr/share/pgsql/contrib/adminpack.sql
    /usr/share/pgsql/contrib/autoinc.sql
    /usr/share/pgsql/contrib/btree_gin.sql
    /usr/share/pgsql/contrib/btree_gist.sql
    /usr/share/pgsql/contrib/chkpass.sql
    /usr/share/pgsql/contrib/citext.sql
    /usr/share/pgsql/contrib/cube.sql
    /usr/share/pgsql/contrib/dblink.sql
    /usr/share/pgsql/contrib/dict_int.sql
    /usr/share/pgsql/contrib/dict_xsyn.sql
    /usr/share/pgsql/contrib/earthdistance.sql
    ....
    ....
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
11/93
●6: DBLinks, DbiLinks y Paquetes del Contrib
3. Paquetes del Contrib
Para instalar uno de los paquetes del Contrib ejecutamos el script deseado:
   pruebas=# i /usr/share/pgsql/contrib/cube.sql 
   SET
Una lista completa de los contribs de mayor uso se puede encontrar aquí:
http://wiki.postgresql.org/wiki/Extensions 
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
12/93
●6: DBLinks, DbiLinks y Paquetes del Contrib
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
13/93
●7: Análisis de Hardware para soluciones avanzadas, Monitoreo sobre Gnu/Linux.
1. Análisis de Hardware para soluciones avanzadas
El Hardware en ambientes de gran demanda o gran tamaño requiere unas 
consideraciones especiales, dado a que PostgreSQL contiene poca complejidad 
de afinamiento y se integra muy estrechamente con el sistema operativo el 
rendimiento va a depender más de esté último y del hardware en el que esta 
montado que de algún “tuneo” en especial.
Los elementos que uno debe verificar siempre en su infraestructura actual o 
en la que piensa adquirir van siempre por analizar estos componentes:
a. CPU
b. RAM
c. Discos Duros
d. Sistema de Archivos
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
14/93
●7: Análisis de Hardware para soluciones avanzadas, Monitoreo sobre Gnu/Linux.
1. Análisis de Hardware - CPU
PostgreSQL no es un software multi­hilos, pero si es un software que 
utiliza 1 Procesador por conexión ó 1 core por conexión, esto permite que 
el máximo de cores de nuestro servidor sea utilizado eficientemente en 
nuestra base de datos.
Actualmente todas las configuraciones de servidores vienen de serie con 
procesadores de 2 cores hasta 8 y pueden soportar desde 1 hasta muchos 
cores (normalmente hasta 2 ó 4).
Es importante determinar que tipo de procesador necesito para obtener el 
mejor rendimiento, en la mayoría de los casos el poder de procesamiento de 
los cores de nuestro servidor es demasiado alto para lo que realmente 
necesitamos, en una base de datos transaccional pura los querys hacen un 
uso bajo de procesador (pero si más de disco) por lo cual un “core” de 
mucha potencia estaría desperdiciado, pero en entorno de querys de gran 
movimiento de datos o complejidad estos “cores” si serían una necesidad 
imperiosa.
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
15/93
●7: Análisis de Hardware para soluciones avanzadas, Monitoreo sobre Gnu/Linux.
1. Análisis de Hardware - CPU
¿AMD ó INTEL?
Eso dependerá de lo mencionado en la primera parte:
AMD menor precio que INTEL, más cores por el mismo precio, menor potencia y 
por ello menor rendimiento en querys pesados, mayor soporte de 
concurrencia.
INTEL mayor precio, menos cores por el mismo precio, mayor potencia y por 
ello mejor rendimiento en querys pesados, pero un desperdicio en ambientes 
de querys sencillos, menor soporte de concurrencia.
¿Otros?, no tiene sentido.
Para ver la velocidad de un procesador y sus cores:
monstrito@monstrito­desktop:~/curso_pgsql$ cat /proc/cpuinfo 
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
16/93
●7: Análisis de Hardware para soluciones avanzadas, Monitoreo sobre Gnu/Linux.
1. Análisis de Hardware - CPU
processor        : 0
vendor_id        : AuthenticAMD
cpu family   : 16
model   : 10
model name   : AMD Phenom(tm) II X6 1090T Processor
cpu MHz   : 800.000
cache size   : 512 KB
siblings        : 6
cpu cores        : 6
bogomips        : 6400.30
TLB size        : 1024 4K pages
clflush size   : 64
cache_alignment  : 64
address sizes   : 48 bits physical, 48 bits virtual
power management : ts ttp tm stc 100mhzsteps hwpstate [9]
Otra forma de medir performance es verificar el tiempo tomado en ejecutar una operación directa en 
el CPU desde PostgreSQL.
prueba2=# timing
prueba2=# select sum(generate_series) from generate_series(1,10000000);
     sum
­­­­­­­­­­­­­­­­
 50000005000000
(1 row)
Time: 2407.629 ms
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
17/93
●7: Análisis de Hardware para soluciones avanzadas, Monitoreo sobre Gnu/Linux.
1. Análisis de Hardware - RAM
¿Más RAM es mejor? Depende
Si tenemos poca data y poca RAM pero buenos procesadores el efecto de bajo 
rendimiento no se notará demasiado, el tiempo de respuesta de un procesador 
sera inversamente proporcional a la cantidad de RAM que tengamos.
Si tenemos tablas con mucha data pero que no se consulta no será problema 
tener poca RAM, pero si se consulta demasiado entonces mientras más RAM 
tengamos será mucho mejor.
Para detectar problemas en la RAM podemos usar diferente software como:
* http://pyropus.ca/software/memtester/
  [root@host] yum install memtester
  [root@host] memtestar [bloques de memoria a testear]K|M|G <­­ unidad del bloque
* Http://www.memtest.org
  Se puede instalar ejecutable ó descargar el cd booteable
  [root@host] yum install memtes86+   <­­ reiniciar la máquina 
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
18/93
●7: Análisis de Hardware para soluciones avanzadas, Monitoreo sobre Gnu/Linux.
1. Análisis de Hardware – Discos Duros
Básicamente tenemos 2 opciones en el mercado, SAS (Serial Attached SCSI) y 
SATA (Serial ATA), el criterio para seleccionar una u otra son muy 
parecidos al tema de los procesadores.
SAS mayor velocidad de rotación (10k a 15K RPM), costo elevado por GB de 
almacenamiento (existen modelos de SATA 3Gbit/s que son posible de añadir 
en un bus SAS).
SATA menor velocidad (7.2K RPM, algunos llegan a 10K RPM) , costo bajo por 
GB de almacenamiento y unidades de almacenamiento más grandes que en SAS.
¿Porque Serial SCSI y no Parallel SCSI?
* Serial soporta hasta 65,535 unidades, Parallel solo 8 ó 16 como máximo.
* La transferencia es mayor en SAS (3 á 6 Gbit/s) que en Parallel.
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
19/93
●7: Análisis de Hardware para soluciones avanzadas, Monitoreo sobre Gnu/Linux.
1. Análisis de Hardware – Discos Duros - RAIDs
RAID (Redundant Array of Inexpensive Disk) usado para obtener mejoras en 
cuanto rendimiento, capacidad de almacenamiento y redundancia en la data.
El soporte de RAID por hardware es siempre el más adecuado.
* RAID 0: 2 ó más discos que unidos funcionan como una solo sumando sus
  capacidades de almacenamiento, el problema es que si uno falla se pierden
  todos los datos.
* RAID 1: 2 discos en espejo conteniendo la misma data, mejora el
  rendimiento al poder acceder el sistema a los datos desde cualquiera de 
  los 2 y permite mantener el sistema aunque uno de ellos falle, los discos
  deben ser idénticos ya que solo se tendrá la capacidad de almacenamiento
  de uno de ellos.
* RAID 1+0: 4 discos o más discos (en cantidades pares) idénticos, se 
  configuran 2 grupos de Raid 0 y luego se configura una Raid 1 con los 2
  Raid 0, se recomienda para entornos de alta disponibilidad.
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
20/93
●7: Análisis de Hardware para soluciones avanzadas, Monitoreo sobre Gnu/Linux.
1. Análisis de Hardware – Discos Duros - RAIDs
RAID (Redundant Array of Inexpensive Disk) usado para obtener mejoras en 
cuanto rendimiento, capacidad de almacenamiento y redundancia en la data.
* RAID 5: 3 o más discos, se suman las capacidades del total de discos
  menos 1 y un disco se guarda para fines de paridad, si uno de ellos
  colapsa la información puede ser reconstruida gracias al disco de
  paridad, el rendimiento en escritura podría decaer notablemente.
* RAID 6: 4 o más discos, se suman las capacidades del total de discos
  menos 2 (o más incluso) de tal manera que los adicionales se usan de
  paridad como sistema de tolerancia a fallos en caso de que 2 o más discos
  colapsen.
  Una falla en un disco hará que el uso de los demás suba intensamente,
  probablemente por muchas horas.
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
21/93
●7: Análisis de Hardware para soluciones avanzadas, Monitoreo sobre Gnu/Linux.
1. Análisis de Hardware – Discos Duros - SSDs
SSD (Solid State Drive) son memorias FLASH que ofrecen una gran 
velocidad de acceso pero a un costo por Gb muy alto en comparación 
a otro tipo de unidades, dado a que sus capacidades de 
almacenamiento son bastante reducidas son ideales para entornos de 
alta demanda de lectura de datos.
Son muy propensos a la corrupción por eso se deben buscar unidades que 
cuenten con baterías de respaldo para minimizar el riesgo de perdida de 
data en ellos.
Como su longevidad depende del uso de escritura que se le de no son muy 
convenientes para cache.
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
22/93
●7: Análisis de Hardware para soluciones avanzadas, Monitoreo sobre Gnu/Linux.
1. Análisis de Hardware – Discos Duros – El problema del Write-Back Cache
Toda la data siempre se trabaja entre la RAM y el Procesador antes de bajarse a disco 
y liberarlos para recibir y procesar otros datos.
Como RAM y Procesador son extremadamente mucho más rápidos que los discos, el sistema 
operativo almacena los datos en una espacio RAM del propio disco para luego grabarlos 
realmente a los platos del disco, en situaciones extremas el disco demorará varios 
minutos antes de completar la grabación.
PostgreSQL incorpora WAL como mecanismo de protección contra corrupciones a los datos 
antes de grabase en los repositorios de data final, en la practica sucede esto:
/pg_xlog
WAL
Write
Cache
/base
DATA
Write
Cache
Disco
RAM
Si en este
Instante se cae el
servicio tenemos
data
corrupta
Transacción
Finalizada
PGSQL
Procesando
Responde antes de grabar
realmente al HD que ya se grabó
la data al disco.Si PostgreSQL lo ve por conveniente
graba cosas directamente a “base” sin
pasar por “pg_xlog”
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
23/93
●7: Análisis de Hardware para soluciones avanzadas, Monitoreo sobre Gnu/Linux.
1. Análisis de Hardware – Discos Duros – El problema del Write-Back Cache
Para evitar la posibilidad de perder datos es necesario  desactivar el Write Cache de 
los discos duros.
Para ver si tenemos el Write Cache activo hacemos esto:
[root@host]# hdparm ­I /dev/sda | egrep "Write cache" <­­ /dev/sda es la unidad HD
          *    Write cache                            <­­ si está activo aparece
                                                          con “*”
[root@host]# hdparm ­W 0 /dev/sda                     <­­ desactiva el write Cache
/dev/sda:
 setting drive write­caching to 0 (off)
 write­caching =  1 (on)                              <­­ problema en CentOS, no se 
                                                          Puede desactivar el Write
                                                          Cache
En RAIDs ó SANs los Write Cache pueden ser de 128MB hasta 512MB, en discos SATA 
generalmente están entre 8MB a 32MB, soluciones alternas son poder configurar el 
tamaño del Write Cache del disco ó eventualmente comprar unidades de disco que tengan 
baterías para casos de perdida de energía o Cache no volátil
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
24/93
●7: Análisis de Hardware para soluciones avanzadas, Monitoreo sobre Gnu/Linux.
1. Análisis de Hardware – Discos Duros – Limites de commits x segundo
Según la tecnología de los discos vamos a obtener cantidad máxima de 
commits que podemos hacer por segundo, estos dependerán de la velocidad de 
rotación de los platos, mientras más rápida la rotación mayor será la 
cantidad de commits que se podrán procesar.
En un escenario básico, donde tenemos trabajando un disco duro, con el 
write cache desactivado tendremos estas tasas de operaciones máximas por 
segundo:
5400  RPM == 90  commit/segundo
7200  RPM == 120 commit/segundo
10000 RPM == 166 commit/segundo
15000 RPM == 250 commit/segundo
Para exceder estas tasas de operaciones deberíamos tener un método de 
cacheo de disco seguro.
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
25/93
●7: Análisis de Hardware para soluciones avanzadas, Monitoreo sobre Gnu/Linux.
1. Análisis de Hardware – Discos Duros – Sistema de Archivos
En la actualidad casi todo sistema de archivos moderno es del tipo 
”Journaling”, es decir maneja un sistema de administración de las 
escrituras en disco que pasa por varios entornos de  caché antes de llegar 
a grabar la data a disco (esto no es write cache).
Journaling sigue la misma idea del WAL de PostgreSQL, el uso de ambos 
produce un mayor overhead en nuestro servidor.
EXT3 era el sistema de archivos más utilizado anteriormente, en la 
actualidad el mundo se está moviendo a EXT4 con muchas ventajas como por 
ejemplo poder manejar sistemas de archivos mayores a 16TB.
XFS es la otra alternativa viable a EXT3 si no se desea implementar EXT4, 
es ligeramente más veloz que EXT3, JFS y ReiserFS ya no deben ser 
considerados como opciones viables, se espera que a futuro Btrfs pueda 
reemplazar a EXT4 (aún no es estable) y se considera muy adecuado para base 
de datos (fue desarrollado por Oracle).
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
26/93
●7: Análisis de Hardware para soluciones avanzadas, Monitoreo sobre Gnu/Linux.
1. Análisis de Hardware – Discos Duros – Sistema de Archivos
En el caso de sistemas tipo UNIX para bases de datos de altos volumenes de 
datos ZFS (Solaris) es la opción más adecuada debido a que utiliza 
paginación de 128Kb (pero puede ser configurado para ser menor) esto puede 
generar que el sistema no responda eficientemente en caso de lectura y 
escritura de datos pequeños.
UFS (FreeBSD) presenta mejor rendimiento para bases de datos de poca data, 
este sistema no eS Journaling lo que ocasiona una buena performance para 
las escrituras, pero en caso de caidas del sistema el tiempo de 
recuperación del sistema de archivos es mayor al de un sistema Journaling.
2. MONITOREO - TOP y HTOP
TOP es un comando convencional de Linux / Unix que nos permite ver los procesos que se 
ejecutan en el servidor.
Los procesos ejecutados por PostgreSQL son normalmente ejecutados por los usuarios 
“postgres”, “pgsql” ó “postmaster”.
ernesto@depeche:~/aaa$ ps aux | egrep postgres
postgres   961  0.0  0.1 101580  2228 ?        S    Oct08   0:06 /usr/lib/postgresql/8.4/bin/postgres ­D 
/var/lib/postgresql/8.4/main ­c config_file=/etc/postgresql/8.4/main/postgresql.conf
postgres   989  0.0  0.3 101704  6208 ?        Ss   Oct08   0:11 postgres: writer process                                
postgres   990  0.0  0.0 101580   568 ?        Ss   Oct08   0:08 postgres: wal writer process                            
postgres   991  0.0  0.0 102380  1320 ?        Ss   Oct08   0:09 postgres: autovacuum launcher process                   
postgres   992  0.0  0.0  73704   848 ?        Ss   Oct08   0:17 postgres: stats collector process                       
Recuerde que PostgreSQL maneja un procesador por conexión, si tiene varios 
procesadores un proceso lanzado no usará varios procesadores, solo uno, deja los otros 
disponibles para otras conexiones que lanzan sus propios procesos, la ventaja del uso 
de esta funcionalidad se complementa con la capacidad de administración de usuarios 
concurrentes que tenga el sistema operativo que se está usando (que soporte SMP).
Nunca mate un proceso que demora mucho 
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
27/93
●7: Análisis de Hardware para soluciones avanzadas, Monitoreo sobre Gnu/Linux.
2. MONITOREO - PG_TOP
http://ptop.projects.postgresql.org/
En CentOS 6 solo tenemos soporte de PG _TOP para PostgreSQL 9.0 en repositorios no 
oficiales pero existe una manera de ejecutar este paquete para PostgreSQL 8.4.
* Descargamos el paquete de esta dirección:
  http://www.pgrpms.org/9.0/redhat/rhel­6­x86_64/ 
  pg_top90­3.6.2­3.rhel6.x86_64.rpm    <­­ ubicar este paquete
“ Instalamos el paquete forzando que no solicite dependencias
  [root@host]# rpm ­ivh ­­nodeps /ruta/pg_top90­3.6.2­3.rhel6.x86_64.rpm 
  warning: /ruta/pg_top90­3.6.2­3.rhel6.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID 442df0f8:   
  NOKEY
  Preparing...                ########################################### [100%]
     1:pg_top90               ########################################### [100%]
* Creamos la variable de entorno del sistema operativo con el password del usuario de
  conexión al PostgreSQL , OjO, posible hueco en seguridad de la base de datos.
  [root@host]# export  PGPASSWORD=dbadmin  <­­ aqui debe ir el password del usuario que se conectará
                                               a la base de datos, generalmente es un superusuario
                                               para que tenga la suficiente cantidad de permisos a
                                               las estructuras internas del motor.
* Ejecutamos PG_TOP
  [root@host]# pg_top  ­U dbadmin ­d pruebas2 ­h 127.0.0.1
●7: Análisis de Hardware para soluciones avanzadas, Monitoreo sobre Gnu/Linux.
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
28/93
2. MONITOREO ­ PG_TOP
ernesto@depeche:~/aaa$ pg_top ­­help
pg_top: invalid option ­­ '­'
pg_top version 3.6.2
Usage: pg_top [­ITWbcinqu] [­x x] [­s x] [­o field] [­z username]
          [­p PORT] [­U USER] [­d DBNAME] [­h HOSTNAME] [number]
ernesto@depeche:~/aaa$ pg_top ­U dbadmin ­d prueba5
En una consola:
prueba5=# begin;
prueba5=# lock alumnos in exclusive mode;
En otra Consola:
prueba5=# insert into alumnos values(5,'chicho',12,'nada');
Pg­Top nos muestra:
ast pid: 29499;  load avg:  1.59,  1.59,  1.69;       up 1+03:48:24                                  
                    
3 processes: 3 sleeping
CPU states: 47.0% user,  2.6% nice,  8.8% system, 40.5% idle,  1.1% iowait
Memory: 1920M used, 81M free, 26M buffers, 659M cached
Swap: 375M used, 1532M free, 45M cached
  PID USERNAME PRI NICE  SIZE   RES STATE   TIME   WCPU    CPU COMMAND
29500 postgres  20    0  102M 4232K sleep   0:00  0.02%  0.20% postgres: dbadmin prueba5 [local] idle                    
29215 postgres  20    0  102M 5048K sleep   0:00  0.00%  0.00% postgres: dbadmin prueba5 [local] idle in transaction     
29396 postgres  20    0  102M 3628K sleep   0:00  0.00%  0.00% postgres: dbadmin prueba5 [local] INSERT waiting   
●7: Análisis de Hardware para soluciones avanzadas, Monitoreo sobre Gnu/Linux.
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
29/93
2. MONITOREO - PG_TOP
A     <­­ permite ver el plan de ejecución de un query, especifique el PID del proceso
C     <­­ activa/desactiva color
c     <­­ permite ver la linea de comandos completa
D     <­­ cambia página de listado
h ó ? <­­ help
E     <­­ ver versión actualizada del plan de ejecución
e     <­­ permite ver errores del sistema
I     <­­ ver/no ver procesos en espera o durmiendo
K     <­­ mata un proceso, indicar el pid
L     <­­ permite ver los locs del proceso, especificar el pid
M     <­­ ordena por uso de memoria
N     <­­ ordena por número de proceso
n ó # <­­indica cuantos procesos se pueden ver, máximo 65
O     <­­ cambia el orden de muestra dependiendo un parámetro especial ("cpu", "res", "size", "time",
          "seq_scan", "seq_tup_read",  "idx_scan",  "idx_tup_fetch",  "n_tup_ins","n_tup_upd", "n_tup_del")
P     <­­ ordena por utilización del proceso
Q     <­­ muestra el query, especificar el pid
q     <­­ Quit
R     <­­ Display user table statistics.
r     <­­ ??
s     <­­ cambia la cantidad de segundos de refresco de la pantalla
T     <­­ ordena por tiempo de ejecución
T     <­­ ??
U     <­­ muestra los procesos de un usuario, ingresar el usuario 
X     <­­ muestra las estadísticas de los índices
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
30/93
●7: Análisis de Hardware para soluciones avanzadas, Monitoreo sobre Gnu/Linux.
2. MONITOREO - VMSTAT
En un servidor podemos determinar si nuestra base de datos esta saturada, 
pero otro elemento a revisar es si todo nuestro sistema esta saturado, es 
posible que la base de datos este respondiendo mal no por un problema de 
sobrecarga en ella sino porque el sistema llego a su tope.
[root@host]# vmstat
procs ­­­­­­­­­­­memory­­­­­­­­­­ ­­­swap­­ ­­­­­io­­­­ ­­system­­ ­­­­­cpu­­­­­
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 783628  42440 609340    0    0    49    22  322  462  6  1 91  2  0
* “swap”, en la columna “so” indica la actividad de la paginación y de la
   paginación de memoria al disco, números elevados es un indicativo de que
   nos estamos quedando sisn RAM y que se está moviendo mucha información
   hacia el disco, con “si” vemos la cantidad de memoria subida del swap
   hacia la ram.
* “procs” es el estado de los procesos, en la columna “r” están los
   procesos que están esperando ser atendidos por el procesador y “b” 
   Presenta los que están en ejecución.
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
31/93
●7: Análisis de Hardware para soluciones avanzadas, Monitoreo sobre Gnu/Linux.
2. MONITOREO - VMSTAT
[root@host]# vmstat
procs ­­­­­­­­­­­memory­­­­­­­­­­ ­­­swap­­ ­­­­­io­­­­ ­­system­­ ­­­­­cpu­­­­­
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 783628  42440 609340    0    0    49    22  322  462  6  1 91  2  0
* “memory” indica el estado de la memoria, en la columna “free” tenemos la
   memoria libre, en “swpd” es la cantidad de swap utilizada, mientras que
   “buff” y “cache” es la cantidad de memoria reservada.
* “cpu” muestra el estado del procesador en tiempo de utilización, “us” %
   de tiempo de uso por usuario, “sy” % de tiempo de uso de sistema,”id” % 
   de tiempo inactivo, “wa” % de tiempo en espera, si “wa” es un número
   alto entonces estamos requiriendo de procesadores más potentes.
   “st” es el porcentaje de tiempo utilizado por máquinas virtuales.
* “io” muestra información del I/O hacia dispositivo, “si” bloques enviados
  Y “so” bloques recibidos.
* “system” son las interrupciónes por segundo.
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
32/93
●7: Análisis de Hardware para soluciones avanzadas, Monitoreo sobre Gnu/Linux.
2. MONITOREO - IOSTAT
IOSTAT nos permite monitorizar el uso de los discos duros de nuestro 
servidor.
[root@host]# iostat ­k
Linux 2.6.32­71.el6.x86_64 (host.dominio) 05/21/2011  _x86_64_ (2 CPU)
avg­cpu:  %user   %nice %system %iowait  %steal   %idle
           6.32    0.00    1.36    1.56    0.00   90.76
Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               5.58        71.51        40.52     496736     281500
* %iowait es el parámetro que principalmente deberíamos controlar, un
  número alto significa que tenemos una saturación en el uso de los
  dispositivos de almacenamiento y que debemos empezar a buscar
  alternativas de almacenamiento.
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
33/93
●7: Análisis de Hardware para soluciones avanzadas, Monitoreo sobre Gnu/Linux.
2. MONITOREO - IOTOP
Nos permite ver el consumo de uso de disco de los procesos que se ejecutan 
en el sistema.
[root@host]# yum install iotop
[root@host]# iotop
Total DISK READ: 0.00 B/s | Total DISK WRITE: 0.00 B/s
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND                 
                     
    1 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % init
    2 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kthreadd]
    3 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/0]
    4 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ksoftirqd/0]
    5 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [watchdog/0]
    6 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/1]
    7 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ksoftirqd/1]
    8 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [watchdog/1]
    9 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [events/0]
   10 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [events/1]
   11 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [cpuset]
Presionando “o” vemos los procesos que en ese instante están haciendo uso 
de disco y no todos los procesos.
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
34/93
●7: Análisis de Hardware para soluciones avanzadas, Monitoreo sobre Gnu/Linux.
●8: Configuración Avanzada y Problemas Comunes
1. Configuración Avanzada - Afinando Postgresql
PostgreSQL y Gnu/Linux están muy integrados, un Sistema Operativo muy bien afinado
dará como resultado un excelente rendimiento de la base de datos, sin embargo es
posible configurar ciertos atributos del motor de la base de datos para optimizarla
para diferentes escenarios.
Toda la configuración de PostgreSQL se realiza en el archivo “postgresql.conf” y
cualquier cambio para que se active requerirá que se reinicie el servicio, en algunos
casos bastará con hacer un reload.
[root@host]service postgresql restart <-- baja el servicio totalmente y lo vuelve a
iniciar.
[root@host]service postgresql reload <-- el servicio no se baja, conexiones pueden
seguir siendo aceptadas pero aparecerán
con un rendimiento lento durante el periodo
de tiempo que tome recargar el servicio,
este tiempo dependerá de la concurrencia de
usuarios cuando se haya ejecutado el Reload.
Otra forma de recargar las configuraciones modificadas en postgresql.conf es ejecutar
este comando desde dentro de la base de datos.
template1=# select pg_reload_conf();
pg_reload_conf
----------------
t
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
35/93
●8: Configuración Avanzada y Problemas Comunes
1. Configuración Avanzada - Afinando Postgresql
Para ver las configuraciones del sistema sin aperturar el archivo postgresql.conf
tenemos una vista que puede ser invocada y que se llama pg_settings.
postgres=# d pg_settings
Vista «pg_catalog.pg_settings»
Columna | Tipo | Modificadores
------------+---------+---------------
name | text |
setting | text |
unit | text |
category | text |
short_desc | text |
extra_desc | text |
context | text |
vartype | text |
source | text |
min_val | text |
max_val | text |
enumvals | text[] |
boot_val | text |
reset_val | text |
sourcefile | text |
sourceline | integer |
Definición de vista:
SELECT a.name, a.setting, a.unit, a.category, a.short_desc, a.extra_desc, a.context, a.vartype,
a.source, a.min_val, a.max_val, a.enumvals, a.boot_val, a.reset_val, a.sourcefile, a.sourceline
FROM pg_show_all_settings() a(name, setting, unit, category, short_desc, extra_desc, context,
vartype, source, min_val, max_val, enumvals, boot_val, reset_val, sourcefile, sourceline);
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
36/93
●8: Configuración Avanzada y Problemas Comunes
1. Configuración Avanzada - Afinando Postgresql
template1=# show block_size; <-- usamos SHOW para ver el valor de un solo parámetro
block_size
------------
8192
(1 fila)
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
37/93
●8: Configuración Avanzada y Problemas Comunes
1. Configuración Avanzada - Afinando Postgresql
a)SHARED_BUFFERS
El SHARED BUFFER es en si el área de intercambio de lectura y escritura de datos desde
y hacia la base de datos.
El correr el INITDB el PostgreSQL detecta la cantidad de memoria del servidor y
calcula esta valor, el problema es que asume que no deseas dar prioridad a la base de
datos y coloca un valor muy bajo, 32mb o 24mb.
Los valores razonables deberían estar entre 25% a 40% del monto total de RAM, algunos
expertos recomiendan que el 10% es más que necesario, pero en realidad dependerá del
uso que le demos a la base de datos y que tan pesadas sean nuestras consultas,
Aumentar el valor de SHARED_BUFFER llevará generalmente a un aumento de su equivalente
en el sistema operativo
Por ejemplo en este caso deseamos subir nuestro SHARED_BUFFER a 400mb
shared_buffers = 400MB
Acto seguido debemos configurar nuestro sistema operativo antes de que este nuevo
valor pueda ser usado, sino tendremos un error del sistema, lo mejor es bajar la base
de datos cuando se modifique este parámetro.
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
38/93
●8: Configuración Avanzada y Problemas Comunes
1. Configuración Avanzada - Afinando Postgresql
a)SHARED_BUFFERS - SHMMAX
Gnu/Linux por defecto levanta áreas de intercambio de datos en buffer de ram para cada
aplicación que se esté ejecutando, por defecto los valores suelen ser pequeños por lo
cual aumentar el SHARED_BUFFERS en el PostgreSQL hace que aumentemos el valor en el
Gnu/Linux, tomar en cuenta que poner valores muy altos hará que si levantamos muchos
servicios la RAM podría quedarnos corta, por lo cual no es buena idea levantar muchos
servicios en un solo servidor.
Modificar /etc/sysctl.conf
Calculamos el nuevo valor de shmmax:
400mb x 1024kb = 409600 <-- cantidad de kb a utilizar por el buffer
409600 / 8 = 51200 <-- cantidad de páginas a utilizar por el buffer
51200 x 8192b = 419430400 <-- cantidad mínima de ram en bytes que se debe configurar
debe considerarse que hay otras aplicaciones que hacen
uso de esta cantidad de ram asignada.
Abrimos el archivo “/etc/sysctl.conf” y añadimos:
kernel.shmmax = 421527552 <-- añadimos un par de megas más para asegurarnos que no
Nos faltará ram.
Es necesario luego reiniciar el sistema operativo.
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
39/93
●8: Configuración Avanzada y Problemas Comunes
1. Configuración Avanzada - Afinando Postgresql
b)KERNEL SEMAPHORES
Los semáforos son objetos usados para procesar comunicaciones.
[root@host]# ipcs -l <-- para ver la configuración de los semáforos
actual del sistema.
---- Límites memoria compartida ----
max number of segments = 4096
max seg size (kbytes) = 32768
max total shared memory (kbytes) = 8388608
tamaño mín. segmento (bytes) = 1
------ Límites semáforo --------
número máximo de matrices = 128
máx. semáforos por matriz = 250
máx. semáforos sistema = 32000
máx. oper. por llamada semop = 32
valor máx. semáforo = 32767
------ Mensajes: límites -------
máx. colas sistema = 7660
tamaño máx. mensaje (bytes) = 8192
tamaño máx. predeterminado cola (bytes) = 16384
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
40/93
●8: Configuración Avanzada y Problemas Comunes
1. Configuración Avanzada - Afinando Postgresql
b)KERNEL SEMAPHORES
PostgreSQL usa un total de 16+1 semáforos por cada conexión activa, 16 son
de uso real y uno de control, mientras más conexiones requeriremos en
nuestra base de datos más semáforos deberíamos tener disponibles para esto.
Para modificar los semáforos editamos el archivo /etc/sysctl.conf
número máximo de matrices = 128 <-- SEMMNI = (conexiones + procesos autovacumm) / 16
redondeado hacia arriba
máx. semáforos por matriz = 250 <-- SEMMSL = como mínimo debería ser 17
máx. semáforos sistema = 32000 <-- SEMMNS = SEMMNI * SEMMSL
máx. oper. por llamada semop = 32
valor máx. Semáforo = 32767 <-- SEMVMX no es necesario cambiarlo generalmente
Para activar los nuevos valores requerirá reiniciar el sistema operativo.
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
41/93
●8: Configuración Avanzada y Problemas Comunes
1. Configuración Avanzada - Afinando Postgresql
c)CHECKPOINTS
Un CHECKPOINT es un área de almacenamiento de datos donde se almacena la
información que está lista para bajarse al repositorio de datos final, esto
se hace para asegurar que ante caídas del sistema el repositorio principal
no se corrompa.
checkpoint_segments = 3 <-- cada segmento es de 16MB, 3 segmentos significa que
tenemos 48MB de historia de procesos almacenados
para reconstruir la información en caso de
Desastres, más segmentos hará un sistema mas seguro
Pero con un overhead mayor.
checkpoint_timeout = 5min <-- tiempo máximo que el checkpoint podrá estar sin ser
Pasado al repositorio principal.
checkpoint_warning = 30s <-- lanza un mensaje al sistema indicando que se están
Sucediendo checkpoints demasiado rápido en
frecuencia de creación, es decir que se genera un
checkpoint en menos de 30s nos alertará
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
42/93
1. Configuración Avanzada - Afinando Postgresql
d)WORK_MEM
work_mem es el espacio de memoria que se usará para los ordenamientos de los datos
cuando se ejecutan consultas, no existe una formula exacta de cálculo dependerá de que
tanta data se mueva en las consultas que ejecutamos y cual es la concurrencia de
ejecución de las consultas, por defecto el valor es muy bajo, solo 1MB.
La regla dice, si las consultas se ejecutan con poca concurrencia entonces asignar
entre 2% a 4% de la ram disponible será ideal, pero si la concurrencia es alta
entonces debe asignarse menos memoria debido a que cada consulta consume la misma
cantidad de ram.
work_men = 163MB <-- 4% de 4gb (redondeado)
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
43/93
●8: Configuración Avanzada y Problemas Comunes
1. Configuración Avanzada - Afinando Postgresql
e)WAL
WAL (Write-Ahead Log) son páginas de datos que se generan para trabajar los datos en
un área reservada antes de pasar al repositorio principal de datos, cuando un WAL
culmina su labor se le cambia el identificador y se convierte en un CHECKPOINT y de
ahí recién pasa en ciertos intervalos de tiempo al repositorio principal.
WAL_BUFFERS = 8 <-- es el valor por defecto, significa que tiene 8 * Longitud de página
disponibles (el mínimo de una página de 8k hasta 32k), debería ser
tan grande como lo necesiten nuestras transacciones más comunes.
wal_buffers = 64KB <-- podemos especificar el valor indicando una cantidad de KB pero tomar
En cuenta el peso de las páginas en KB.
wal_writer_delay = 200ms <-- lapso de tiempo en que el WAL realizará escrituras hacía disco
después de informado por el “cliente” que la transacción ha
concluido, un número muy bajo causará un incremento de
overhead en los discos.
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
44/93
●8: Configuración Avanzada y Problemas Comunes
1. Configuración Avanzada - Afinando Postgresql
f)temp_buffers
Es la cantidad de memoria que tendrá asignada cada conexión al dbms para manejo de
tablas temporales, esta no se libera hasta que la sesión muera, cada sesión podría
manejar un tamaño diferente y mayor al de default (8mb) pero solo hasta antes de
generar la primera tabla temporal.
g)max_locks_per_transaction
Permite indicar cuantos objetos se pueden bloquear en una transacción, un registro no
se considera un objeto, el default es 64 solo valdría la pena subirlo si es que
tenemos transacciones que bloquean muchos más objetos únicos (tablas) que este valor,
obviamente el consumo de memoria crecerá.
h)max_connections
Determina cuantas conexiones soportará el dbms, subirlo significará un consumo de
recursos adicional en el OS (sistema operativo), y en realidad no servirá de mucho si
es que el OS no soporta esta carga de trabajo.
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
45/93
●8: Configuración Avanzada y Problemas Comunes
1. Configuración Avanzada - Afinando Postgresql
i)random_page_cost
Determina en que momento se van a utilizar índices ó búsquedas
secuenciales, el valor por defecto es 4, se recomienda aumentarlo para
discos lentos y bajarlo para discos rápidos.
Considere que los índices son efectivos si la variedad de datos es alta, si
es baja entonces es probable que aunque se mueva la configuración se
ejecuten búsquedas secuenciales.
j)effective_cache_size
Setea el tamaño de cache en RAM que se usará en una consulta, el valor por defecto es
128Mb, un valor alto facilitará el uso de índices, un valor bajo hará que se prefiera
el uso de búsquedas secuenciales, se recomienda como máximo 50% del total de la RAM.
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
46/93
●8: Configuración Avanzada y Problemas Comunes
1. Configuración Avanzada - Afinando Postgresql
h)statement_timeout
Configura cuanto tiempo puede demorar un query en ejecutarse, evita que se lancen
querys extremadamente pesados que demoren mucho tiempo en ejecutarse, por defecto es 0
(desactivado) pero se expresa en milisegundos, OjO configurarlo afectará todos los
querys.
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
47/93
●8: Configuración Avanzada y Problemas Comunes
1. Configuración Avanzada - Automatizando tareas con CRON
PostgreSQL utiliza el sistema de automatización de tareas de Gnu/Linux para
automatizar tareas rutinarias como por ejemplo las de mantenimiento.
CRON es el demonio más utilizado, cualquier usuario puede eventualmente
crear una tarea automatizada, en este caso utilizaremos el usuario
“postgres” del sistema operativo para nuestras tareas que afectan
directamente a las bases de datos.
En CentOS el editor por defecto es VI pero como es algo complicado de usar
utilizaremos NANO, para ello exportamos la variable “EDITOR” de Gnu/Linux
[root@host] su – postgres
[postgres@host] export EDITOR=nano
[postgres@host] crontab -e <-- entramos al editor del cron
0-59 * * * * echo "hola" >> /var/lib/pgsql/file.txt <-- grabar la palabra “hola” y la hora
0-59 * * * * date >> /var/lib/pgsql/file.txt cada minuto en el archivo file.txt
[root@host] service cron restart <-- es necesario reiniciar el demonio del “cron” cada
Vez que se cambie una configuración
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
48/93
●8: Configuración Avanzada y Problemas Comunes
1. Configuración Avanzada - Automatizando tareas con CRON
Los rangos de tiempo se presentan así:
* * * * * COMANDO
M H D MO DS
M = minuto
H = hora en formato de 0-23
D = día en formato de 1-31 (deben especificarse días válidos)
MO = mes en formato 1-12
DS = día de la semana en formato 0-7 donde 0 ó 7 es domingo
COMANDO = comando del sistema operativo que debe ejecutarse
1 * * * * COMANDO <-- ejecutará el comando al minuto 1 de cada hora
0-59 * * * * COMANDO <-- ejecutará el comando cada minuto
0-59/2 * * * * COMANDO <-- ejecutará el comando cada 2 minutos
5 2 * * * COMANDO <-- ejecutará el comando al minuto 5 de la hora 2 de cada día
5 2 20 * * COMANDO <-- ejecutará el comando al minuto 5 de la hora 2 de cada día
20 del mes
1 * * 1 * COMANDO <-- ejecutará el comando al minuto 1 de todos los Enero
1 * * 1-12/4 * COMANDO <-- ejecutará el comando al minuto 1 de cada 3er mes
1 * * * 1 COMANDO <-- ejecutará el comando al minuto 1 de todos los Lunes
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
49/93
●8: Configuración Avanzada y Problemas Comunes
1. Configuración Avanzada - Automatizando tareas con CRON
El COMANDO puede ser un archivo aparte que pueda ser interpretado por el PSQL, debe 
verificar que se cuente con el acceso pertinente para ejecutar los querys que este 
archivo aparte va a ejecutar, por ello es lo mejor ejecutar el CRON como usuario 
POSTGRES.
[postgres@host] crontab ­e
  * * * * * /var/lib/pgsql/cron.sh
Creamos un archivo cron.sh (o cualquier nombre) y le asignamos permisos de ejecución.
[postgres@host]touch cron.sh
[postgres@host]chmod +x cron.sh
[postgres@host]mcedit cron.sh
  #!/bin/sh
  # Programa en bash script de ejemplo de un CRON para PostgreSQL
  echo "Se inicia el log" >> file.txt
  date >> file.txt
  echo "Ejecuta un query con salida al log"
  export PGPASSWORD=dbadmin
  psql prueba ­c "select * from tablita limit 5"  ­U dbadmin  >> file.txt
  echo "Inicia un proceso de backup"
  FECHA=$(date)
  pg_dump prueba > $FECHA.dump ­U dbadmin
  echo "Backup finalizado, proceso concluido $FECHA" >> file.txt
 
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
50/93
●8: Configuración Avanzada y Problemas Comunes
2. Problemas comunes – Bloqueos
El comando LOCK nos permite bloquear una tabla.
prueba=# begin;
BEGIN
prueba=# lock tbl_transaccion in exclusive mode;
LOCK TABLE
En otra consola intentar esto:
prueba=# update tbl_transaccion set id = id * 2; <-- no culmina se queda en espera
En la consola anterior hacer “commit” y el update culminará.
Sin embargo si hacemos un “select” a esa tabla en otra consola la información procesará sin ningún
problema, los niveles de bloqueo permiten ejecutar cierto tipo de operaciones.
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
51/93
●8: Configuración Avanzada y Problemas Comunes
2. Problemas comunes – Bloqueos
Tipos de LOCK:
●ACCESS SHARE
●ROW SHARE
●ROW EXCLUSIVE
●SHARE UPDATE EXCLUSIVE
●SHARE
●SHARE ROW EXCLUSIVE
●EXCLUSIVE
●ACCESS EXCLUSIVE
http://www.postgresql.org/docs/9.0/interactive/explicit-locking.html
Hay que se cuidadoso con este comando, todas las operaciones a una DB ejecutan algún
tipo de lock pre-definido y entre ellos pueden llegar a colisionar
Para ver los locks:
prueba=# select * from pg_locks;
locktype | database | relation | page | tuple | virtualxid | transactionid | classid | objid | objsubid | virtualtransaction | pid | mode | granted
------------+----------+----------+------+-------+------------+---------------+---------+-------+----------+--------------------+-------+-----------------+---------
relation | 22073 | 10969 | | | | | | | | 2/6239 | 17247 | AccessShareLock | t
relation | 22073 | 22183 | | | | | | | | 1/439 | 2498 | ExclusiveLock | t
virtualxid | | | | | 1/439 | | | | | 1/439 | 2498 | ExclusiveLock | t
virtualxid | | | | | 2/6239 | | | | | 2/6239 | 17247 | ExclusiveLock | t
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
52/93
●8: Configuración Avanzada y Problemas Comunes
2. Problemas comunes – Bloqueos
Para ver los querys que están ejecutando los locks:
SELECT
waiting.locktype AS waiting_locktype,
waiting.relation::regclass AS waiting_table,
waiting_stm.current_query AS waiting_query,
waiting.mode AS waiting_mode,
waiting.pid AS waiting_pid,
other.locktype AS other_locktype,
other.relation::regclass AS other_table,
other_stm.current_query AS other_query,
other.mode AS other_mode,
other.pid AS other_pid,
other.granted AS other_granted
FROM
pg_catalog.pg_locks AS waiting
JOIN pg_catalog.pg_stat_activity AS waiting_stm ON ( waiting_stm.procpid = waiting.pid )
JOIN pg_catalog.pg_locks AS other ON ((waiting."database" = other."database" AND waiting.relation = other.relation)
OR waiting.transactionid = other.transactionid )
JOIN pg_catalog.pg_stat_activity AS other_stm ON (other_stm.procpid = other.pid)
WHERE NOT waiting.granted AND waiting.pid <> other.pid
waiting_locktype | waiting_table | waiting_query | waiting_mode | waiting_pid | other_locktype | other_table |
other_query | other_mode | other_pid | other_granted
------------------+-----------------+-----------------------------------------+------------------+-------------+----------------+-----------------
+-----------------------+------------------+-----------+---------------
relation | tbl_transaccion | update tbl_transaccion set id = id * 4; | RowExclusiveLock | 17741 | relation | tbl_transaccion |
<IDLE> in transaction | RowExclusiveLock | 2498 | t
relation | tbl_transaccion | update tbl_transaccion set id = id * 4; | RowExclusiveLock | 17741 | relation | tbl_transaccion |
<IDLE> in transaction | ExclusiveLock | 2498 | t
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
53/93
●8: Configuración Avanzada y Problemas Comunes
2. Problemas comunes – Bloqueos
Dado que PostgreSQL es una base de datos que soporta concurrencia entonces es posible
que un dato al momento de ser consultado este siendo borrado ó modificado por otro
usuario en otra transacción, para determinar en una consulta si los datos que estamos
usando están siendo afectados por otro usuario tenemos los valores de xmin y xmax,
cuando xmax está en blanco quiere decir que el dato no está siendo afectado por otra
transacción, cuando xmin y xmax tienen el mismo valor entonces el dato o fue
modificado o fue borrado por otra transacción.
prueba=# select *, xmin,xmax from tablita;
id | xmin | xmax
----+------+------
1 | 661 | 0
3 | 661 | 0
5 | 661 | 0
7 | 661 | 0
prueba=# select *, xmin,xmax from tablita;
id | xmin | xmax
----+------+------
1 | 661 | 0
3 | 661 | 661 <--- el dato fue borrado o modificado
5 | 661 | 0
7 | 661 | 0
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
54/93
●8: Configuración Avanzada y Problemas Comunes
2. Problemas comunes – Bloqueos
Una manera sencilla de determinar cuantas conexiones tenemos vivas, y que están haciendo es consultar
la tabla pg_stat_activity
prueba=# select datname, usename, current_query, query_start from pg_stat_activity;
datname | usename | current_query |
query_start
---------+---------+----------------------------------------------------------------------------
+-------------------------------
prueba | dbadmin | select datname, usename, current_query, query_start from pg_stat_activity; |
2011-10-01 12:25:09.482213-05
Para ver el tiempo de ejecución de un query solo necesitas restar el current_timestamp
– el menor tiempo entre query_start y xact_start.
prueba=# select datname, usename, substr(current_query,1,15),
query_start, xact_start, current_timestamp - least(query_start, xact_start) as runtime
from pg_stat_activity;
datname | usename | substr | query_start | xact_start
| runtime
---------+---------+-----------------+-------------------------------
+-------------------------------+----------
prueba | dbadmin | select datname, | 2011-10-01 12:29:14.000863-05 | 2011-10-01 12:29:14.000863-05
| 00:00:00
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
55/93
●8: Configuración Avanzada y Problemas Comunes
2. Problemas comunes – Controlando el espacio ocupado por las tablas
d+ Nos muestra en psql el consumo de espacio por cada tabla dentro de una
DB, recuerde que es necesario ejecutar VACUMM FULL con cierta periodicidad
para no ocupar espacio útil del servidor con data inútil.
prueba=# d+
Listado de relaciones
Esquema | Nombre | Tipo | Dueño | Tamaño | Descripción
---------+---------+-------+---------+------------+-------------
public | tablita | tabla | dbadmin | 9280 kB |
prueba=# delete from tablita where id = 3;
DELETE 32768
prueba=# d+
Listado de relaciones
Esquema | Nombre | Tipo | Dueño | Tamaño | Descripción
---------+---------+-------+---------+------------+-------------
public | tablita | tabla | dbadmin | 9280 kB |
prueba=# VACUUM FULL tablita;
VACUUM
prueba=# d+
Listado de relaciones
Esquema | Nombre | Tipo | Dueño | Tamaño | Descripción
---------+---------+-------+---------+------------+-------------
public | tablita | tabla | dbadmin | 8120 kB |
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
56/93
●8: Configuración Avanzada y Problemas Comunes
2. Problemas comunes – Controlando el espacio ocupado por las bases de datos
Las bases de datos presentan el mismo comportamiento de las tablas, una manera de conocer
el tamaño de estas desde psql es:
prueba=# select datname, pg_database_size(datname) from pg_database;
  datname  | pg_database_size 
­­­­­­­­­­­+­­­­­­­­­­­­­­­­­­
 template1 |          5642000
 template0 |          5537796
 postgres  |          5642000
 prueba    |         72218384
 prueba2   |          5537796
(5 filas)
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
57/93
●8: Configuración Avanzada y Problemas Comunes
2. Problemas comunes – Detectando tablas que requieren VACUUM
Una manera de detectar si una tabla requiere un VACUUM con urgencia es
comparar la desviación entre las filas que almacena su estadística y las
filas físicas que realmente existen, esto se puede controlar así.
prueba=# SELECT (CASE WHEN reltuples > 0 THEN
prueba(# pg_relation_size('tablita')/(8192*relpages/reltuples)
prueba(# ELSE 0
prueba(# END)::bigint AS estimated_row_count
prueba-# FROM pg_class
prueba-# WHERE oid = 'tablita'::regclass;
estimated_row_count
---------------------
1835040
prueba=# select count(*) from tablita;
count
---------
1835040
prueba=# delete from tablita where id = 5;
DELETE 262144
prueba=# select count(*) from tablita;
count
---------
1572896
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
58/93
●8: Configuración Avanzada y Problemas Comunes
2. Problemas comunes – Detectando tablas que requieren VACUUM
Una manera de detectar si una tabla requiere un VACUUM con urgencia es
comparar la desviación entre las filas que almacena su estadística y las
filas físicas que realmente existen, esto se puede controlar así.
prueba=# select count(*) from tablita;
count
---------
1572896
prueba=# SELECT (CASE WHEN reltuples > 0 THEN
pg_relation_size('tablita')/(8192*relpages/reltuples)
ELSE 0 END)::bigint AS estimated_row_count
FROM pg_class WHERE oid = 'tablita'::regclass;
estimated_row_count
---------------------
1835040
prueba=# VACUUM full tablita;
VACUUM
prueba=# SELECT (CASE WHEN reltuples > 0 THEN
pg_relation_size('tablita')/(8192*relpages/reltuples)
ELSE 0 END)::bigint AS estimated_row_count
FROM pg_class WHERE oid = 'tablita'::regclass;
estimated_row_count
---------------------
1572896
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
59/93
●8: Configuración Avanzada y Problemas Comunes
2. Problemas comunes – Análisis de Querys
TIMING, permite visualizar el tiempo de ejecución de un query.
prueba=# timing
El despliegue de duración está activado.
prueba=# select sum(id) from tablita;
 sum 
­­­­­
  80
(1 fila)
Duración: 35,951 ms
prueba=# explain analyze select sum(id) from tablita;
                                                QUERY PLAN                                           
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
 Aggregate  (cost=40.00..40.01 rows=1 width=4) (actual time=0.040..0.041 rows=1 loops=1)
   ­>  Seq Scan on tablita  (cost=0.00..34.00 rows=2400 width=4) (actual time=0.007..0.018 rows=8 
loops=1)
 Total runtime: 0.103 ms
(3 filas)
Duración: 26,842 ms
Como se puede ver el tiempo de ejecución real de un query y el tiempo de realmente la 
base de datos podría ejecutar la resolución del query.
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
60/93
●8: Configuración Avanzada y Problemas Comunes
2. Problemas comunes – Análisis de Querys
Explain permite visualizar el plan de ejecución de un query, el plan de 
ejecución son los pasos que sigue la dmbs para procesar la consulta, tabla 
por tabla con la que trabaja, las uniones, tipos de índices que utiliza, 
tuplas movidas, etc.
prueba4=# explain select * from regla;
                       QUERY PLAN                        
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
 Seq Scan on regla  (cost=0.00..18.00 rows=800 width=72)
(1 row)
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
61/93
●8: Configuración Avanzada y Problemas Comunes
2. Problemas comunes – Análisis de Querys
Para ver los comandos usados y los tiempos de respuesta
prueba4=# explain analyze select * from regla; 
                                            QUERY PLAN                                             
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
 Seq Scan on regla  (cost=0.00..18.00 rows=800 width=72) (actual time=0.012..0.016 rows=2 loops=1)
 Total runtime: 0.070 ms
(2 rows)
Informa los campos requeridos en la consulta
prueba4=# explain verbose select * from regla;        
                           QUERY PLAN                           
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
 Seq Scan on public.regla  (cost=0.00..18.00 rows=800 width=72)
   Output: id, nombre
(2 rows)
prueba4=# explain analyze verbose select * from regla;
                                                QUERY PLAN                                                
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
 Seq Scan on public.regla  (cost=0.00..18.00 rows=800 width=72) (actual time=0.010..0.013 rows=2 loops=1)
   Output: id, nombre
 Total runtime: 0.050 ms
(3 rows)
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
62/93
●8: Configuración Avanzada y Problemas Comunes
2. Problemas comunes – Análisis de Querys
Los Explain siempre se deben leer de “adentro hacia afuera”.
prueba4=# explain select * from factura_cab a  join factura_det b on a.id =b.fac_id;
                                  QUERY PLAN                                  
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
 Merge Join  (cost=260.93..525.73 rows=17120 width=29)
   Merge Cond: (b.fac_id = a.id)
   ­>  Sort  (cost=111.15..115.15 rows=1600 width=21)
         Sort Key: b.fac_id
         ­>  Seq Scan on factura_det b  (cost=0.00..26.00 rows=1600 width=21)
   ­>  Sort  (cost=149.78..155.13 rows=2140 width=8)
         Sort Key: a.id
         ­>  Seq Scan on factura_cab a  (cost=0.00..31.40 rows=2140 width=8)
(8 rows)
El primer explain fue hecho sin hacer un VACUMM a las tablas, en el segundo se 
procedió a ello, nótese las diferencia en las cifras, esto se debe a las estadísticas.
prueba4=# explain select * from factura_cab a  join factura_det b on a.id =b.fac_id;
                               QUERY PLAN                                
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
 Hash Join  (cost=1.07..2.16 rows=4 width=25)
   Hash Cond: (b.fac_id = a.id)
   ­>  Seq Scan on factura_det b  (cost=0.00..1.04 rows=4 width=17)
   ­>  Hash  (cost=1.03..1.03 rows=3 width=8)
         ­>  Seq Scan on factura_cab a  (cost=0.00..1.03 rows=3 width=8)
(5 rows)
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
63/93
●8: Configuración Avanzada y Problemas Comunes
2. Problemas comunes – Análisis de Querys
Para determinar si un índice debe ser utilizado, PostgreSQL debe tener estadísticas 
sobre la tabla. Estas estadísticas se recolectan mediante VACUUM ANALYZE, o 
simplemente ANALYZE. Usando las estadísticas, el optimizador sabe cuántas son las 
filas en la tabla, y puede determinar mejor si los índices deben utilizarse. Las 
estadísticas son también valiosas en la determinación de un orden óptimo y métodos de 
unión. La recolección de Estadísticas debe ser realiza periódicamente como el cambio 
de contenido de la tabla.
El costo:
(cost=149.78..155.13 rows=2140 width=8)
149.78    <­­ costo inicial de traer la primera tupla
155.13    <­­ costo total estimado
Rows=2140 <­­ filas escaneadas
Width=8   <­­ filas de salida
El costo total estimado se calcula sobre la siguiente formula 
(disk pages read * seq_page_cost) + (rows scanned * cpu_tuple_cost)
seq_page_cost  <­­ costo de acceso a las páginas de la data            (1.00 default)
cpu_tuple_cost <­­ costo del proceso de cada fila durante la consultas (0.01 default)
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
64/93
●8: Configuración Avanzada y Problemas Comunes
2. Problemas comunes – Análisis de Querys
El tiempo:
(actual time=0.007..0.018 rows=8 loops=1)
0.007     <­­ tiempo de espera inicial que toma para empezar a procesar el query
0.018     <­­ tiempo total en segundos que le toma procesar la consulta
Rows=8    <­­ filas esperadas de retorno, una diferencia entre este y los ROWS del
              COST indican un posible problema en el optimizador interno de 
              PostgreSQL para resolver la consulta.
loops=1   <­­ En algunos casos, especialmente en JOINs es necesario ejecutar la 
              consulta varias veces, los tiempos y ROWs deben ser multiplicados por
              el número de LOOPs para tener los totales reales.
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
65/93
●8: Configuración Avanzada y Problemas Comunes
2. Problemas comunes – Análisis de Querys
Seq Scan on factura_cab a  (cost=0.00..1.03 rows=3 width=8)
Seq Scan          <­­ indica que esta llevando a cabo una busqueda secuencial en la
                      tabla, bien porque no existe un índice o bien porque no la
                      necesita.
on factura_cab a  <­­ nos indica que esta buscando sobre la tabla “factura” con 
                      alias “a”.
Hash  (cost=1.03..1.03 rows=3 width=8)
Hash              <­­ significa que esta creando un mapa de datos e índices con el 
                      Fin de facilitar búsquedas
Sort  (cost=149.78..155.13 rows=2140 width=8)
         Sort Key: a.id
SORT KEY          <­­ nos índica por que campo esta realizando un ordenamiento y 
                      Posteriormente el costo del ordenamiento
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
66/93
●8: Configuración Avanzada y Problemas Comunes
2. Problemas comunes – Análisis de Querys
 Merge Join  (cost=260.93..525.73 rows=17120 width=29)
   Merge Cond: (b.fac_id = a.id)
 Hash Join  (cost=1.07..2.16 rows=4 width=25)
   Hash Cond: (b.fac_id = a.id)
Tanto en el caso Merge Join como en el caso Hash Join el dbms esta realizando la unión 
de las dos tablas, nos indica el costo para cada caso.
Lo que tenemos que buscar siempre es que los COSTOS de nuestras consultas 
sean lo más bajos posibles, no siempre una búsqueda secuencial puede tener 
un costo mayor que una búsqueda indexada, eso dependerá de la data y 
estructura de las tablas.
Es importante escribir querys limpios, dar el menor trabajo posible al 
analizador de querys de PostgreSQL para que la resolución del plan de 
ejecución sea la menor posible.
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
67/93
●8: Configuración Avanzada y Problemas Comunes
2. Problemas comunes – Análisis de Querys
Otros operadores que podemos encontrar son:
●Nested Loop      <­­ Se combinan dos tablas utilizando bucles anidados. Por cada fila
                     de la tabla padre, se recorren todas las filas de la tabla hija.
●Index scan       <­­ búsqueda sobre un índice
●Unique           <­­ elimina registros de valores duplicados
●Limit            <­­ indica que se esta pidiendo una cantidad limitada de registros,
                     aparece cuando se ha usado el operador en la consulta
●Aggregate        <­­ concatenación de columnas
●Subquery Scan    <­­ indica una subconsulta dentro del contexto de un UNION
●Subplan          <­­ indica una subconsulta dentro de un subquery
●Append           <­­ indica que se están uniendo 2 tablas, aparece cuando se uso el 
                     operador UNION en la consulta
●Tid Scan (raro)
●Group            <­­ indica que se hace un GROUP BY
●Result           <­­ indica una operación que no mueve datos
●Materialize      <­­ se da en caso de que existan subconsultas que se repiten y
                     el dbms decide almacenar los resultados obtenidos para su
                     rehuso.
http://www.iphelp.ru/faq/15/ch04lev1sec3.html
http://explain.depesz.com/ <­­ Herramienta que permite subir un Explain y retorna la
                               información más estructurada y digerible.
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
68/93
●8: Configuración Avanzada y Problemas Comunes
Instalando PostgreSQL 9.0
Precaución: PostgreSQL 9.0 no es parte oficial aún de los repositorios 
oficiales de CentOS 6.
1. Descargar los RPM de la siguiente ruta:
   http://www.pgrpms.org/9.0/redhat/rhel­6­x86_64/pgdg­centos­9.0­3.noarch.rpm 
2. Instalar el rpm descargado, como usuario “root”.
   root@host$ rpm ­ivh pgdg­centos­9.0­3.noarch.rpm
3. Instalar PostgreSQL 9.0
   root@host$ yum install postgresql90­server
4. Iniciar la base de datos
   root@host$ /etc/init.d/postgresql­9.0 initdb
   root@host$ /etc/init.d/postgresql­9.0 start
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
69/93
●9: Replicación Asíncrona con PostgreSQL 9.0
El sistema de replicación asíncrona de PostgreSQL 9.0
El concepto de replicación es mantener una copia actualizada de la data en 
un servidor alterno al principal, ¿porqué?:
* Para tener un sistema tolerable a fallas.
* Para balancear la carga de trabajo en diversos servidores.
* Para aplicaciones de alto consumo en consultas (B.I.)
* Para tener un ambiente de pruebas o desarrollo lo más parecido al 
  ambiente de producción.
* Muchas otras que se puedan imaginar .....
Existe al menos unas 10 soluciones viables para replicar bases de datos 
PostgreSQL, todas ellas con sus pros y sus contras.
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
70/93
●9: Replicación Asíncrona con PostgreSQL 9.0
Características de la replicación interna de PgSQL 9.0
* Es Streaming Replication Hot Standby
* No requiere hardware especial
* No requiere de servidores/servicios especiales
* No sobrecarga el servidor principal
* No requiere de un sistema de resolución de conflictos (al menos
  no adicionales al que ya implementa la base de datos)
* Si se cayera la replicación al menos tendré acceso de lectura 
  en el servidor alterno.
* Point­In­Time Recovery, es decir permite recuperar la data al
  Tiempo pasado más cercano donde esta se encuentre bien.
* Usa WAL como método de cache, esta técnica permite asegurar que
  solo las operaciones bien realizadas actualicen la data
  (atomicidad y durabilidad).
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
71/93
●9: Replicación Asíncrona con PostgreSQL 9.0
Desventajas:
* Múltiples servidores maestros/principales
* Asegurar que ante una falla el servidor principal nunca va a   
  perder la data (a nivel sistema operativo)
* Controlar la replicación a nivel de tablas
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
72/93
●9: Replicación Asíncrona con PostgreSQL 9.0
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
73/93
●9: Replicación Asíncrona con PostgreSQL 9.0
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
74/93
●9: Replicación Asíncrona con PostgreSQL 9.0
El WAL es...
Básicamente es un buffer donde se llevan a cabo las
operaciones a la data y una vez terminada se pasan al
almacenamiento de datos principal, si algo pasara entonces el
área de datos permanecerá intacto solo se perderá lo que esta
en el WAL.
WAL genera segmentos de data de 16mb (configurable) en
archivos físicos que tiene páginas de datos de 8kb
(configurable).
WAL nunca borra data, siempre está añadiendo data nueva, en
general PostgreSQL nunca modifica o borra data, desactiva
páginas y crea nuevas con la nueva información, incluso puede
crear nuevas páginas solo para consulta.
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
75/93
●9: Replicación Asíncrona con PostgreSQL 9.0
El WAL es...
Una ventaja del WAL es que puede residir en cualquier
directorio y podemos hacer un enlace simbólico al directorio
donde debería residir.
En caso de que suceda un problema el WAL puede retroceder
hacia el pasado hasta el último momento en que todo estuvo ok.
WAL maneja varios niveles para especificar que tanto deseo
almacenar en este buffer en el nivel mínimo solo contiene
información para recuperar una db en caso de paradas abruptas
del servicio.
Para realizar la replicación requerimos aumentar el nivel de
WAL para reconstruir toda la data de una db.
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
76/93
●9: Replicación Asíncrona con PostgreSQL 9.0
Instalando
(0) Antes que nada creamos un punto de montaje vía SSHFS en el SLAVE
que montará un directorio especial del servidor MASTER, esto se puede
hacer vía NFS también.
En el MASTER:
[root@host] mkdir /home/wal_master <-- en este directorio se grabará el backup
del WAL.
[root@host] chown postgres:postgres /home/wal_master <-- volvemos propietario de este
directorio al usuario POSTGRES.
En el SLAVE:
[root@host] yum install sshfs <-- instalamos sshfs si no lo tenemos
debemos tener el repositorio de RPMFORGE
[root@host] chmod +x /usr/bin/fusermount <-- esto es una limitación de CentOS, hay que
autorizar ejecución a otros usuario del
comando “fusermount”
[root@host] mkdir /home/wal_slave <-- de este directorio se leerá la copia
Del WAL
[root@host] chown postgres:postgres /home/wal_slave <-- volvemos propietario de este
Directorio al usuario POSTGRES.
[root@host] su – postgres <-- ingresamos como usuario POSTGRES
[postgres@host] sshfs root@(ip_master):/home/wal_master /home/wal_slave
Al ejecutar este comando necesitamos ingresar la clave del “root” del servidor MASTER.
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
77/93
●9: Replicación Asíncrona con PostgreSQL 9.0
Instalando
(1) Autorizamos a los servidores a accesar a cada servidor
remoto
Editamos pg_hba.conf en el slave y añadimos esto:
host replication postgres (ip_master)/32 trust
Editamos pg_hba.conf en el master y añadimos esto:
host replication postgres (ip_slave)/32 trust
“replication” no es una base de datos real, es una palabra reservada
de la conexiòn para la réplica, ambos servidores deben poder
autenticarse uno al otro.
Editamos postgresql.conf en el slave y modificamos este parámetro:
listen_addresses = 'localhost,(ip_master)'
Editamos postgresql.conf en el master y modificamos este parámetro:
listen_addresses = 'localhost,(ip_slave)'
Si tenemos un master que alimenta varios slave entonces debemos añadir
en el tantos ips como sea necesario.
EQ Soft Consultoría y Soporte E.I.R.L.
Http://www.eqsoft.net
informes@eqsoft.net
Teléfonos: (51) (1) 5645744 / 5645424
DBA desde Básico a Avanzado
Clínica Santa Isabel - 2011
78/93
●9: Replicación Asíncrona con PostgreSQL 9.0
Instalando
(2) Configuramos el postgresql.conf del master
wal_level = hot_standby <-- este parámetro permitirá crear archivos que son capaces de
regenerar toda la base de datos.
archive_mode = on <-- indica que se deben generar archivos de backup de lo que
el WAL genere
archive_command = 'cp %p /home/wal_master/%f' <-- indica a donde se van a copiar los
backups del WAL.
max_wal_senders = 5 <-- cantidad de conexiones que ejecutará el proceso
wal_keep_segments = 32 <-- cantidad de “logfile segments” que se mantendrán vivos,
cada uno de ellos es de 16MB, si este número es muy
pequeño el sistema podría eliminar data antes de ser
movida al SALVE, un número muy alto ocupará una cantidad
de espacio moderado.
Iniciamos nuestro servidor MASTER
Dba PostgreSQL desde básico a avanzado parte2
Dba PostgreSQL desde básico a avanzado parte2
Dba PostgreSQL desde básico a avanzado parte2
Dba PostgreSQL desde básico a avanzado parte2
Dba PostgreSQL desde básico a avanzado parte2
Dba PostgreSQL desde básico a avanzado parte2
Dba PostgreSQL desde básico a avanzado parte2
Dba PostgreSQL desde básico a avanzado parte2
Dba PostgreSQL desde básico a avanzado parte2
Dba PostgreSQL desde básico a avanzado parte2
Dba PostgreSQL desde básico a avanzado parte2
Dba PostgreSQL desde básico a avanzado parte2
Dba PostgreSQL desde básico a avanzado parte2
Dba PostgreSQL desde básico a avanzado parte2
Dba PostgreSQL desde básico a avanzado parte2

Más contenido relacionado

La actualidad más candente

How many ways to monitor oracle golden gate-Collaborate 14
How many ways to monitor oracle golden gate-Collaborate 14How many ways to monitor oracle golden gate-Collaborate 14
How many ways to monitor oracle golden gate-Collaborate 14Bobby Curtis
 
Postgresql Database Administration Basic - Day1
Postgresql  Database Administration Basic  - Day1Postgresql  Database Administration Basic  - Day1
Postgresql Database Administration Basic - Day1PoguttuezhiniVP
 
Patroni - HA PostgreSQL made easy
Patroni - HA PostgreSQL made easyPatroni - HA PostgreSQL made easy
Patroni - HA PostgreSQL made easyAlexander Kukushkin
 
Transparent Data Encryption in PostgreSQL and Integration with Key Management...
Transparent Data Encryption in PostgreSQL and Integration with Key Management...Transparent Data Encryption in PostgreSQL and Integration with Key Management...
Transparent Data Encryption in PostgreSQL and Integration with Key Management...Masahiko Sawada
 
Google Spanner : our understanding of concepts and implications
Google Spanner : our understanding of concepts and implicationsGoogle Spanner : our understanding of concepts and implications
Google Spanner : our understanding of concepts and implicationsHarisankar H
 
Historias de usuario y la especificación de requisitos
Historias de usuario y la especificación de requisitosHistorias de usuario y la especificación de requisitos
Historias de usuario y la especificación de requisitosMarco Avendaño
 
Lightweight Transactions in Scylla versus Apache Cassandra
Lightweight Transactions in Scylla versus Apache CassandraLightweight Transactions in Scylla versus Apache Cassandra
Lightweight Transactions in Scylla versus Apache CassandraScyllaDB
 
The Hot Rod Protocol in Infinispan
The Hot Rod Protocol in InfinispanThe Hot Rod Protocol in Infinispan
The Hot Rod Protocol in InfinispanGalder Zamarreño
 
Beyond EXPLAIN: Query Optimization From Theory To Code
Beyond EXPLAIN: Query Optimization From Theory To CodeBeyond EXPLAIN: Query Optimization From Theory To Code
Beyond EXPLAIN: Query Optimization From Theory To CodeYuto Hayamizu
 
MySQL Performance - Best practices
MySQL Performance - Best practices MySQL Performance - Best practices
MySQL Performance - Best practices Ted Wennmark
 
Active Directory en 2012 : les meilleures pratiques en design, sécurité et ad...
Active Directory en 2012 : les meilleures pratiques en design, sécurité et ad...Active Directory en 2012 : les meilleures pratiques en design, sécurité et ad...
Active Directory en 2012 : les meilleures pratiques en design, sécurité et ad...Microsoft Technet France
 
Dxl As A Lotus Domino Integration Tool
Dxl As A Lotus Domino Integration ToolDxl As A Lotus Domino Integration Tool
Dxl As A Lotus Domino Integration Tooldominion
 
PostgreSQL: Performance Tuning
PostgreSQL: Performance TuningPostgreSQL: Performance Tuning
PostgreSQL: Performance TuningFernando Ike
 
Linux tuning to improve PostgreSQL performance
Linux tuning to improve PostgreSQL performanceLinux tuning to improve PostgreSQL performance
Linux tuning to improve PostgreSQL performancePostgreSQL-Consulting
 
What to Expect From Oracle database 19c
What to Expect From Oracle database 19cWhat to Expect From Oracle database 19c
What to Expect From Oracle database 19cMaria Colgan
 
Best Practices for Using Apache Spark on AWS
Best Practices for Using Apache Spark on AWSBest Practices for Using Apache Spark on AWS
Best Practices for Using Apache Spark on AWSAmazon Web Services
 
Mastering PostgreSQL Administration
Mastering PostgreSQL AdministrationMastering PostgreSQL Administration
Mastering PostgreSQL AdministrationEDB
 
Optimizing MariaDB for maximum performance
Optimizing MariaDB for maximum performanceOptimizing MariaDB for maximum performance
Optimizing MariaDB for maximum performanceMariaDB plc
 

La actualidad más candente (20)

Hash joins and bloom filters at AMIS25
Hash joins and bloom filters at AMIS25Hash joins and bloom filters at AMIS25
Hash joins and bloom filters at AMIS25
 
How many ways to monitor oracle golden gate-Collaborate 14
How many ways to monitor oracle golden gate-Collaborate 14How many ways to monitor oracle golden gate-Collaborate 14
How many ways to monitor oracle golden gate-Collaborate 14
 
Postgresql Database Administration Basic - Day1
Postgresql  Database Administration Basic  - Day1Postgresql  Database Administration Basic  - Day1
Postgresql Database Administration Basic - Day1
 
Patroni - HA PostgreSQL made easy
Patroni - HA PostgreSQL made easyPatroni - HA PostgreSQL made easy
Patroni - HA PostgreSQL made easy
 
Transparent Data Encryption in PostgreSQL and Integration with Key Management...
Transparent Data Encryption in PostgreSQL and Integration with Key Management...Transparent Data Encryption in PostgreSQL and Integration with Key Management...
Transparent Data Encryption in PostgreSQL and Integration with Key Management...
 
Google Spanner : our understanding of concepts and implications
Google Spanner : our understanding of concepts and implicationsGoogle Spanner : our understanding of concepts and implications
Google Spanner : our understanding of concepts and implications
 
Historias de usuario y la especificación de requisitos
Historias de usuario y la especificación de requisitosHistorias de usuario y la especificación de requisitos
Historias de usuario y la especificación de requisitos
 
Lightweight Transactions in Scylla versus Apache Cassandra
Lightweight Transactions in Scylla versus Apache CassandraLightweight Transactions in Scylla versus Apache Cassandra
Lightweight Transactions in Scylla versus Apache Cassandra
 
The Hot Rod Protocol in Infinispan
The Hot Rod Protocol in InfinispanThe Hot Rod Protocol in Infinispan
The Hot Rod Protocol in Infinispan
 
Beyond EXPLAIN: Query Optimization From Theory To Code
Beyond EXPLAIN: Query Optimization From Theory To CodeBeyond EXPLAIN: Query Optimization From Theory To Code
Beyond EXPLAIN: Query Optimization From Theory To Code
 
MySQL Performance - Best practices
MySQL Performance - Best practices MySQL Performance - Best practices
MySQL Performance - Best practices
 
Active Directory en 2012 : les meilleures pratiques en design, sécurité et ad...
Active Directory en 2012 : les meilleures pratiques en design, sécurité et ad...Active Directory en 2012 : les meilleures pratiques en design, sécurité et ad...
Active Directory en 2012 : les meilleures pratiques en design, sécurité et ad...
 
Dxl As A Lotus Domino Integration Tool
Dxl As A Lotus Domino Integration ToolDxl As A Lotus Domino Integration Tool
Dxl As A Lotus Domino Integration Tool
 
PostgreSQL: Performance Tuning
PostgreSQL: Performance TuningPostgreSQL: Performance Tuning
PostgreSQL: Performance Tuning
 
Linux tuning to improve PostgreSQL performance
Linux tuning to improve PostgreSQL performanceLinux tuning to improve PostgreSQL performance
Linux tuning to improve PostgreSQL performance
 
2.2 y 2.3
2.2 y 2.32.2 y 2.3
2.2 y 2.3
 
What to Expect From Oracle database 19c
What to Expect From Oracle database 19cWhat to Expect From Oracle database 19c
What to Expect From Oracle database 19c
 
Best Practices for Using Apache Spark on AWS
Best Practices for Using Apache Spark on AWSBest Practices for Using Apache Spark on AWS
Best Practices for Using Apache Spark on AWS
 
Mastering PostgreSQL Administration
Mastering PostgreSQL AdministrationMastering PostgreSQL Administration
Mastering PostgreSQL Administration
 
Optimizing MariaDB for maximum performance
Optimizing MariaDB for maximum performanceOptimizing MariaDB for maximum performance
Optimizing MariaDB for maximum performance
 

Destacado

Dba PostgreSQL desde básico a avanzado parte1
Dba PostgreSQL desde básico a avanzado parte1Dba PostgreSQL desde básico a avanzado parte1
Dba PostgreSQL desde básico a avanzado parte1EQ SOFT EIRL
 
Cuellos botella en PostgreSQL
Cuellos botella en PostgreSQLCuellos botella en PostgreSQL
Cuellos botella en PostgreSQLEQ SOFT EIRL
 
PostgreSQL - Lección 6 - Subconsultas
PostgreSQL - Lección 6 - SubconsultasPostgreSQL - Lección 6 - Subconsultas
PostgreSQL - Lección 6 - SubconsultasNicola Strappazzon C.
 
Emite - Facturación Electrónica
Emite - Facturación ElectrónicaEmite - Facturación Electrónica
Emite - Facturación ElectrónicaEQ SOFT EIRL
 
PostgreSQL - Lección 7 - Usando los operadores de conjunto
PostgreSQL - Lección 7 - Usando los operadores de conjuntoPostgreSQL - Lección 7 - Usando los operadores de conjunto
PostgreSQL - Lección 7 - Usando los operadores de conjuntoNicola Strappazzon C.
 
Cluster con postgresql
Cluster con postgresqlCluster con postgresql
Cluster con postgresqlesmeraldaq2011
 
Brochure EqSoft - 2017
Brochure EqSoft - 2017Brochure EqSoft - 2017
Brochure EqSoft - 2017EQ SOFT EIRL
 
PostgreSQL - Lección 2 - Restringiendo y Ordenando los Datos retornados por e...
PostgreSQL - Lección 2 - Restringiendo y Ordenando los Datos retornados por e...PostgreSQL - Lección 2 - Restringiendo y Ordenando los Datos retornados por e...
PostgreSQL - Lección 2 - Restringiendo y Ordenando los Datos retornados por e...Nicola Strappazzon C.
 
PostgreSQL - Lección 1 - Usando la sentencia SELECT
PostgreSQL - Lección 1 - Usando la sentencia SELECTPostgreSQL - Lección 1 - Usando la sentencia SELECT
PostgreSQL - Lección 1 - Usando la sentencia SELECTNicola Strappazzon C.
 
PostgreSQL - Lección 5 - Recibiendo datos desde múltiples tablas
PostgreSQL - Lección 5 - Recibiendo datos desde múltiples tablasPostgreSQL - Lección 5 - Recibiendo datos desde múltiples tablas
PostgreSQL - Lección 5 - Recibiendo datos desde múltiples tablasNicola Strappazzon C.
 
PostgreSQL - Lección 3 - Usando funciones simples para manipular la salida de...
PostgreSQL - Lección 3 - Usando funciones simples para manipular la salida de...PostgreSQL - Lección 3 - Usando funciones simples para manipular la salida de...
PostgreSQL - Lección 3 - Usando funciones simples para manipular la salida de...Nicola Strappazzon C.
 
Brochure Soluciones de Sensores Para Museos
Brochure Soluciones de Sensores Para MuseosBrochure Soluciones de Sensores Para Museos
Brochure Soluciones de Sensores Para MuseosEQ SOFT EIRL
 
PostgreSQL - Lección 4 - Usando funciones para manipular grupos de datos
PostgreSQL - Lección 4 - Usando funciones para manipular grupos de datosPostgreSQL - Lección 4 - Usando funciones para manipular grupos de datos
PostgreSQL - Lección 4 - Usando funciones para manipular grupos de datosNicola Strappazzon C.
 
Alta Disponibilidad con PostgreSQL
Alta Disponibilidad con PostgreSQLAlta Disponibilidad con PostgreSQL
Alta Disponibilidad con PostgreSQLCarlos Gustavo Ruiz
 
PostgreSQL - Lección 8 - Manipulando Datos y Transacciones
PostgreSQL - Lección 8 - Manipulando Datos y TransaccionesPostgreSQL - Lección 8 - Manipulando Datos y Transacciones
PostgreSQL - Lección 8 - Manipulando Datos y TransaccionesNicola Strappazzon C.
 

Destacado (20)

Dba PostgreSQL desde básico a avanzado parte1
Dba PostgreSQL desde básico a avanzado parte1Dba PostgreSQL desde básico a avanzado parte1
Dba PostgreSQL desde básico a avanzado parte1
 
Cuellos botella en PostgreSQL
Cuellos botella en PostgreSQLCuellos botella en PostgreSQL
Cuellos botella en PostgreSQL
 
Manual curso basico postgres
Manual curso basico postgresManual curso basico postgres
Manual curso basico postgres
 
Postgre
PostgrePostgre
Postgre
 
PostgreSQL - Lección 6 - Subconsultas
PostgreSQL - Lección 6 - SubconsultasPostgreSQL - Lección 6 - Subconsultas
PostgreSQL - Lección 6 - Subconsultas
 
Emite - Facturación Electrónica
Emite - Facturación ElectrónicaEmite - Facturación Electrónica
Emite - Facturación Electrónica
 
PostgreSQL - Lección 7 - Usando los operadores de conjunto
PostgreSQL - Lección 7 - Usando los operadores de conjuntoPostgreSQL - Lección 7 - Usando los operadores de conjunto
PostgreSQL - Lección 7 - Usando los operadores de conjunto
 
Cluster con postgresql
Cluster con postgresqlCluster con postgresql
Cluster con postgresql
 
Brochure EqSoft - 2017
Brochure EqSoft - 2017Brochure EqSoft - 2017
Brochure EqSoft - 2017
 
PostgreSQL - Lección 10 - Vistas
PostgreSQL - Lección 10 - VistasPostgreSQL - Lección 10 - Vistas
PostgreSQL - Lección 10 - Vistas
 
PostgreSQL - Lección 2 - Restringiendo y Ordenando los Datos retornados por e...
PostgreSQL - Lección 2 - Restringiendo y Ordenando los Datos retornados por e...PostgreSQL - Lección 2 - Restringiendo y Ordenando los Datos retornados por e...
PostgreSQL - Lección 2 - Restringiendo y Ordenando los Datos retornados por e...
 
PostgreSQL - Lección 9 - Tablas
PostgreSQL - Lección 9 - TablasPostgreSQL - Lección 9 - Tablas
PostgreSQL - Lección 9 - Tablas
 
PostgreSQL - Lección 1 - Usando la sentencia SELECT
PostgreSQL - Lección 1 - Usando la sentencia SELECTPostgreSQL - Lección 1 - Usando la sentencia SELECT
PostgreSQL - Lección 1 - Usando la sentencia SELECT
 
PostgreSQL - Lección 5 - Recibiendo datos desde múltiples tablas
PostgreSQL - Lección 5 - Recibiendo datos desde múltiples tablasPostgreSQL - Lección 5 - Recibiendo datos desde múltiples tablas
PostgreSQL - Lección 5 - Recibiendo datos desde múltiples tablas
 
PostgreSQL - Lección 3 - Usando funciones simples para manipular la salida de...
PostgreSQL - Lección 3 - Usando funciones simples para manipular la salida de...PostgreSQL - Lección 3 - Usando funciones simples para manipular la salida de...
PostgreSQL - Lección 3 - Usando funciones simples para manipular la salida de...
 
Brochure Soluciones de Sensores Para Museos
Brochure Soluciones de Sensores Para MuseosBrochure Soluciones de Sensores Para Museos
Brochure Soluciones de Sensores Para Museos
 
PostgreSQL - Lección 4 - Usando funciones para manipular grupos de datos
PostgreSQL - Lección 4 - Usando funciones para manipular grupos de datosPostgreSQL - Lección 4 - Usando funciones para manipular grupos de datos
PostgreSQL - Lección 4 - Usando funciones para manipular grupos de datos
 
Alta Disponibilidad con PostgreSQL
Alta Disponibilidad con PostgreSQLAlta Disponibilidad con PostgreSQL
Alta Disponibilidad con PostgreSQL
 
Requerimientos de PostgreSQL
Requerimientos de PostgreSQLRequerimientos de PostgreSQL
Requerimientos de PostgreSQL
 
PostgreSQL - Lección 8 - Manipulando Datos y Transacciones
PostgreSQL - Lección 8 - Manipulando Datos y TransaccionesPostgreSQL - Lección 8 - Manipulando Datos y Transacciones
PostgreSQL - Lección 8 - Manipulando Datos y Transacciones
 

Similar a Dba PostgreSQL desde básico a avanzado parte2

Similar a Dba PostgreSQL desde básico a avanzado parte2 (20)

PostgreSQL BDR - Altenwald.pdf
PostgreSQL BDR - Altenwald.pdfPostgreSQL BDR - Altenwald.pdf
PostgreSQL BDR - Altenwald.pdf
 
Sistemas de gestión de base de datos
Sistemas de gestión de base de datosSistemas de gestión de base de datos
Sistemas de gestión de base de datos
 
Instalación de sgbd en diferentes plataformas de windows
Instalación de sgbd en diferentes plataformas de windowsInstalación de sgbd en diferentes plataformas de windows
Instalación de sgbd en diferentes plataformas de windows
 
Replicacion con postgresql y slony
Replicacion con  postgresql y slonyReplicacion con  postgresql y slony
Replicacion con postgresql y slony
 
Replicacion con postgresql y slony
Replicacion con  postgresql y slonyReplicacion con  postgresql y slony
Replicacion con postgresql y slony
 
SGBD Postgresql
SGBD PostgresqlSGBD Postgresql
SGBD Postgresql
 
Curso de PostgreSQL
Curso de PostgreSQLCurso de PostgreSQL
Curso de PostgreSQL
 
Bases de Datos Distribuidas con Sql Server 2012
Bases de Datos Distribuidas con Sql Server 2012Bases de Datos Distribuidas con Sql Server 2012
Bases de Datos Distribuidas con Sql Server 2012
 
LSWC PostgreSQL 9.1 (2011)
LSWC PostgreSQL 9.1 (2011)LSWC PostgreSQL 9.1 (2011)
LSWC PostgreSQL 9.1 (2011)
 
Crear bases de datos replicadas maestro
Crear bases de datos replicadas maestroCrear bases de datos replicadas maestro
Crear bases de datos replicadas maestro
 
Jdbc
JdbcJdbc
Jdbc
 
Manual instalacion sql_server
Manual instalacion sql_serverManual instalacion sql_server
Manual instalacion sql_server
 
Jdbc
JdbcJdbc
Jdbc
 
Jdbc
JdbcJdbc
Jdbc
 
William fabricio manual de sistemas sas
William fabricio manual de sistemas sasWilliam fabricio manual de sistemas sas
William fabricio manual de sistemas sas
 
Pg pool cluster postgresql
Pg pool cluster postgresqlPg pool cluster postgresql
Pg pool cluster postgresql
 
bd
bdbd
bd
 
Un vistazo a sql server
Un vistazo a sql serverUn vistazo a sql server
Un vistazo a sql server
 
Taller de Base de datos - Unidad 1 SGBD introduccion
Taller de Base de datos - Unidad 1 SGBD introduccionTaller de Base de datos - Unidad 1 SGBD introduccion
Taller de Base de datos - Unidad 1 SGBD introduccion
 
Charla OWASP
Charla OWASPCharla OWASP
Charla OWASP
 

Más de EQ SOFT EIRL

Libro sobre exportación de servicios post Covid-19
Libro sobre exportación de servicios post Covid-19Libro sobre exportación de servicios post Covid-19
Libro sobre exportación de servicios post Covid-19EQ SOFT EIRL
 
Peruanos en Twitter
Peruanos en TwitterPeruanos en Twitter
Peruanos en TwitterEQ SOFT EIRL
 
Recomendaciones Para el Tratamiento de Datos en Inteligencia Artificial
Recomendaciones Para el Tratamiento de Datos en Inteligencia ArtificialRecomendaciones Para el Tratamiento de Datos en Inteligencia Artificial
Recomendaciones Para el Tratamiento de Datos en Inteligencia ArtificialEQ SOFT EIRL
 
Centros Regionales de Innovación Aplicada
Centros Regionales de Innovación AplicadaCentros Regionales de Innovación Aplicada
Centros Regionales de Innovación AplicadaEQ SOFT EIRL
 
EQ Soft: Soluciones de innovación agraria
EQ Soft: Soluciones de innovación agrariaEQ Soft: Soluciones de innovación agraria
EQ Soft: Soluciones de innovación agrariaEQ SOFT EIRL
 
Transformación Digital en Logística
Transformación Digital en LogísticaTransformación Digital en Logística
Transformación Digital en LogísticaEQ SOFT EIRL
 
Propuestas de innovacón financiera
Propuestas de innovacón financieraPropuestas de innovacón financiera
Propuestas de innovacón financieraEQ SOFT EIRL
 
Clusters Empresariales en Latinoamérica
Clusters Empresariales en LatinoaméricaClusters Empresariales en Latinoamérica
Clusters Empresariales en LatinoaméricaEQ SOFT EIRL
 
Inteligencia Artificial en la Administración Pública
Inteligencia Artificial en la Administración PúblicaInteligencia Artificial en la Administración Pública
Inteligencia Artificial en la Administración PúblicaEQ SOFT EIRL
 
Inteligencia artificial para las empresas 2019
Inteligencia artificial para las empresas 2019Inteligencia artificial para las empresas 2019
Inteligencia artificial para las empresas 2019EQ SOFT EIRL
 
Platique.me solución integral de Smart ChatBot
Platique.me solución integral de Smart ChatBotPlatique.me solución integral de Smart ChatBot
Platique.me solución integral de Smart ChatBotEQ SOFT EIRL
 
Logos Dictados - solución de Speech to Text
Logos Dictados - solución de Speech to TextLogos Dictados - solución de Speech to Text
Logos Dictados - solución de Speech to TextEQ SOFT EIRL
 
Logos Biblios - Gestión de Conocimientos
Logos Biblios - Gestión de ConocimientosLogos Biblios - Gestión de Conocimientos
Logos Biblios - Gestión de ConocimientosEQ SOFT EIRL
 
Logos, Framework de Inteligencia Artificial
Logos, Framework de Inteligencia ArtificialLogos, Framework de Inteligencia Artificial
Logos, Framework de Inteligencia ArtificialEQ SOFT EIRL
 
Logos: Framework de Inteligencia Artificial
Logos: Framework de Inteligencia ArtificialLogos: Framework de Inteligencia Artificial
Logos: Framework de Inteligencia ArtificialEQ SOFT EIRL
 
Presentación de Logos en el Cade Digital
Presentación de Logos en el Cade DigitalPresentación de Logos en el Cade Digital
Presentación de Logos en el Cade DigitalEQ SOFT EIRL
 
Logos Codex: Plataforma de Big Data
Logos Codex: Plataforma de Big DataLogos Codex: Plataforma de Big Data
Logos Codex: Plataforma de Big DataEQ SOFT EIRL
 
Portafolio de Productos y Servicios de EqSoft
Portafolio de Productos y Servicios de EqSoftPortafolio de Productos y Servicios de EqSoft
Portafolio de Productos y Servicios de EqSoftEQ SOFT EIRL
 
Soluciones de RPA para automatizar procesos
Soluciones de RPA para automatizar procesosSoluciones de RPA para automatizar procesos
Soluciones de RPA para automatizar procesosEQ SOFT EIRL
 

Más de EQ SOFT EIRL (20)

Libro sobre exportación de servicios post Covid-19
Libro sobre exportación de servicios post Covid-19Libro sobre exportación de servicios post Covid-19
Libro sobre exportación de servicios post Covid-19
 
Peruanos en Twitter
Peruanos en TwitterPeruanos en Twitter
Peruanos en Twitter
 
Recomendaciones Para el Tratamiento de Datos en Inteligencia Artificial
Recomendaciones Para el Tratamiento de Datos en Inteligencia ArtificialRecomendaciones Para el Tratamiento de Datos en Inteligencia Artificial
Recomendaciones Para el Tratamiento de Datos en Inteligencia Artificial
 
Centros Regionales de Innovación Aplicada
Centros Regionales de Innovación AplicadaCentros Regionales de Innovación Aplicada
Centros Regionales de Innovación Aplicada
 
EQ Soft: Soluciones de innovación agraria
EQ Soft: Soluciones de innovación agrariaEQ Soft: Soluciones de innovación agraria
EQ Soft: Soluciones de innovación agraria
 
Transformación Digital en Logística
Transformación Digital en LogísticaTransformación Digital en Logística
Transformación Digital en Logística
 
Propuestas de innovacón financiera
Propuestas de innovacón financieraPropuestas de innovacón financiera
Propuestas de innovacón financiera
 
Clusters Empresariales en Latinoamérica
Clusters Empresariales en LatinoaméricaClusters Empresariales en Latinoamérica
Clusters Empresariales en Latinoamérica
 
Inteligencia Artificial en la Administración Pública
Inteligencia Artificial en la Administración PúblicaInteligencia Artificial en la Administración Pública
Inteligencia Artificial en la Administración Pública
 
Inteligencia artificial para las empresas 2019
Inteligencia artificial para las empresas 2019Inteligencia artificial para las empresas 2019
Inteligencia artificial para las empresas 2019
 
Platique.me solución integral de Smart ChatBot
Platique.me solución integral de Smart ChatBotPlatique.me solución integral de Smart ChatBot
Platique.me solución integral de Smart ChatBot
 
Logos Dictados - solución de Speech to Text
Logos Dictados - solución de Speech to TextLogos Dictados - solución de Speech to Text
Logos Dictados - solución de Speech to Text
 
Logos Biblios - Gestión de Conocimientos
Logos Biblios - Gestión de ConocimientosLogos Biblios - Gestión de Conocimientos
Logos Biblios - Gestión de Conocimientos
 
Logos, Framework de Inteligencia Artificial
Logos, Framework de Inteligencia ArtificialLogos, Framework de Inteligencia Artificial
Logos, Framework de Inteligencia Artificial
 
Internet of Food
Internet of FoodInternet of Food
Internet of Food
 
Logos: Framework de Inteligencia Artificial
Logos: Framework de Inteligencia ArtificialLogos: Framework de Inteligencia Artificial
Logos: Framework de Inteligencia Artificial
 
Presentación de Logos en el Cade Digital
Presentación de Logos en el Cade DigitalPresentación de Logos en el Cade Digital
Presentación de Logos en el Cade Digital
 
Logos Codex: Plataforma de Big Data
Logos Codex: Plataforma de Big DataLogos Codex: Plataforma de Big Data
Logos Codex: Plataforma de Big Data
 
Portafolio de Productos y Servicios de EqSoft
Portafolio de Productos y Servicios de EqSoftPortafolio de Productos y Servicios de EqSoft
Portafolio de Productos y Servicios de EqSoft
 
Soluciones de RPA para automatizar procesos
Soluciones de RPA para automatizar procesosSoluciones de RPA para automatizar procesos
Soluciones de RPA para automatizar procesos
 

Último

herramientas web para estudiantes interesados en el tema
herramientas web para estudiantes interesados en el temaherramientas web para estudiantes interesados en el tema
herramientas web para estudiantes interesados en el temaJadeVilcscordova
 
Editorial. Grupo de 12B. La Salle Margarita.pdf
Editorial. Grupo de 12B. La Salle Margarita.pdfEditorial. Grupo de 12B. La Salle Margarita.pdf
Editorial. Grupo de 12B. La Salle Margarita.pdfYanitza28
 
microsoft word manuales para todos tipos de estudiamte
microsoft word manuales para todos tipos de estudiamtemicrosoft word manuales para todos tipos de estudiamte
microsoft word manuales para todos tipos de estudiamte2024020140
 
Editorial. Grupo de 12B de La Salle Margarita.pdf
Editorial. Grupo de 12B de La Salle Margarita.pdfEditorial. Grupo de 12B de La Salle Margarita.pdf
Editorial. Grupo de 12B de La Salle Margarita.pdfYanitza28
 
10°8 - Avances tecnologicos del siglo XXI 10-8
10°8 - Avances tecnologicos del siglo XXI 10-810°8 - Avances tecnologicos del siglo XXI 10-8
10°8 - Avances tecnologicos del siglo XXI 10-8antoniopalmieriluna
 
Tarea_sesion_15_Reportes Maestro - Detalle con el uso de AJAX.pptx
Tarea_sesion_15_Reportes Maestro - Detalle con el uso de AJAX.pptxTarea_sesion_15_Reportes Maestro - Detalle con el uso de AJAX.pptx
Tarea_sesion_15_Reportes Maestro - Detalle con el uso de AJAX.pptxVICTORMANUELBEASAGUI
 
Redes Neuronales profundas convolucionales CNN ́s-1.pdf
Redes Neuronales profundas convolucionales CNN ́s-1.pdfRedes Neuronales profundas convolucionales CNN ́s-1.pdf
Redes Neuronales profundas convolucionales CNN ́s-1.pdfJosAndrRosarioVzquez
 
AVANCES TECNOLOGICOS DEL SIGLO XXI. 10-08..pptx
AVANCES TECNOLOGICOS  DEL SIGLO XXI. 10-08..pptxAVANCES TECNOLOGICOS  DEL SIGLO XXI. 10-08..pptx
AVANCES TECNOLOGICOS DEL SIGLO XXI. 10-08..pptxdulcemonterroza
 
presentación del desensamble y ensamble del equipo de computo en base a las n...
presentación del desensamble y ensamble del equipo de computo en base a las n...presentación del desensamble y ensamble del equipo de computo en base a las n...
presentación del desensamble y ensamble del equipo de computo en base a las n...axelv9257
 
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdf
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdfpresentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdf
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdfaxelv9257
 
2023 07 Casos prácticos para Realidad aumentada, metaverso y realidad extendida
2023 07 Casos prácticos para Realidad aumentada, metaverso y realidad extendida2023 07 Casos prácticos para Realidad aumentada, metaverso y realidad extendida
2023 07 Casos prácticos para Realidad aumentada, metaverso y realidad extendidaLuis Francisco Reyes Aceves
 
Función del analizador léxico.pdf presentacion
Función del analizador léxico.pdf presentacionFunción del analizador léxico.pdf presentacion
Función del analizador léxico.pdf presentacionEmanuelMuoz11
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxJorgeParada26
 
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptx
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptxinfor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptx
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptxgustavovasquezv56
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosJhonJairoRodriguezCe
 
QUINTA SEXTA GENERACION de COMPUTADORAS
QUINTA  SEXTA GENERACION de COMPUTADORASQUINTA  SEXTA GENERACION de COMPUTADORAS
QUINTA SEXTA GENERACION de COMPUTADORASMarc Liust
 

Último (16)

herramientas web para estudiantes interesados en el tema
herramientas web para estudiantes interesados en el temaherramientas web para estudiantes interesados en el tema
herramientas web para estudiantes interesados en el tema
 
Editorial. Grupo de 12B. La Salle Margarita.pdf
Editorial. Grupo de 12B. La Salle Margarita.pdfEditorial. Grupo de 12B. La Salle Margarita.pdf
Editorial. Grupo de 12B. La Salle Margarita.pdf
 
microsoft word manuales para todos tipos de estudiamte
microsoft word manuales para todos tipos de estudiamtemicrosoft word manuales para todos tipos de estudiamte
microsoft word manuales para todos tipos de estudiamte
 
Editorial. Grupo de 12B de La Salle Margarita.pdf
Editorial. Grupo de 12B de La Salle Margarita.pdfEditorial. Grupo de 12B de La Salle Margarita.pdf
Editorial. Grupo de 12B de La Salle Margarita.pdf
 
10°8 - Avances tecnologicos del siglo XXI 10-8
10°8 - Avances tecnologicos del siglo XXI 10-810°8 - Avances tecnologicos del siglo XXI 10-8
10°8 - Avances tecnologicos del siglo XXI 10-8
 
Tarea_sesion_15_Reportes Maestro - Detalle con el uso de AJAX.pptx
Tarea_sesion_15_Reportes Maestro - Detalle con el uso de AJAX.pptxTarea_sesion_15_Reportes Maestro - Detalle con el uso de AJAX.pptx
Tarea_sesion_15_Reportes Maestro - Detalle con el uso de AJAX.pptx
 
Redes Neuronales profundas convolucionales CNN ́s-1.pdf
Redes Neuronales profundas convolucionales CNN ́s-1.pdfRedes Neuronales profundas convolucionales CNN ́s-1.pdf
Redes Neuronales profundas convolucionales CNN ́s-1.pdf
 
AVANCES TECNOLOGICOS DEL SIGLO XXI. 10-08..pptx
AVANCES TECNOLOGICOS  DEL SIGLO XXI. 10-08..pptxAVANCES TECNOLOGICOS  DEL SIGLO XXI. 10-08..pptx
AVANCES TECNOLOGICOS DEL SIGLO XXI. 10-08..pptx
 
presentación del desensamble y ensamble del equipo de computo en base a las n...
presentación del desensamble y ensamble del equipo de computo en base a las n...presentación del desensamble y ensamble del equipo de computo en base a las n...
presentación del desensamble y ensamble del equipo de computo en base a las n...
 
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdf
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdfpresentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdf
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdf
 
2023 07 Casos prácticos para Realidad aumentada, metaverso y realidad extendida
2023 07 Casos prácticos para Realidad aumentada, metaverso y realidad extendida2023 07 Casos prácticos para Realidad aumentada, metaverso y realidad extendida
2023 07 Casos prácticos para Realidad aumentada, metaverso y realidad extendida
 
Función del analizador léxico.pdf presentacion
Función del analizador léxico.pdf presentacionFunción del analizador léxico.pdf presentacion
Función del analizador léxico.pdf presentacion
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptx
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptxinfor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptx
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptx
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos Basicos
 
QUINTA SEXTA GENERACION de COMPUTADORAS
QUINTA  SEXTA GENERACION de COMPUTADORASQUINTA  SEXTA GENERACION de COMPUTADORAS
QUINTA SEXTA GENERACION de COMPUTADORAS
 

Dba PostgreSQL desde básico a avanzado parte2

  • 1. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 1/93 Curso de PostgreSQL DBACurso de PostgreSQL DBA Desde Básico a AvanzadoDesde Básico a Avanzado 20112011 Parte 2Parte 2 Ernesto Quiñones AzcárateErnesto Quiñones Azcárate ernesto@eqsoft.neternesto@eqsoft.net
  • 2. ●1: Instalación, Configuración y Logs bajo Gnu/Linux ●2: Software administración y SQL para DBAs ●3: Objetos de la DB, Herencias y Tablas particionadas ●4: Schemas y Tablespaces, Roles y Accesos ●5: Backup/Restore/Vacuum, Migraciones, Indices ●6: DBLinks, DbiLinks y Paquetes del Contrib ●7: Análisis de Hardware para soluciones avanzadas, Monitoreo sobre Gnu/Linux. ●8: Configuración Avanzada y Problemas Comunes ●9: Replicación Asíncrona con PostgreSQL 9.0 ●10: Pool de Conexiones con PgPool EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 2/93
  • 3. ●6: DBLinks, DbiLinks y Paquetes del Contrib 1. DBLinks PostgreSQL no permite acceder de manera transparente entre la data de un servidor y  otro, incluido entre propios servidores PostgreSQL para ello se requiere crear una  conexión entre ambos servidores. Tome en cuenta uan cosa, acceder a otra db desde la cual se esta trabajando y operar  sobre ella requerirá que PostgreSQL jale toda la data de las tablas que involucren la  operación, luego el dbms filtrará la necesaria en la db actual pero solo después de  haber jalado todo. DbLink no viene por defecto, es necesario instalar el paquete “contrib” de la versión  que estemos usando         [root@host] yum install postgresql­contrib Ahora debemos entrar a la base de datos que se conectará con las demás bases de datos  y ejecutar este script:         prueba5=# i /usr/share/pgsql/contrib/dblink.sql  EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 3/93
  • 4. 1. DBLinks a) CREATE FOREIGN DATA WRAPPER Creamos una fuente de datos externa, esto es parecido a un canal de comunicación, solo  el super usuario “postgres” debe realizar esta acción. Prueba5=# CREATE FOREIGN DATA WRAPPER dw_prueba VALIDATOR postgresql_fdw_validator; VALIDATOR postgresql_fdw_validator esta predeterminado para chequear la consistencia  de la conexión, si no se especifica esto no se validará la misma. b) CREATE SERVER Con está sentencia creamos el servidor al cual nos vamos a conectar prueba5=# CREATE SERVER srv_prueba FOREIGN DATA WRAPPER dw_prueba OPTIONS (hostaddr  '127.0.0.1',  dbname 'drupal7',port '5432'); c) CREATE USER MAPPING Creamos un usuario de conexión a la db foranea. prueba5=# CREATE USER MAPPING FOR dbadmin SERVER srv_prueba OPTIONS (user 'usuario_foraneo',  password 'password_foraneo'); EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 4/93 ●6: DBLinks, DbiLinks y Paquetes del Contrib
  • 5. 1. DBLinks dbadmin          <­­ es el usuario/rol al cual le vamos a dar acceso al servidor, ya debe existir                      en el servidor. usuario_foraneo  <­­ es el usuario que tiene acceso a la db foránea, debe estar creado en la db                      foranea y configurado para permitir el acceso desde la IP del servidor que                      desea conectarse. password_foraneo <­­ clave d) SELECT dblink_connect Una vez configurada la conexión salimos del usuario “postgres” y utilizamos el usuario  que hemos definod va a hacer uso de la conexión, el primer paso entonces será activar  la conexión dblink de esta forma: prueba5=# SELECT dblink_connect('dw_prueba','srv_prueba'); e)Probando la conexión: prueba5=# select dblink_exec('dw_prueba','create table tbl_pruebas(id serial,nombre varchar(100))');  dblink_exec   ­­­­­­­­­­­­­­  CREATE TABLE prueba5=# select dblink_exec('dw_prueba','insert into tbl_pruebas (nombre) values (''ernesto'')');  dblink_exec  ­­­­­­­­­­­­­  INSERT 0 1 EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 5/93 ●6: DBLinks, DbiLinks y Paquetes del Contrib
  • 6. 1. DBLinks prueba5=# select dblink_exec('dw_prueba','insert into tbl_pruebas (nombre) values (''juan'')');  dblink_exec  ­­­­­­­­­­­­­  INSERT 0 1 ernesto@depeche:~$ psql drupal7 ­U dbadmin                                                            psql (8.4.4)                                                                                                                                                                                          drupal7=# select * from tbl_pruebas;                                                                                        id | nombre                                                                                          ­­­­+­­­­­­­­­                                                                                          1 | ernesto                                                                                           2 | juan                                                                                            (2 filas)                                                                                             f)Trayendo Data: prueba5=# select * from dblink('mi_conexion','select * from tbl_pruebas') as (f_id integer, f_nomber  varchar(100));  f_id | f_nomber  ­­­­­­+­­­­­­­­­­     1 | ernesto     2 | juan (2 filas) Para conocer más sobre las funciones de dblink  http://www.postgresql.org/docs/9/static/dblink.html  EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 6/93 ●6: DBLinks, DbiLinks y Paquetes del Contrib
  • 7. ●6: DBLinks, DbiLinks y Paquetes del Contrib 2. DBiLinks Así como necesitamos/podemos establecer conexiones entre diversos servidores  PostgreSQL podemos establecer conexiones con servidores NO PostgreSQL, servidores como  MySQL, Oracle, Ms SQL Server y en general casí cualquier servidores de bases de datos  que tenga un cliente de conexión para el lenguaje de programación Perl (en CentOS solo  tenemos MySQL y SQLite). a) Instalar los paquetes de software necesarios:    [root@host] yum install postgresql­plperl                <­­ soporte de lenguaje Perl para                                                                 Postgresql.    [root@host] yum install libdbi­dbd­mysql perl­DBD­MySQL  <­­ liberias de Perl para conectarse                                                                 a la base de datos deseada.    [root@host] yum install perl­YAML                        <­­ metalenguaje de Perl para bases de                                                                 datos. b) Descargar el paquete del DbiLink, desde el url:    http://pgfoundry.org/projects/dbi­link/   c) Configurar el soporte del lenguaje Perl en la base de datos PostgreSQL desde la     Que deseamos establecer la conexión a la base de datos remota (en este caso MySQL).    [root@host] createlang plperlu pruebas ­U dbadmin        <­­ “plperlu” es el lenguaje Perol para                                                                 PostgreSQL y “pruebas” es la base                                                                  de datos donde se instalará el                                                                 lenguaje. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 7/93
  • 8. ●6: DBLinks, DbiLinks y Paquetes del Contrib 2. DBiLinks d) Desempaquetamos el paquete de DbiLink que bajamos de PgFoundry en un directorio    desde el que pueda accederse para una vez logeado como el usuario que llevará a     cabo la conexión importar el script que añade el soporte de DbiLink a nuestra    base de datos.    [root@host] cd dbi­link­2.0.0/    [root@host] psql ­f dbi_link.sql pruebas ­U dbadmin    Este paso nos creará todo un entorno especial dentro de la base de datos “pruebas”    para activar conecciones a servidores NO PostgreSQL remotos, la información    recidirá en un schema especial llamado “dbi_link”. e) Dentro de la base de datis “pruebas” configuramos un ingreso automático a las    funciones de Dbi_Link por facilidad para la administración.     pruebas=# UPDATE pg_catalog.pg_settings     pruebas­#   SET setting = CASE WHEN 'dbi_link' = ANY(string_to_array(setting, ','))     Pruebas­#                   THEN setting     pruebas­#                   ELSE 'dbi_link,' || setting     pruebas­#                 END     pruebas­# WHERE name = 'search_path';            set_config             ­­­­­­­­­­­­­­­­­­­­­­­­­      dbi_link,"$user",public     (1 row) EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 8/93
  • 9. ●6: DBLinks, DbiLinks y Paquetes del Contrib 2. DBiLinks f) Configuramos la conexión a la base de datos remota (en este caso en MySQL). SELECT make_accessor_functions( 'dbi:mysql:database=mydb;host=localhost',       <­­ “mydb” debe ser el nombre de la db a conectarse 'usuario_coneccion',                            <­­ usario autorizado en la db a conectarse 'password_coneccion',                           <­­ password '­­­ AutoCommit: 1                                   <­­ Si esto es 0 entonces debemos hacer commit a RaiseError: 1                                       nuestras transacciones ', NULL, NULL, NULL, 'mydb'                                          <­­ nombre del esquema en PostgreSQL desde al que );                                                  accederemos a la data en el servidor foraneo. OJO no intente escribir todo el query en una sola linea, por algún motivo que no  comprendo el servicio requiere que dejes los saltos de linea que se pueden ver aqui,  las cadenas de conexión y parámetros podrían variar si la base de datos a la que nos  queremos conectar es otra como por ejemplo Oracle. Luego de ejecutarlo se creara un nuevo esquema con el nombre "mydb", osea el mismo  nombre de la db a la que me quiero conectar. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 9/93
  • 10. ●6: DBLinks, DbiLinks y Paquetes del Contrib 2. DBiLinks Probamos la conexión. pruebas=# select * from db_en_mysql.tablita; NOTICE:  SELECT dbi_link.cache_connection( 1 ) at line 12.  campo  ­­­­­­­  1  2  3 (3 rows) Restricciones: a. No podemos hacer create, drop ó alter. b. Cambios en la estructura de la base de datos remota no se ven reflejados    automáticamente en la base de datos PostgreSQL, para ello es necesario actualizar    la información del Schema.     pruebas=# select dbi_link.refresh_schema(1)       <­­ “1” es el número de la conexión.     pruebas=#  from dbi_link.dbi_connection      pruebas=#  where local_schema = 'db_en_mysql'; Para saber el número de una conexión:     pruebas=# select data_source_id, data_source from dbi_connection;      data_source_id |                  data_source                       ­­­­­­­­­­­­­­­­+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­                   1 | dbi:mysql:database=db_en_mysql;host=localhost EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 10/93
  • 11. 3. Paquetes del Contrib El contrib es un conjunto de aplicaciones adicionales que se ejecutan sobre PostgreSQL  y añaden nueva funcionalidad, estos no son necesariamente programas independientes, en  su mayoría son scripts en diferentes lenguajes “PL”, especialmente “pl/pgSQL”. El paquete Contrib que acompaña una distribución Gnu/Linux podría variar en cantidad  de aplicativos del que existe en otra distribución.     [root@ernesto ~]# rpm ­qla postgresql­contrib     ....     ....     /usr/share/pgsql/contrib/_int.sql     /usr/share/pgsql/contrib/adminpack.sql     /usr/share/pgsql/contrib/autoinc.sql     /usr/share/pgsql/contrib/btree_gin.sql     /usr/share/pgsql/contrib/btree_gist.sql     /usr/share/pgsql/contrib/chkpass.sql     /usr/share/pgsql/contrib/citext.sql     /usr/share/pgsql/contrib/cube.sql     /usr/share/pgsql/contrib/dblink.sql     /usr/share/pgsql/contrib/dict_int.sql     /usr/share/pgsql/contrib/dict_xsyn.sql     /usr/share/pgsql/contrib/earthdistance.sql     ....     .... EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 11/93 ●6: DBLinks, DbiLinks y Paquetes del Contrib
  • 12. 3. Paquetes del Contrib Para instalar uno de los paquetes del Contrib ejecutamos el script deseado:    pruebas=# i /usr/share/pgsql/contrib/cube.sql     SET Una lista completa de los contribs de mayor uso se puede encontrar aquí: http://wiki.postgresql.org/wiki/Extensions  EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 12/93 ●6: DBLinks, DbiLinks y Paquetes del Contrib
  • 13. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 13/93 ●7: Análisis de Hardware para soluciones avanzadas, Monitoreo sobre Gnu/Linux. 1. Análisis de Hardware para soluciones avanzadas El Hardware en ambientes de gran demanda o gran tamaño requiere unas  consideraciones especiales, dado a que PostgreSQL contiene poca complejidad  de afinamiento y se integra muy estrechamente con el sistema operativo el  rendimiento va a depender más de esté último y del hardware en el que esta  montado que de algún “tuneo” en especial. Los elementos que uno debe verificar siempre en su infraestructura actual o  en la que piensa adquirir van siempre por analizar estos componentes: a. CPU b. RAM c. Discos Duros d. Sistema de Archivos
  • 14. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 14/93 ●7: Análisis de Hardware para soluciones avanzadas, Monitoreo sobre Gnu/Linux. 1. Análisis de Hardware - CPU PostgreSQL no es un software multi­hilos, pero si es un software que  utiliza 1 Procesador por conexión ó 1 core por conexión, esto permite que  el máximo de cores de nuestro servidor sea utilizado eficientemente en  nuestra base de datos. Actualmente todas las configuraciones de servidores vienen de serie con  procesadores de 2 cores hasta 8 y pueden soportar desde 1 hasta muchos  cores (normalmente hasta 2 ó 4). Es importante determinar que tipo de procesador necesito para obtener el  mejor rendimiento, en la mayoría de los casos el poder de procesamiento de  los cores de nuestro servidor es demasiado alto para lo que realmente  necesitamos, en una base de datos transaccional pura los querys hacen un  uso bajo de procesador (pero si más de disco) por lo cual un “core” de  mucha potencia estaría desperdiciado, pero en entorno de querys de gran  movimiento de datos o complejidad estos “cores” si serían una necesidad  imperiosa.
  • 15. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 15/93 ●7: Análisis de Hardware para soluciones avanzadas, Monitoreo sobre Gnu/Linux. 1. Análisis de Hardware - CPU ¿AMD ó INTEL? Eso dependerá de lo mencionado en la primera parte: AMD menor precio que INTEL, más cores por el mismo precio, menor potencia y  por ello menor rendimiento en querys pesados, mayor soporte de  concurrencia. INTEL mayor precio, menos cores por el mismo precio, mayor potencia y por  ello mejor rendimiento en querys pesados, pero un desperdicio en ambientes  de querys sencillos, menor soporte de concurrencia. ¿Otros?, no tiene sentido. Para ver la velocidad de un procesador y sus cores: monstrito@monstrito­desktop:~/curso_pgsql$ cat /proc/cpuinfo 
  • 16. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 16/93 ●7: Análisis de Hardware para soluciones avanzadas, Monitoreo sobre Gnu/Linux. 1. Análisis de Hardware - CPU processor        : 0 vendor_id        : AuthenticAMD cpu family   : 16 model   : 10 model name   : AMD Phenom(tm) II X6 1090T Processor cpu MHz   : 800.000 cache size   : 512 KB siblings        : 6 cpu cores        : 6 bogomips        : 6400.30 TLB size        : 1024 4K pages clflush size   : 64 cache_alignment  : 64 address sizes   : 48 bits physical, 48 bits virtual power management : ts ttp tm stc 100mhzsteps hwpstate [9] Otra forma de medir performance es verificar el tiempo tomado en ejecutar una operación directa en  el CPU desde PostgreSQL. prueba2=# timing prueba2=# select sum(generate_series) from generate_series(1,10000000);      sum ­­­­­­­­­­­­­­­­  50000005000000 (1 row) Time: 2407.629 ms
  • 17. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 17/93 ●7: Análisis de Hardware para soluciones avanzadas, Monitoreo sobre Gnu/Linux. 1. Análisis de Hardware - RAM ¿Más RAM es mejor? Depende Si tenemos poca data y poca RAM pero buenos procesadores el efecto de bajo  rendimiento no se notará demasiado, el tiempo de respuesta de un procesador  sera inversamente proporcional a la cantidad de RAM que tengamos. Si tenemos tablas con mucha data pero que no se consulta no será problema  tener poca RAM, pero si se consulta demasiado entonces mientras más RAM  tengamos será mucho mejor. Para detectar problemas en la RAM podemos usar diferente software como: * http://pyropus.ca/software/memtester/   [root@host] yum install memtester   [root@host] memtestar [bloques de memoria a testear]K|M|G <­­ unidad del bloque * Http://www.memtest.org   Se puede instalar ejecutable ó descargar el cd booteable   [root@host] yum install memtes86+   <­­ reiniciar la máquina 
  • 18. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 18/93 ●7: Análisis de Hardware para soluciones avanzadas, Monitoreo sobre Gnu/Linux. 1. Análisis de Hardware – Discos Duros Básicamente tenemos 2 opciones en el mercado, SAS (Serial Attached SCSI) y  SATA (Serial ATA), el criterio para seleccionar una u otra son muy  parecidos al tema de los procesadores. SAS mayor velocidad de rotación (10k a 15K RPM), costo elevado por GB de  almacenamiento (existen modelos de SATA 3Gbit/s que son posible de añadir  en un bus SAS). SATA menor velocidad (7.2K RPM, algunos llegan a 10K RPM) , costo bajo por  GB de almacenamiento y unidades de almacenamiento más grandes que en SAS. ¿Porque Serial SCSI y no Parallel SCSI? * Serial soporta hasta 65,535 unidades, Parallel solo 8 ó 16 como máximo. * La transferencia es mayor en SAS (3 á 6 Gbit/s) que en Parallel.
  • 19. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 19/93 ●7: Análisis de Hardware para soluciones avanzadas, Monitoreo sobre Gnu/Linux. 1. Análisis de Hardware – Discos Duros - RAIDs RAID (Redundant Array of Inexpensive Disk) usado para obtener mejoras en  cuanto rendimiento, capacidad de almacenamiento y redundancia en la data. El soporte de RAID por hardware es siempre el más adecuado. * RAID 0: 2 ó más discos que unidos funcionan como una solo sumando sus   capacidades de almacenamiento, el problema es que si uno falla se pierden   todos los datos. * RAID 1: 2 discos en espejo conteniendo la misma data, mejora el   rendimiento al poder acceder el sistema a los datos desde cualquiera de    los 2 y permite mantener el sistema aunque uno de ellos falle, los discos   deben ser idénticos ya que solo se tendrá la capacidad de almacenamiento   de uno de ellos. * RAID 1+0: 4 discos o más discos (en cantidades pares) idénticos, se    configuran 2 grupos de Raid 0 y luego se configura una Raid 1 con los 2   Raid 0, se recomienda para entornos de alta disponibilidad.
  • 20. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 20/93 ●7: Análisis de Hardware para soluciones avanzadas, Monitoreo sobre Gnu/Linux. 1. Análisis de Hardware – Discos Duros - RAIDs RAID (Redundant Array of Inexpensive Disk) usado para obtener mejoras en  cuanto rendimiento, capacidad de almacenamiento y redundancia en la data. * RAID 5: 3 o más discos, se suman las capacidades del total de discos   menos 1 y un disco se guarda para fines de paridad, si uno de ellos   colapsa la información puede ser reconstruida gracias al disco de   paridad, el rendimiento en escritura podría decaer notablemente. * RAID 6: 4 o más discos, se suman las capacidades del total de discos   menos 2 (o más incluso) de tal manera que los adicionales se usan de   paridad como sistema de tolerancia a fallos en caso de que 2 o más discos   colapsen.   Una falla en un disco hará que el uso de los demás suba intensamente,   probablemente por muchas horas.
  • 21. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 21/93 ●7: Análisis de Hardware para soluciones avanzadas, Monitoreo sobre Gnu/Linux. 1. Análisis de Hardware – Discos Duros - SSDs SSD (Solid State Drive) son memorias FLASH que ofrecen una gran  velocidad de acceso pero a un costo por Gb muy alto en comparación  a otro tipo de unidades, dado a que sus capacidades de  almacenamiento son bastante reducidas son ideales para entornos de  alta demanda de lectura de datos. Son muy propensos a la corrupción por eso se deben buscar unidades que  cuenten con baterías de respaldo para minimizar el riesgo de perdida de  data en ellos. Como su longevidad depende del uso de escritura que se le de no son muy  convenientes para cache.
  • 22. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 22/93 ●7: Análisis de Hardware para soluciones avanzadas, Monitoreo sobre Gnu/Linux. 1. Análisis de Hardware – Discos Duros – El problema del Write-Back Cache Toda la data siempre se trabaja entre la RAM y el Procesador antes de bajarse a disco  y liberarlos para recibir y procesar otros datos. Como RAM y Procesador son extremadamente mucho más rápidos que los discos, el sistema  operativo almacena los datos en una espacio RAM del propio disco para luego grabarlos  realmente a los platos del disco, en situaciones extremas el disco demorará varios  minutos antes de completar la grabación. PostgreSQL incorpora WAL como mecanismo de protección contra corrupciones a los datos  antes de grabase en los repositorios de data final, en la practica sucede esto: /pg_xlog WAL Write Cache /base DATA Write Cache Disco RAM Si en este Instante se cae el servicio tenemos data corrupta Transacción Finalizada PGSQL Procesando Responde antes de grabar realmente al HD que ya se grabó la data al disco.Si PostgreSQL lo ve por conveniente graba cosas directamente a “base” sin pasar por “pg_xlog”
  • 23. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 23/93 ●7: Análisis de Hardware para soluciones avanzadas, Monitoreo sobre Gnu/Linux. 1. Análisis de Hardware – Discos Duros – El problema del Write-Back Cache Para evitar la posibilidad de perder datos es necesario  desactivar el Write Cache de  los discos duros. Para ver si tenemos el Write Cache activo hacemos esto: [root@host]# hdparm ­I /dev/sda | egrep "Write cache" <­­ /dev/sda es la unidad HD           *    Write cache                            <­­ si está activo aparece                                                           con “*” [root@host]# hdparm ­W 0 /dev/sda                     <­­ desactiva el write Cache /dev/sda:  setting drive write­caching to 0 (off)  write­caching =  1 (on)                              <­­ problema en CentOS, no se                                                            Puede desactivar el Write                                                           Cache En RAIDs ó SANs los Write Cache pueden ser de 128MB hasta 512MB, en discos SATA  generalmente están entre 8MB a 32MB, soluciones alternas son poder configurar el  tamaño del Write Cache del disco ó eventualmente comprar unidades de disco que tengan  baterías para casos de perdida de energía o Cache no volátil
  • 24. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 24/93 ●7: Análisis de Hardware para soluciones avanzadas, Monitoreo sobre Gnu/Linux. 1. Análisis de Hardware – Discos Duros – Limites de commits x segundo Según la tecnología de los discos vamos a obtener cantidad máxima de  commits que podemos hacer por segundo, estos dependerán de la velocidad de  rotación de los platos, mientras más rápida la rotación mayor será la  cantidad de commits que se podrán procesar. En un escenario básico, donde tenemos trabajando un disco duro, con el  write cache desactivado tendremos estas tasas de operaciones máximas por  segundo: 5400  RPM == 90  commit/segundo 7200  RPM == 120 commit/segundo 10000 RPM == 166 commit/segundo 15000 RPM == 250 commit/segundo Para exceder estas tasas de operaciones deberíamos tener un método de  cacheo de disco seguro.
  • 25. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 25/93 ●7: Análisis de Hardware para soluciones avanzadas, Monitoreo sobre Gnu/Linux. 1. Análisis de Hardware – Discos Duros – Sistema de Archivos En la actualidad casi todo sistema de archivos moderno es del tipo  ”Journaling”, es decir maneja un sistema de administración de las  escrituras en disco que pasa por varios entornos de  caché antes de llegar  a grabar la data a disco (esto no es write cache). Journaling sigue la misma idea del WAL de PostgreSQL, el uso de ambos  produce un mayor overhead en nuestro servidor. EXT3 era el sistema de archivos más utilizado anteriormente, en la  actualidad el mundo se está moviendo a EXT4 con muchas ventajas como por  ejemplo poder manejar sistemas de archivos mayores a 16TB. XFS es la otra alternativa viable a EXT3 si no se desea implementar EXT4,  es ligeramente más veloz que EXT3, JFS y ReiserFS ya no deben ser  considerados como opciones viables, se espera que a futuro Btrfs pueda  reemplazar a EXT4 (aún no es estable) y se considera muy adecuado para base  de datos (fue desarrollado por Oracle).
  • 26. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 26/93 ●7: Análisis de Hardware para soluciones avanzadas, Monitoreo sobre Gnu/Linux. 1. Análisis de Hardware – Discos Duros – Sistema de Archivos En el caso de sistemas tipo UNIX para bases de datos de altos volumenes de  datos ZFS (Solaris) es la opción más adecuada debido a que utiliza  paginación de 128Kb (pero puede ser configurado para ser menor) esto puede  generar que el sistema no responda eficientemente en caso de lectura y  escritura de datos pequeños. UFS (FreeBSD) presenta mejor rendimiento para bases de datos de poca data,  este sistema no eS Journaling lo que ocasiona una buena performance para  las escrituras, pero en caso de caidas del sistema el tiempo de  recuperación del sistema de archivos es mayor al de un sistema Journaling.
  • 27. 2. MONITOREO - TOP y HTOP TOP es un comando convencional de Linux / Unix que nos permite ver los procesos que se  ejecutan en el servidor. Los procesos ejecutados por PostgreSQL son normalmente ejecutados por los usuarios  “postgres”, “pgsql” ó “postmaster”. ernesto@depeche:~/aaa$ ps aux | egrep postgres postgres   961  0.0  0.1 101580  2228 ?        S    Oct08   0:06 /usr/lib/postgresql/8.4/bin/postgres ­D  /var/lib/postgresql/8.4/main ­c config_file=/etc/postgresql/8.4/main/postgresql.conf postgres   989  0.0  0.3 101704  6208 ?        Ss   Oct08   0:11 postgres: writer process                                 postgres   990  0.0  0.0 101580   568 ?        Ss   Oct08   0:08 postgres: wal writer process                             postgres   991  0.0  0.0 102380  1320 ?        Ss   Oct08   0:09 postgres: autovacuum launcher process                    postgres   992  0.0  0.0  73704   848 ?        Ss   Oct08   0:17 postgres: stats collector process                        Recuerde que PostgreSQL maneja un procesador por conexión, si tiene varios  procesadores un proceso lanzado no usará varios procesadores, solo uno, deja los otros  disponibles para otras conexiones que lanzan sus propios procesos, la ventaja del uso  de esta funcionalidad se complementa con la capacidad de administración de usuarios  concurrentes que tenga el sistema operativo que se está usando (que soporte SMP). Nunca mate un proceso que demora mucho  EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 27/93 ●7: Análisis de Hardware para soluciones avanzadas, Monitoreo sobre Gnu/Linux.
  • 28. 2. MONITOREO - PG_TOP http://ptop.projects.postgresql.org/ En CentOS 6 solo tenemos soporte de PG _TOP para PostgreSQL 9.0 en repositorios no  oficiales pero existe una manera de ejecutar este paquete para PostgreSQL 8.4. * Descargamos el paquete de esta dirección:   http://www.pgrpms.org/9.0/redhat/rhel­6­x86_64/    pg_top90­3.6.2­3.rhel6.x86_64.rpm    <­­ ubicar este paquete “ Instalamos el paquete forzando que no solicite dependencias   [root@host]# rpm ­ivh ­­nodeps /ruta/pg_top90­3.6.2­3.rhel6.x86_64.rpm    warning: /ruta/pg_top90­3.6.2­3.rhel6.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID 442df0f8:      NOKEY   Preparing...                ########################################### [100%]      1:pg_top90               ########################################### [100%] * Creamos la variable de entorno del sistema operativo con el password del usuario de   conexión al PostgreSQL , OjO, posible hueco en seguridad de la base de datos.   [root@host]# export  PGPASSWORD=dbadmin  <­­ aqui debe ir el password del usuario que se conectará                                                a la base de datos, generalmente es un superusuario                                                para que tenga la suficiente cantidad de permisos a                                                las estructuras internas del motor. * Ejecutamos PG_TOP   [root@host]# pg_top  ­U dbadmin ­d pruebas2 ­h 127.0.0.1 ●7: Análisis de Hardware para soluciones avanzadas, Monitoreo sobre Gnu/Linux. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 28/93
  • 29. 2. MONITOREO ­ PG_TOP ernesto@depeche:~/aaa$ pg_top ­­help pg_top: invalid option ­­ '­' pg_top version 3.6.2 Usage: pg_top [­ITWbcinqu] [­x x] [­s x] [­o field] [­z username]           [­p PORT] [­U USER] [­d DBNAME] [­h HOSTNAME] [number] ernesto@depeche:~/aaa$ pg_top ­U dbadmin ­d prueba5 En una consola: prueba5=# begin; prueba5=# lock alumnos in exclusive mode; En otra Consola: prueba5=# insert into alumnos values(5,'chicho',12,'nada'); Pg­Top nos muestra: ast pid: 29499;  load avg:  1.59,  1.59,  1.69;       up 1+03:48:24                                                        3 processes: 3 sleeping CPU states: 47.0% user,  2.6% nice,  8.8% system, 40.5% idle,  1.1% iowait Memory: 1920M used, 81M free, 26M buffers, 659M cached Swap: 375M used, 1532M free, 45M cached   PID USERNAME PRI NICE  SIZE   RES STATE   TIME   WCPU    CPU COMMAND 29500 postgres  20    0  102M 4232K sleep   0:00  0.02%  0.20% postgres: dbadmin prueba5 [local] idle                     29215 postgres  20    0  102M 5048K sleep   0:00  0.00%  0.00% postgres: dbadmin prueba5 [local] idle in transaction      29396 postgres  20    0  102M 3628K sleep   0:00  0.00%  0.00% postgres: dbadmin prueba5 [local] INSERT waiting    ●7: Análisis de Hardware para soluciones avanzadas, Monitoreo sobre Gnu/Linux. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 29/93
  • 30. 2. MONITOREO - PG_TOP A     <­­ permite ver el plan de ejecución de un query, especifique el PID del proceso C     <­­ activa/desactiva color c     <­­ permite ver la linea de comandos completa D     <­­ cambia página de listado h ó ? <­­ help E     <­­ ver versión actualizada del plan de ejecución e     <­­ permite ver errores del sistema I     <­­ ver/no ver procesos en espera o durmiendo K     <­­ mata un proceso, indicar el pid L     <­­ permite ver los locs del proceso, especificar el pid M     <­­ ordena por uso de memoria N     <­­ ordena por número de proceso n ó # <­­indica cuantos procesos se pueden ver, máximo 65 O     <­­ cambia el orden de muestra dependiendo un parámetro especial ("cpu", "res", "size", "time",           "seq_scan", "seq_tup_read",  "idx_scan",  "idx_tup_fetch",  "n_tup_ins","n_tup_upd", "n_tup_del") P     <­­ ordena por utilización del proceso Q     <­­ muestra el query, especificar el pid q     <­­ Quit R     <­­ Display user table statistics. r     <­­ ?? s     <­­ cambia la cantidad de segundos de refresco de la pantalla T     <­­ ordena por tiempo de ejecución T     <­­ ?? U     <­­ muestra los procesos de un usuario, ingresar el usuario  X     <­­ muestra las estadísticas de los índices EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 30/93 ●7: Análisis de Hardware para soluciones avanzadas, Monitoreo sobre Gnu/Linux.
  • 31. 2. MONITOREO - VMSTAT En un servidor podemos determinar si nuestra base de datos esta saturada,  pero otro elemento a revisar es si todo nuestro sistema esta saturado, es  posible que la base de datos este respondiendo mal no por un problema de  sobrecarga en ella sino porque el sistema llego a su tope. [root@host]# vmstat procs ­­­­­­­­­­­memory­­­­­­­­­­ ­­­swap­­ ­­­­­io­­­­ ­­system­­ ­­­­­cpu­­­­­  r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st  0  0      0 783628  42440 609340    0    0    49    22  322  462  6  1 91  2  0 * “swap”, en la columna “so” indica la actividad de la paginación y de la    paginación de memoria al disco, números elevados es un indicativo de que    nos estamos quedando sisn RAM y que se está moviendo mucha información    hacia el disco, con “si” vemos la cantidad de memoria subida del swap    hacia la ram. * “procs” es el estado de los procesos, en la columna “r” están los    procesos que están esperando ser atendidos por el procesador y “b”     Presenta los que están en ejecución. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 31/93 ●7: Análisis de Hardware para soluciones avanzadas, Monitoreo sobre Gnu/Linux.
  • 32. 2. MONITOREO - VMSTAT [root@host]# vmstat procs ­­­­­­­­­­­memory­­­­­­­­­­ ­­­swap­­ ­­­­­io­­­­ ­­system­­ ­­­­­cpu­­­­­  r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st  0  0      0 783628  42440 609340    0    0    49    22  322  462  6  1 91  2  0 * “memory” indica el estado de la memoria, en la columna “free” tenemos la    memoria libre, en “swpd” es la cantidad de swap utilizada, mientras que    “buff” y “cache” es la cantidad de memoria reservada. * “cpu” muestra el estado del procesador en tiempo de utilización, “us” %    de tiempo de uso por usuario, “sy” % de tiempo de uso de sistema,”id” %     de tiempo inactivo, “wa” % de tiempo en espera, si “wa” es un número    alto entonces estamos requiriendo de procesadores más potentes.    “st” es el porcentaje de tiempo utilizado por máquinas virtuales. * “io” muestra información del I/O hacia dispositivo, “si” bloques enviados   Y “so” bloques recibidos. * “system” son las interrupciónes por segundo. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 32/93 ●7: Análisis de Hardware para soluciones avanzadas, Monitoreo sobre Gnu/Linux.
  • 33. 2. MONITOREO - IOSTAT IOSTAT nos permite monitorizar el uso de los discos duros de nuestro  servidor. [root@host]# iostat ­k Linux 2.6.32­71.el6.x86_64 (host.dominio) 05/21/2011  _x86_64_ (2 CPU) avg­cpu:  %user   %nice %system %iowait  %steal   %idle            6.32    0.00    1.36    1.56    0.00   90.76 Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn sda               5.58        71.51        40.52     496736     281500 * %iowait es el parámetro que principalmente deberíamos controlar, un   número alto significa que tenemos una saturación en el uso de los   dispositivos de almacenamiento y que debemos empezar a buscar   alternativas de almacenamiento. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 33/93 ●7: Análisis de Hardware para soluciones avanzadas, Monitoreo sobre Gnu/Linux.
  • 34. 2. MONITOREO - IOTOP Nos permite ver el consumo de uso de disco de los procesos que se ejecutan  en el sistema. [root@host]# yum install iotop [root@host]# iotop Total DISK READ: 0.00 B/s | Total DISK WRITE: 0.00 B/s   TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND                                            1 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % init     2 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kthreadd]     3 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/0]     4 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ksoftirqd/0]     5 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [watchdog/0]     6 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/1]     7 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ksoftirqd/1]     8 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [watchdog/1]     9 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [events/0]    10 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [events/1]    11 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [cpuset] Presionando “o” vemos los procesos que en ese instante están haciendo uso  de disco y no todos los procesos. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 34/93 ●7: Análisis de Hardware para soluciones avanzadas, Monitoreo sobre Gnu/Linux.
  • 35. ●8: Configuración Avanzada y Problemas Comunes 1. Configuración Avanzada - Afinando Postgresql PostgreSQL y Gnu/Linux están muy integrados, un Sistema Operativo muy bien afinado dará como resultado un excelente rendimiento de la base de datos, sin embargo es posible configurar ciertos atributos del motor de la base de datos para optimizarla para diferentes escenarios. Toda la configuración de PostgreSQL se realiza en el archivo “postgresql.conf” y cualquier cambio para que se active requerirá que se reinicie el servicio, en algunos casos bastará con hacer un reload. [root@host]service postgresql restart <-- baja el servicio totalmente y lo vuelve a iniciar. [root@host]service postgresql reload <-- el servicio no se baja, conexiones pueden seguir siendo aceptadas pero aparecerán con un rendimiento lento durante el periodo de tiempo que tome recargar el servicio, este tiempo dependerá de la concurrencia de usuarios cuando se haya ejecutado el Reload. Otra forma de recargar las configuraciones modificadas en postgresql.conf es ejecutar este comando desde dentro de la base de datos. template1=# select pg_reload_conf(); pg_reload_conf ---------------- t EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 35/93
  • 36. ●8: Configuración Avanzada y Problemas Comunes 1. Configuración Avanzada - Afinando Postgresql Para ver las configuraciones del sistema sin aperturar el archivo postgresql.conf tenemos una vista que puede ser invocada y que se llama pg_settings. postgres=# d pg_settings Vista «pg_catalog.pg_settings» Columna | Tipo | Modificadores ------------+---------+--------------- name | text | setting | text | unit | text | category | text | short_desc | text | extra_desc | text | context | text | vartype | text | source | text | min_val | text | max_val | text | enumvals | text[] | boot_val | text | reset_val | text | sourcefile | text | sourceline | integer | Definición de vista: SELECT a.name, a.setting, a.unit, a.category, a.short_desc, a.extra_desc, a.context, a.vartype, a.source, a.min_val, a.max_val, a.enumvals, a.boot_val, a.reset_val, a.sourcefile, a.sourceline FROM pg_show_all_settings() a(name, setting, unit, category, short_desc, extra_desc, context, vartype, source, min_val, max_val, enumvals, boot_val, reset_val, sourcefile, sourceline); EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 36/93
  • 37. ●8: Configuración Avanzada y Problemas Comunes 1. Configuración Avanzada - Afinando Postgresql template1=# show block_size; <-- usamos SHOW para ver el valor de un solo parámetro block_size ------------ 8192 (1 fila) EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 37/93
  • 38. ●8: Configuración Avanzada y Problemas Comunes 1. Configuración Avanzada - Afinando Postgresql a)SHARED_BUFFERS El SHARED BUFFER es en si el área de intercambio de lectura y escritura de datos desde y hacia la base de datos. El correr el INITDB el PostgreSQL detecta la cantidad de memoria del servidor y calcula esta valor, el problema es que asume que no deseas dar prioridad a la base de datos y coloca un valor muy bajo, 32mb o 24mb. Los valores razonables deberían estar entre 25% a 40% del monto total de RAM, algunos expertos recomiendan que el 10% es más que necesario, pero en realidad dependerá del uso que le demos a la base de datos y que tan pesadas sean nuestras consultas, Aumentar el valor de SHARED_BUFFER llevará generalmente a un aumento de su equivalente en el sistema operativo Por ejemplo en este caso deseamos subir nuestro SHARED_BUFFER a 400mb shared_buffers = 400MB Acto seguido debemos configurar nuestro sistema operativo antes de que este nuevo valor pueda ser usado, sino tendremos un error del sistema, lo mejor es bajar la base de datos cuando se modifique este parámetro. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 38/93
  • 39. ●8: Configuración Avanzada y Problemas Comunes 1. Configuración Avanzada - Afinando Postgresql a)SHARED_BUFFERS - SHMMAX Gnu/Linux por defecto levanta áreas de intercambio de datos en buffer de ram para cada aplicación que se esté ejecutando, por defecto los valores suelen ser pequeños por lo cual aumentar el SHARED_BUFFERS en el PostgreSQL hace que aumentemos el valor en el Gnu/Linux, tomar en cuenta que poner valores muy altos hará que si levantamos muchos servicios la RAM podría quedarnos corta, por lo cual no es buena idea levantar muchos servicios en un solo servidor. Modificar /etc/sysctl.conf Calculamos el nuevo valor de shmmax: 400mb x 1024kb = 409600 <-- cantidad de kb a utilizar por el buffer 409600 / 8 = 51200 <-- cantidad de páginas a utilizar por el buffer 51200 x 8192b = 419430400 <-- cantidad mínima de ram en bytes que se debe configurar debe considerarse que hay otras aplicaciones que hacen uso de esta cantidad de ram asignada. Abrimos el archivo “/etc/sysctl.conf” y añadimos: kernel.shmmax = 421527552 <-- añadimos un par de megas más para asegurarnos que no Nos faltará ram. Es necesario luego reiniciar el sistema operativo. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 39/93
  • 40. ●8: Configuración Avanzada y Problemas Comunes 1. Configuración Avanzada - Afinando Postgresql b)KERNEL SEMAPHORES Los semáforos son objetos usados para procesar comunicaciones. [root@host]# ipcs -l <-- para ver la configuración de los semáforos actual del sistema. ---- Límites memoria compartida ---- max number of segments = 4096 max seg size (kbytes) = 32768 max total shared memory (kbytes) = 8388608 tamaño mín. segmento (bytes) = 1 ------ Límites semáforo -------- número máximo de matrices = 128 máx. semáforos por matriz = 250 máx. semáforos sistema = 32000 máx. oper. por llamada semop = 32 valor máx. semáforo = 32767 ------ Mensajes: límites ------- máx. colas sistema = 7660 tamaño máx. mensaje (bytes) = 8192 tamaño máx. predeterminado cola (bytes) = 16384 EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 40/93
  • 41. ●8: Configuración Avanzada y Problemas Comunes 1. Configuración Avanzada - Afinando Postgresql b)KERNEL SEMAPHORES PostgreSQL usa un total de 16+1 semáforos por cada conexión activa, 16 son de uso real y uno de control, mientras más conexiones requeriremos en nuestra base de datos más semáforos deberíamos tener disponibles para esto. Para modificar los semáforos editamos el archivo /etc/sysctl.conf número máximo de matrices = 128 <-- SEMMNI = (conexiones + procesos autovacumm) / 16 redondeado hacia arriba máx. semáforos por matriz = 250 <-- SEMMSL = como mínimo debería ser 17 máx. semáforos sistema = 32000 <-- SEMMNS = SEMMNI * SEMMSL máx. oper. por llamada semop = 32 valor máx. Semáforo = 32767 <-- SEMVMX no es necesario cambiarlo generalmente Para activar los nuevos valores requerirá reiniciar el sistema operativo. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 41/93
  • 42. ●8: Configuración Avanzada y Problemas Comunes 1. Configuración Avanzada - Afinando Postgresql c)CHECKPOINTS Un CHECKPOINT es un área de almacenamiento de datos donde se almacena la información que está lista para bajarse al repositorio de datos final, esto se hace para asegurar que ante caídas del sistema el repositorio principal no se corrompa. checkpoint_segments = 3 <-- cada segmento es de 16MB, 3 segmentos significa que tenemos 48MB de historia de procesos almacenados para reconstruir la información en caso de Desastres, más segmentos hará un sistema mas seguro Pero con un overhead mayor. checkpoint_timeout = 5min <-- tiempo máximo que el checkpoint podrá estar sin ser Pasado al repositorio principal. checkpoint_warning = 30s <-- lanza un mensaje al sistema indicando que se están Sucediendo checkpoints demasiado rápido en frecuencia de creación, es decir que se genera un checkpoint en menos de 30s nos alertará EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 42/93
  • 43. 1. Configuración Avanzada - Afinando Postgresql d)WORK_MEM work_mem es el espacio de memoria que se usará para los ordenamientos de los datos cuando se ejecutan consultas, no existe una formula exacta de cálculo dependerá de que tanta data se mueva en las consultas que ejecutamos y cual es la concurrencia de ejecución de las consultas, por defecto el valor es muy bajo, solo 1MB. La regla dice, si las consultas se ejecutan con poca concurrencia entonces asignar entre 2% a 4% de la ram disponible será ideal, pero si la concurrencia es alta entonces debe asignarse menos memoria debido a que cada consulta consume la misma cantidad de ram. work_men = 163MB <-- 4% de 4gb (redondeado) EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 43/93 ●8: Configuración Avanzada y Problemas Comunes
  • 44. 1. Configuración Avanzada - Afinando Postgresql e)WAL WAL (Write-Ahead Log) son páginas de datos que se generan para trabajar los datos en un área reservada antes de pasar al repositorio principal de datos, cuando un WAL culmina su labor se le cambia el identificador y se convierte en un CHECKPOINT y de ahí recién pasa en ciertos intervalos de tiempo al repositorio principal. WAL_BUFFERS = 8 <-- es el valor por defecto, significa que tiene 8 * Longitud de página disponibles (el mínimo de una página de 8k hasta 32k), debería ser tan grande como lo necesiten nuestras transacciones más comunes. wal_buffers = 64KB <-- podemos especificar el valor indicando una cantidad de KB pero tomar En cuenta el peso de las páginas en KB. wal_writer_delay = 200ms <-- lapso de tiempo en que el WAL realizará escrituras hacía disco después de informado por el “cliente” que la transacción ha concluido, un número muy bajo causará un incremento de overhead en los discos. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 44/93 ●8: Configuración Avanzada y Problemas Comunes
  • 45. 1. Configuración Avanzada - Afinando Postgresql f)temp_buffers Es la cantidad de memoria que tendrá asignada cada conexión al dbms para manejo de tablas temporales, esta no se libera hasta que la sesión muera, cada sesión podría manejar un tamaño diferente y mayor al de default (8mb) pero solo hasta antes de generar la primera tabla temporal. g)max_locks_per_transaction Permite indicar cuantos objetos se pueden bloquear en una transacción, un registro no se considera un objeto, el default es 64 solo valdría la pena subirlo si es que tenemos transacciones que bloquean muchos más objetos únicos (tablas) que este valor, obviamente el consumo de memoria crecerá. h)max_connections Determina cuantas conexiones soportará el dbms, subirlo significará un consumo de recursos adicional en el OS (sistema operativo), y en realidad no servirá de mucho si es que el OS no soporta esta carga de trabajo. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 45/93 ●8: Configuración Avanzada y Problemas Comunes
  • 46. 1. Configuración Avanzada - Afinando Postgresql i)random_page_cost Determina en que momento se van a utilizar índices ó búsquedas secuenciales, el valor por defecto es 4, se recomienda aumentarlo para discos lentos y bajarlo para discos rápidos. Considere que los índices son efectivos si la variedad de datos es alta, si es baja entonces es probable que aunque se mueva la configuración se ejecuten búsquedas secuenciales. j)effective_cache_size Setea el tamaño de cache en RAM que se usará en una consulta, el valor por defecto es 128Mb, un valor alto facilitará el uso de índices, un valor bajo hará que se prefiera el uso de búsquedas secuenciales, se recomienda como máximo 50% del total de la RAM. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 46/93 ●8: Configuración Avanzada y Problemas Comunes
  • 47. 1. Configuración Avanzada - Afinando Postgresql h)statement_timeout Configura cuanto tiempo puede demorar un query en ejecutarse, evita que se lancen querys extremadamente pesados que demoren mucho tiempo en ejecutarse, por defecto es 0 (desactivado) pero se expresa en milisegundos, OjO configurarlo afectará todos los querys. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 47/93 ●8: Configuración Avanzada y Problemas Comunes
  • 48. 1. Configuración Avanzada - Automatizando tareas con CRON PostgreSQL utiliza el sistema de automatización de tareas de Gnu/Linux para automatizar tareas rutinarias como por ejemplo las de mantenimiento. CRON es el demonio más utilizado, cualquier usuario puede eventualmente crear una tarea automatizada, en este caso utilizaremos el usuario “postgres” del sistema operativo para nuestras tareas que afectan directamente a las bases de datos. En CentOS el editor por defecto es VI pero como es algo complicado de usar utilizaremos NANO, para ello exportamos la variable “EDITOR” de Gnu/Linux [root@host] su – postgres [postgres@host] export EDITOR=nano [postgres@host] crontab -e <-- entramos al editor del cron 0-59 * * * * echo "hola" >> /var/lib/pgsql/file.txt <-- grabar la palabra “hola” y la hora 0-59 * * * * date >> /var/lib/pgsql/file.txt cada minuto en el archivo file.txt [root@host] service cron restart <-- es necesario reiniciar el demonio del “cron” cada Vez que se cambie una configuración EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 48/93 ●8: Configuración Avanzada y Problemas Comunes
  • 49. 1. Configuración Avanzada - Automatizando tareas con CRON Los rangos de tiempo se presentan así: * * * * * COMANDO M H D MO DS M = minuto H = hora en formato de 0-23 D = día en formato de 1-31 (deben especificarse días válidos) MO = mes en formato 1-12 DS = día de la semana en formato 0-7 donde 0 ó 7 es domingo COMANDO = comando del sistema operativo que debe ejecutarse 1 * * * * COMANDO <-- ejecutará el comando al minuto 1 de cada hora 0-59 * * * * COMANDO <-- ejecutará el comando cada minuto 0-59/2 * * * * COMANDO <-- ejecutará el comando cada 2 minutos 5 2 * * * COMANDO <-- ejecutará el comando al minuto 5 de la hora 2 de cada día 5 2 20 * * COMANDO <-- ejecutará el comando al minuto 5 de la hora 2 de cada día 20 del mes 1 * * 1 * COMANDO <-- ejecutará el comando al minuto 1 de todos los Enero 1 * * 1-12/4 * COMANDO <-- ejecutará el comando al minuto 1 de cada 3er mes 1 * * * 1 COMANDO <-- ejecutará el comando al minuto 1 de todos los Lunes EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 49/93 ●8: Configuración Avanzada y Problemas Comunes
  • 50. 1. Configuración Avanzada - Automatizando tareas con CRON El COMANDO puede ser un archivo aparte que pueda ser interpretado por el PSQL, debe  verificar que se cuente con el acceso pertinente para ejecutar los querys que este  archivo aparte va a ejecutar, por ello es lo mejor ejecutar el CRON como usuario  POSTGRES. [postgres@host] crontab ­e   * * * * * /var/lib/pgsql/cron.sh Creamos un archivo cron.sh (o cualquier nombre) y le asignamos permisos de ejecución. [postgres@host]touch cron.sh [postgres@host]chmod +x cron.sh [postgres@host]mcedit cron.sh   #!/bin/sh   # Programa en bash script de ejemplo de un CRON para PostgreSQL   echo "Se inicia el log" >> file.txt   date >> file.txt   echo "Ejecuta un query con salida al log"   export PGPASSWORD=dbadmin   psql prueba ­c "select * from tablita limit 5"  ­U dbadmin  >> file.txt   echo "Inicia un proceso de backup"   FECHA=$(date)   pg_dump prueba > $FECHA.dump ­U dbadmin   echo "Backup finalizado, proceso concluido $FECHA" >> file.txt   EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 50/93 ●8: Configuración Avanzada y Problemas Comunes
  • 51. 2. Problemas comunes – Bloqueos El comando LOCK nos permite bloquear una tabla. prueba=# begin; BEGIN prueba=# lock tbl_transaccion in exclusive mode; LOCK TABLE En otra consola intentar esto: prueba=# update tbl_transaccion set id = id * 2; <-- no culmina se queda en espera En la consola anterior hacer “commit” y el update culminará. Sin embargo si hacemos un “select” a esa tabla en otra consola la información procesará sin ningún problema, los niveles de bloqueo permiten ejecutar cierto tipo de operaciones. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 51/93 ●8: Configuración Avanzada y Problemas Comunes
  • 52. 2. Problemas comunes – Bloqueos Tipos de LOCK: ●ACCESS SHARE ●ROW SHARE ●ROW EXCLUSIVE ●SHARE UPDATE EXCLUSIVE ●SHARE ●SHARE ROW EXCLUSIVE ●EXCLUSIVE ●ACCESS EXCLUSIVE http://www.postgresql.org/docs/9.0/interactive/explicit-locking.html Hay que se cuidadoso con este comando, todas las operaciones a una DB ejecutan algún tipo de lock pre-definido y entre ellos pueden llegar a colisionar Para ver los locks: prueba=# select * from pg_locks; locktype | database | relation | page | tuple | virtualxid | transactionid | classid | objid | objsubid | virtualtransaction | pid | mode | granted ------------+----------+----------+------+-------+------------+---------------+---------+-------+----------+--------------------+-------+-----------------+--------- relation | 22073 | 10969 | | | | | | | | 2/6239 | 17247 | AccessShareLock | t relation | 22073 | 22183 | | | | | | | | 1/439 | 2498 | ExclusiveLock | t virtualxid | | | | | 1/439 | | | | | 1/439 | 2498 | ExclusiveLock | t virtualxid | | | | | 2/6239 | | | | | 2/6239 | 17247 | ExclusiveLock | t EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 52/93 ●8: Configuración Avanzada y Problemas Comunes
  • 53. 2. Problemas comunes – Bloqueos Para ver los querys que están ejecutando los locks: SELECT waiting.locktype AS waiting_locktype, waiting.relation::regclass AS waiting_table, waiting_stm.current_query AS waiting_query, waiting.mode AS waiting_mode, waiting.pid AS waiting_pid, other.locktype AS other_locktype, other.relation::regclass AS other_table, other_stm.current_query AS other_query, other.mode AS other_mode, other.pid AS other_pid, other.granted AS other_granted FROM pg_catalog.pg_locks AS waiting JOIN pg_catalog.pg_stat_activity AS waiting_stm ON ( waiting_stm.procpid = waiting.pid ) JOIN pg_catalog.pg_locks AS other ON ((waiting."database" = other."database" AND waiting.relation = other.relation) OR waiting.transactionid = other.transactionid ) JOIN pg_catalog.pg_stat_activity AS other_stm ON (other_stm.procpid = other.pid) WHERE NOT waiting.granted AND waiting.pid <> other.pid waiting_locktype | waiting_table | waiting_query | waiting_mode | waiting_pid | other_locktype | other_table | other_query | other_mode | other_pid | other_granted ------------------+-----------------+-----------------------------------------+------------------+-------------+----------------+----------------- +-----------------------+------------------+-----------+--------------- relation | tbl_transaccion | update tbl_transaccion set id = id * 4; | RowExclusiveLock | 17741 | relation | tbl_transaccion | <IDLE> in transaction | RowExclusiveLock | 2498 | t relation | tbl_transaccion | update tbl_transaccion set id = id * 4; | RowExclusiveLock | 17741 | relation | tbl_transaccion | <IDLE> in transaction | ExclusiveLock | 2498 | t EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 53/93 ●8: Configuración Avanzada y Problemas Comunes
  • 54. 2. Problemas comunes – Bloqueos Dado que PostgreSQL es una base de datos que soporta concurrencia entonces es posible que un dato al momento de ser consultado este siendo borrado ó modificado por otro usuario en otra transacción, para determinar en una consulta si los datos que estamos usando están siendo afectados por otro usuario tenemos los valores de xmin y xmax, cuando xmax está en blanco quiere decir que el dato no está siendo afectado por otra transacción, cuando xmin y xmax tienen el mismo valor entonces el dato o fue modificado o fue borrado por otra transacción. prueba=# select *, xmin,xmax from tablita; id | xmin | xmax ----+------+------ 1 | 661 | 0 3 | 661 | 0 5 | 661 | 0 7 | 661 | 0 prueba=# select *, xmin,xmax from tablita; id | xmin | xmax ----+------+------ 1 | 661 | 0 3 | 661 | 661 <--- el dato fue borrado o modificado 5 | 661 | 0 7 | 661 | 0 EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 54/93 ●8: Configuración Avanzada y Problemas Comunes
  • 55. 2. Problemas comunes – Bloqueos Una manera sencilla de determinar cuantas conexiones tenemos vivas, y que están haciendo es consultar la tabla pg_stat_activity prueba=# select datname, usename, current_query, query_start from pg_stat_activity; datname | usename | current_query | query_start ---------+---------+---------------------------------------------------------------------------- +------------------------------- prueba | dbadmin | select datname, usename, current_query, query_start from pg_stat_activity; | 2011-10-01 12:25:09.482213-05 Para ver el tiempo de ejecución de un query solo necesitas restar el current_timestamp – el menor tiempo entre query_start y xact_start. prueba=# select datname, usename, substr(current_query,1,15), query_start, xact_start, current_timestamp - least(query_start, xact_start) as runtime from pg_stat_activity; datname | usename | substr | query_start | xact_start | runtime ---------+---------+-----------------+------------------------------- +-------------------------------+---------- prueba | dbadmin | select datname, | 2011-10-01 12:29:14.000863-05 | 2011-10-01 12:29:14.000863-05 | 00:00:00 EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 55/93 ●8: Configuración Avanzada y Problemas Comunes
  • 56. 2. Problemas comunes – Controlando el espacio ocupado por las tablas d+ Nos muestra en psql el consumo de espacio por cada tabla dentro de una DB, recuerde que es necesario ejecutar VACUMM FULL con cierta periodicidad para no ocupar espacio útil del servidor con data inútil. prueba=# d+ Listado de relaciones Esquema | Nombre | Tipo | Dueño | Tamaño | Descripción ---------+---------+-------+---------+------------+------------- public | tablita | tabla | dbadmin | 9280 kB | prueba=# delete from tablita where id = 3; DELETE 32768 prueba=# d+ Listado de relaciones Esquema | Nombre | Tipo | Dueño | Tamaño | Descripción ---------+---------+-------+---------+------------+------------- public | tablita | tabla | dbadmin | 9280 kB | prueba=# VACUUM FULL tablita; VACUUM prueba=# d+ Listado de relaciones Esquema | Nombre | Tipo | Dueño | Tamaño | Descripción ---------+---------+-------+---------+------------+------------- public | tablita | tabla | dbadmin | 8120 kB | EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 56/93 ●8: Configuración Avanzada y Problemas Comunes
  • 57. 2. Problemas comunes – Controlando el espacio ocupado por las bases de datos Las bases de datos presentan el mismo comportamiento de las tablas, una manera de conocer el tamaño de estas desde psql es: prueba=# select datname, pg_database_size(datname) from pg_database;   datname  | pg_database_size  ­­­­­­­­­­­+­­­­­­­­­­­­­­­­­­  template1 |          5642000  template0 |          5537796  postgres  |          5642000  prueba    |         72218384  prueba2   |          5537796 (5 filas) EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 57/93 ●8: Configuración Avanzada y Problemas Comunes
  • 58. 2. Problemas comunes – Detectando tablas que requieren VACUUM Una manera de detectar si una tabla requiere un VACUUM con urgencia es comparar la desviación entre las filas que almacena su estadística y las filas físicas que realmente existen, esto se puede controlar así. prueba=# SELECT (CASE WHEN reltuples > 0 THEN prueba(# pg_relation_size('tablita')/(8192*relpages/reltuples) prueba(# ELSE 0 prueba(# END)::bigint AS estimated_row_count prueba-# FROM pg_class prueba-# WHERE oid = 'tablita'::regclass; estimated_row_count --------------------- 1835040 prueba=# select count(*) from tablita; count --------- 1835040 prueba=# delete from tablita where id = 5; DELETE 262144 prueba=# select count(*) from tablita; count --------- 1572896 EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 58/93 ●8: Configuración Avanzada y Problemas Comunes
  • 59. 2. Problemas comunes – Detectando tablas que requieren VACUUM Una manera de detectar si una tabla requiere un VACUUM con urgencia es comparar la desviación entre las filas que almacena su estadística y las filas físicas que realmente existen, esto se puede controlar así. prueba=# select count(*) from tablita; count --------- 1572896 prueba=# SELECT (CASE WHEN reltuples > 0 THEN pg_relation_size('tablita')/(8192*relpages/reltuples) ELSE 0 END)::bigint AS estimated_row_count FROM pg_class WHERE oid = 'tablita'::regclass; estimated_row_count --------------------- 1835040 prueba=# VACUUM full tablita; VACUUM prueba=# SELECT (CASE WHEN reltuples > 0 THEN pg_relation_size('tablita')/(8192*relpages/reltuples) ELSE 0 END)::bigint AS estimated_row_count FROM pg_class WHERE oid = 'tablita'::regclass; estimated_row_count --------------------- 1572896 EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 59/93 ●8: Configuración Avanzada y Problemas Comunes
  • 60. 2. Problemas comunes – Análisis de Querys TIMING, permite visualizar el tiempo de ejecución de un query. prueba=# timing El despliegue de duración está activado. prueba=# select sum(id) from tablita;  sum  ­­­­­   80 (1 fila) Duración: 35,951 ms prueba=# explain analyze select sum(id) from tablita;                                                 QUERY PLAN                                            ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­  Aggregate  (cost=40.00..40.01 rows=1 width=4) (actual time=0.040..0.041 rows=1 loops=1)    ­>  Seq Scan on tablita  (cost=0.00..34.00 rows=2400 width=4) (actual time=0.007..0.018 rows=8  loops=1)  Total runtime: 0.103 ms (3 filas) Duración: 26,842 ms Como se puede ver el tiempo de ejecución real de un query y el tiempo de realmente la  base de datos podría ejecutar la resolución del query. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 60/93 ●8: Configuración Avanzada y Problemas Comunes
  • 61. 2. Problemas comunes – Análisis de Querys Explain permite visualizar el plan de ejecución de un query, el plan de  ejecución son los pasos que sigue la dmbs para procesar la consulta, tabla  por tabla con la que trabaja, las uniones, tipos de índices que utiliza,  tuplas movidas, etc. prueba4=# explain select * from regla;                        QUERY PLAN                         ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­  Seq Scan on regla  (cost=0.00..18.00 rows=800 width=72) (1 row) EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 61/93 ●8: Configuración Avanzada y Problemas Comunes
  • 62. 2. Problemas comunes – Análisis de Querys Para ver los comandos usados y los tiempos de respuesta prueba4=# explain analyze select * from regla;                                              QUERY PLAN                                              ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­  Seq Scan on regla  (cost=0.00..18.00 rows=800 width=72) (actual time=0.012..0.016 rows=2 loops=1)  Total runtime: 0.070 ms (2 rows) Informa los campos requeridos en la consulta prueba4=# explain verbose select * from regla;                                    QUERY PLAN                            ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­  Seq Scan on public.regla  (cost=0.00..18.00 rows=800 width=72)    Output: id, nombre (2 rows) prueba4=# explain analyze verbose select * from regla;                                                 QUERY PLAN                                                 ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­  Seq Scan on public.regla  (cost=0.00..18.00 rows=800 width=72) (actual time=0.010..0.013 rows=2 loops=1)    Output: id, nombre  Total runtime: 0.050 ms (3 rows) EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 62/93 ●8: Configuración Avanzada y Problemas Comunes
  • 63. 2. Problemas comunes – Análisis de Querys Los Explain siempre se deben leer de “adentro hacia afuera”. prueba4=# explain select * from factura_cab a  join factura_det b on a.id =b.fac_id;                                   QUERY PLAN                                   ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­  Merge Join  (cost=260.93..525.73 rows=17120 width=29)    Merge Cond: (b.fac_id = a.id)    ­>  Sort  (cost=111.15..115.15 rows=1600 width=21)          Sort Key: b.fac_id          ­>  Seq Scan on factura_det b  (cost=0.00..26.00 rows=1600 width=21)    ­>  Sort  (cost=149.78..155.13 rows=2140 width=8)          Sort Key: a.id          ­>  Seq Scan on factura_cab a  (cost=0.00..31.40 rows=2140 width=8) (8 rows) El primer explain fue hecho sin hacer un VACUMM a las tablas, en el segundo se  procedió a ello, nótese las diferencia en las cifras, esto se debe a las estadísticas. prueba4=# explain select * from factura_cab a  join factura_det b on a.id =b.fac_id;                                QUERY PLAN                                 ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­  Hash Join  (cost=1.07..2.16 rows=4 width=25)    Hash Cond: (b.fac_id = a.id)    ­>  Seq Scan on factura_det b  (cost=0.00..1.04 rows=4 width=17)    ­>  Hash  (cost=1.03..1.03 rows=3 width=8)          ­>  Seq Scan on factura_cab a  (cost=0.00..1.03 rows=3 width=8) (5 rows) EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 63/93 ●8: Configuración Avanzada y Problemas Comunes
  • 64. 2. Problemas comunes – Análisis de Querys Para determinar si un índice debe ser utilizado, PostgreSQL debe tener estadísticas  sobre la tabla. Estas estadísticas se recolectan mediante VACUUM ANALYZE, o  simplemente ANALYZE. Usando las estadísticas, el optimizador sabe cuántas son las  filas en la tabla, y puede determinar mejor si los índices deben utilizarse. Las  estadísticas son también valiosas en la determinación de un orden óptimo y métodos de  unión. La recolección de Estadísticas debe ser realiza periódicamente como el cambio  de contenido de la tabla. El costo: (cost=149.78..155.13 rows=2140 width=8) 149.78    <­­ costo inicial de traer la primera tupla 155.13    <­­ costo total estimado Rows=2140 <­­ filas escaneadas Width=8   <­­ filas de salida El costo total estimado se calcula sobre la siguiente formula  (disk pages read * seq_page_cost) + (rows scanned * cpu_tuple_cost) seq_page_cost  <­­ costo de acceso a las páginas de la data            (1.00 default) cpu_tuple_cost <­­ costo del proceso de cada fila durante la consultas (0.01 default) EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 64/93 ●8: Configuración Avanzada y Problemas Comunes
  • 65. 2. Problemas comunes – Análisis de Querys El tiempo: (actual time=0.007..0.018 rows=8 loops=1) 0.007     <­­ tiempo de espera inicial que toma para empezar a procesar el query 0.018     <­­ tiempo total en segundos que le toma procesar la consulta Rows=8    <­­ filas esperadas de retorno, una diferencia entre este y los ROWS del               COST indican un posible problema en el optimizador interno de                PostgreSQL para resolver la consulta. loops=1   <­­ En algunos casos, especialmente en JOINs es necesario ejecutar la                consulta varias veces, los tiempos y ROWs deben ser multiplicados por               el número de LOOPs para tener los totales reales. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 65/93 ●8: Configuración Avanzada y Problemas Comunes
  • 66. 2. Problemas comunes – Análisis de Querys Seq Scan on factura_cab a  (cost=0.00..1.03 rows=3 width=8) Seq Scan          <­­ indica que esta llevando a cabo una busqueda secuencial en la                       tabla, bien porque no existe un índice o bien porque no la                       necesita. on factura_cab a  <­­ nos indica que esta buscando sobre la tabla “factura” con                        alias “a”. Hash  (cost=1.03..1.03 rows=3 width=8) Hash              <­­ significa que esta creando un mapa de datos e índices con el                        Fin de facilitar búsquedas Sort  (cost=149.78..155.13 rows=2140 width=8)          Sort Key: a.id SORT KEY          <­­ nos índica por que campo esta realizando un ordenamiento y                        Posteriormente el costo del ordenamiento EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 66/93 ●8: Configuración Avanzada y Problemas Comunes
  • 67. 2. Problemas comunes – Análisis de Querys  Merge Join  (cost=260.93..525.73 rows=17120 width=29)    Merge Cond: (b.fac_id = a.id)  Hash Join  (cost=1.07..2.16 rows=4 width=25)    Hash Cond: (b.fac_id = a.id) Tanto en el caso Merge Join como en el caso Hash Join el dbms esta realizando la unión  de las dos tablas, nos indica el costo para cada caso. Lo que tenemos que buscar siempre es que los COSTOS de nuestras consultas  sean lo más bajos posibles, no siempre una búsqueda secuencial puede tener  un costo mayor que una búsqueda indexada, eso dependerá de la data y  estructura de las tablas. Es importante escribir querys limpios, dar el menor trabajo posible al  analizador de querys de PostgreSQL para que la resolución del plan de  ejecución sea la menor posible. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 67/93 ●8: Configuración Avanzada y Problemas Comunes
  • 68. 2. Problemas comunes – Análisis de Querys Otros operadores que podemos encontrar son: ●Nested Loop      <­­ Se combinan dos tablas utilizando bucles anidados. Por cada fila                      de la tabla padre, se recorren todas las filas de la tabla hija. ●Index scan       <­­ búsqueda sobre un índice ●Unique           <­­ elimina registros de valores duplicados ●Limit            <­­ indica que se esta pidiendo una cantidad limitada de registros,                      aparece cuando se ha usado el operador en la consulta ●Aggregate        <­­ concatenación de columnas ●Subquery Scan    <­­ indica una subconsulta dentro del contexto de un UNION ●Subplan          <­­ indica una subconsulta dentro de un subquery ●Append           <­­ indica que se están uniendo 2 tablas, aparece cuando se uso el                       operador UNION en la consulta ●Tid Scan (raro) ●Group            <­­ indica que se hace un GROUP BY ●Result           <­­ indica una operación que no mueve datos ●Materialize      <­­ se da en caso de que existan subconsultas que se repiten y                      el dbms decide almacenar los resultados obtenidos para su                      rehuso. http://www.iphelp.ru/faq/15/ch04lev1sec3.html http://explain.depesz.com/ <­­ Herramienta que permite subir un Explain y retorna la                                información más estructurada y digerible. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 68/93 ●8: Configuración Avanzada y Problemas Comunes
  • 69. Instalando PostgreSQL 9.0 Precaución: PostgreSQL 9.0 no es parte oficial aún de los repositorios  oficiales de CentOS 6. 1. Descargar los RPM de la siguiente ruta:    http://www.pgrpms.org/9.0/redhat/rhel­6­x86_64/pgdg­centos­9.0­3.noarch.rpm  2. Instalar el rpm descargado, como usuario “root”.    root@host$ rpm ­ivh pgdg­centos­9.0­3.noarch.rpm 3. Instalar PostgreSQL 9.0    root@host$ yum install postgresql90­server 4. Iniciar la base de datos    root@host$ /etc/init.d/postgresql­9.0 initdb    root@host$ /etc/init.d/postgresql­9.0 start EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 69/93 ●9: Replicación Asíncrona con PostgreSQL 9.0
  • 70. El sistema de replicación asíncrona de PostgreSQL 9.0 El concepto de replicación es mantener una copia actualizada de la data en  un servidor alterno al principal, ¿porqué?: * Para tener un sistema tolerable a fallas. * Para balancear la carga de trabajo en diversos servidores. * Para aplicaciones de alto consumo en consultas (B.I.) * Para tener un ambiente de pruebas o desarrollo lo más parecido al    ambiente de producción. * Muchas otras que se puedan imaginar ..... Existe al menos unas 10 soluciones viables para replicar bases de datos  PostgreSQL, todas ellas con sus pros y sus contras. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 70/93 ●9: Replicación Asíncrona con PostgreSQL 9.0
  • 71. Características de la replicación interna de PgSQL 9.0 * Es Streaming Replication Hot Standby * No requiere hardware especial * No requiere de servidores/servicios especiales * No sobrecarga el servidor principal * No requiere de un sistema de resolución de conflictos (al menos   no adicionales al que ya implementa la base de datos) * Si se cayera la replicación al menos tendré acceso de lectura    en el servidor alterno. * Point­In­Time Recovery, es decir permite recuperar la data al   Tiempo pasado más cercano donde esta se encuentre bien. * Usa WAL como método de cache, esta técnica permite asegurar que   solo las operaciones bien realizadas actualicen la data   (atomicidad y durabilidad). EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 71/93 ●9: Replicación Asíncrona con PostgreSQL 9.0
  • 72. Desventajas: * Múltiples servidores maestros/principales * Asegurar que ante una falla el servidor principal nunca va a      perder la data (a nivel sistema operativo) * Controlar la replicación a nivel de tablas EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 72/93 ●9: Replicación Asíncrona con PostgreSQL 9.0
  • 73. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 73/93 ●9: Replicación Asíncrona con PostgreSQL 9.0
  • 74. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 74/93 ●9: Replicación Asíncrona con PostgreSQL 9.0 El WAL es... Básicamente es un buffer donde se llevan a cabo las operaciones a la data y una vez terminada se pasan al almacenamiento de datos principal, si algo pasara entonces el área de datos permanecerá intacto solo se perderá lo que esta en el WAL. WAL genera segmentos de data de 16mb (configurable) en archivos físicos que tiene páginas de datos de 8kb (configurable). WAL nunca borra data, siempre está añadiendo data nueva, en general PostgreSQL nunca modifica o borra data, desactiva páginas y crea nuevas con la nueva información, incluso puede crear nuevas páginas solo para consulta.
  • 75. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 75/93 ●9: Replicación Asíncrona con PostgreSQL 9.0 El WAL es... Una ventaja del WAL es que puede residir en cualquier directorio y podemos hacer un enlace simbólico al directorio donde debería residir. En caso de que suceda un problema el WAL puede retroceder hacia el pasado hasta el último momento en que todo estuvo ok. WAL maneja varios niveles para especificar que tanto deseo almacenar en este buffer en el nivel mínimo solo contiene información para recuperar una db en caso de paradas abruptas del servicio. Para realizar la replicación requerimos aumentar el nivel de WAL para reconstruir toda la data de una db.
  • 76. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 76/93 ●9: Replicación Asíncrona con PostgreSQL 9.0 Instalando (0) Antes que nada creamos un punto de montaje vía SSHFS en el SLAVE que montará un directorio especial del servidor MASTER, esto se puede hacer vía NFS también. En el MASTER: [root@host] mkdir /home/wal_master <-- en este directorio se grabará el backup del WAL. [root@host] chown postgres:postgres /home/wal_master <-- volvemos propietario de este directorio al usuario POSTGRES. En el SLAVE: [root@host] yum install sshfs <-- instalamos sshfs si no lo tenemos debemos tener el repositorio de RPMFORGE [root@host] chmod +x /usr/bin/fusermount <-- esto es una limitación de CentOS, hay que autorizar ejecución a otros usuario del comando “fusermount” [root@host] mkdir /home/wal_slave <-- de este directorio se leerá la copia Del WAL [root@host] chown postgres:postgres /home/wal_slave <-- volvemos propietario de este Directorio al usuario POSTGRES. [root@host] su – postgres <-- ingresamos como usuario POSTGRES [postgres@host] sshfs root@(ip_master):/home/wal_master /home/wal_slave Al ejecutar este comando necesitamos ingresar la clave del “root” del servidor MASTER.
  • 77. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 77/93 ●9: Replicación Asíncrona con PostgreSQL 9.0 Instalando (1) Autorizamos a los servidores a accesar a cada servidor remoto Editamos pg_hba.conf en el slave y añadimos esto: host replication postgres (ip_master)/32 trust Editamos pg_hba.conf en el master y añadimos esto: host replication postgres (ip_slave)/32 trust “replication” no es una base de datos real, es una palabra reservada de la conexiòn para la réplica, ambos servidores deben poder autenticarse uno al otro. Editamos postgresql.conf en el slave y modificamos este parámetro: listen_addresses = 'localhost,(ip_master)' Editamos postgresql.conf en el master y modificamos este parámetro: listen_addresses = 'localhost,(ip_slave)' Si tenemos un master que alimenta varios slave entonces debemos añadir en el tantos ips como sea necesario.
  • 78. EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net informes@eqsoft.net Teléfonos: (51) (1) 5645744 / 5645424 DBA desde Básico a Avanzado Clínica Santa Isabel - 2011 78/93 ●9: Replicación Asíncrona con PostgreSQL 9.0 Instalando (2) Configuramos el postgresql.conf del master wal_level = hot_standby <-- este parámetro permitirá crear archivos que son capaces de regenerar toda la base de datos. archive_mode = on <-- indica que se deben generar archivos de backup de lo que el WAL genere archive_command = 'cp %p /home/wal_master/%f' <-- indica a donde se van a copiar los backups del WAL. max_wal_senders = 5 <-- cantidad de conexiones que ejecutará el proceso wal_keep_segments = 32 <-- cantidad de “logfile segments” que se mantendrán vivos, cada uno de ellos es de 16MB, si este número es muy pequeño el sistema podría eliminar data antes de ser movida al SALVE, un número muy alto ocupará una cantidad de espacio moderado. Iniciamos nuestro servidor MASTER