SlideShare uma empresa Scribd logo
1 de 28
Baixar para ler offline
Afinamiento de la base de
         datos

      por Jaime Casanova
PostgreSQL




  Consideraciones sobre el sistema de discos.

  Configuraciones de Postgresql.conf relevantes al
  rendimiento.

     Controlando el uso de recursos

     Mitigando el costo de escritura a disco.

     Indicando a Postgres como escoger los mejores
     planes.
PostgreSQL


Consideraciones sobre el Sistema de Discos

   El sistema de discos es uno de los cuellos de botella mas
   comunes en un sistema de base de datos.

      Aunque aumentar la memoria puede mejorar la
      situación para bases de datos pequeñas, no siempre
      es la solución.
PostgreSQL


Consideraciones sobre el Sistema de Discos
   Configuración RAID

      En la comunidad se ha recomendado el nivel 10
PostgreSQL


Consideraciones sobre el Sistema de Discos
   Configuración RAID

      En la comunidad se ha recomendado el nivel 10

   Apagar cache de escritura o usar battery backed array
   controllers
PostgreSQL


Consideraciones sobre el Sistema de Discos
   Configuración RAID

      En la comunidad se ha recomendado el nivel 10

   Apagar cache de escritura o usar battery backed array
   controllers

   Distribución de los discos
PostgreSQL


Consideraciones sobre el Sistema de Discos
   Configuración RAID

      En la comunidad se ha recomendado el nivel 10

   Apagar cache de escritura o usar battery backed array
   controllers

   Distribución de los discos

      Poner el WAL ($PGDATADIR/pg_xlog) en un disco
      aparte
PostgreSQL


Consideraciones sobre el Sistema de Discos
   Configuración RAID

      En la comunidad se ha recomendado el nivel 10

   Apagar cache de escritura o usar battery backed array
   controllers

   Distribución de los discos

      Poner el WAL ($PGDATADIR/pg_xlog) en un disco
      aparte

      Si es posible; disponer de discos separados para
      poner los datos, índices y archivos temporales.
PostgreSQL


postgresql.conf: Parámetros relevantes al rendimiento

    Controlando el uso de recursos

       max_connections

       shared_buffers

       work_mem

       max_fsm_pages, max_fsm_relations
PostgreSQL


postgresql.conf: max_connections

   Máximo número de conexiones permitidas a la base de
   datos.

   Debe mantenerse en un valor razonable.

   Al escoger el valor de max_connections se debe
   considerar el uso de work_mem.

   Se puede usar algún pool de conexiones (PgPool,
   PgBouncer) para mantener este valor bajo.
PostgreSQL


postgresql.conf: shared_buffers

    Este parámetro determina cuanta memoria puede usar
    PostgreSQL de forma dedicada para mantener datos en
    cache.

    Un valor razonable (para empezar a probar) es el 25% del
    total de la memoria RAM disponible.
PostgreSQL


postgresql.conf: shared_buffers

    Si no se indica la unidad se asume 8Kb por cada shared
    buffer.

       shared_buffers = 1024 (8Mb)

    Puede necesitarse alterar el valor de SHMMAX.
PostgreSQL


postgresql.conf: work_mem

   Este parámetro determina cuanta memoria puede usar
   PostgreSQL en operaciones de ordenamiento y para
   tablas hash antes de usar archivos temporales.

   Este valor se aplica por operación (una consulta
   realizando varios ordenamientos usará X veces este
   valor).
PostgreSQL


postgresql.conf: work_mem

   Al escoger el valor de work_mem se debe considerar el
   valor de max_connections, un valor razonable puede ser
   entre el 2-4% del total de la memoria.

   Para mitigar el costo de usar archivos temporales se
   puede usar el parámetro temp_tablespaces
PostgreSQL


postgresql.conf: max_fsm_pages y max_fsm_relations

   Guardan información sobre el espacio libre (reutilizable)
   generado debido a la existencia de tuplas muertas en la
   base de datos.

   El FSM solo se registra durante vacuum.
PostgreSQL


postgresql.conf: max_fsm_pages y max_fsm_relations

   max_fsm_relations debería ser igual al total de tablas e
   índices en todas las bases de datos de una instalación.

   Se puede usar vacuum verbose para determinar el valor
   de max_fsm_pages.
PostgreSQL


postgresql.conf: Parámetros relevantes al rendimiento

    Mitigando el costo de escritura a disco

       fsync, synchronous_commit

       commit_delay, commit_siblings

       checkpoints

          checkpoints_segments

          checkpoints_timeout

          checkpoints_completion_target
PostgreSQL


postgresql.conf: fsync, synchronous_commit

   Determina si todas las páginas del WAL deben gabarse a
   disco antes de que se considere terminada la transacción.

   Setear este valor a OFF podría causar corrupción de
   datos ante una eventual caída del servidor.

      En instalaciones de Data Warehouse podría apagarse
      para aumentar el rendimiento.
PostgreSQL


postgresql.conf: fsync, synchronous_commit

   synchronous_commit puede proveer la mejora en el
   rendimiento que fsync=off daría sin el riesgo de
   corrupción de datos.

      Se puede setear en cualquier momento.
PostgreSQL


postgresql.conf: commit_delay, commit_siblings

    Se usan para tratar de ejecutar COMMIT
    simultaneamente en varias transacciones.

    Si existen otros backends activos cuando una transacción
    está haciendo COMMIT, el servidor espera commit_delay
    microsegundos con la esperanza de que alguna otra de
    las transacciones (hasta commit_siblings) termine.
PostgreSQL


postgresql.conf: checkpoints

    Pueden ocurrir en 2 circunstancias:

       Se han llenado todos los segmentos del WAL
       (checkpoint_segment)

       Ha transcurrido chekpoint_timeout segundos desde el
       último checkpoint.

    checkpoint_completion_target fue concebido para
    distribuir uniformemente la ejecución del checkpoint
    actual durante el período de espera al siguiente.
PostgreSQL


postgresql.conf: escogiendo los mejores planes

    vacuum_cost_delay

    random_page_cost

    effective_cache_size

    constraint_exclusion
PostgreSQL


postgresql.conf: vacuum_cost_delay

   Determina el tiempo que vacuum dormirá luego de haber
   trabajado por un cierto periodo.

      Hacer uso de este parámetro puede evitar que un
      vacuum consuma demasiados recursos procesando
      una tabla muy grande y/o con alta concurrencia.
PostgreSQL


postgresql.conf: random_page_cost

   Determina la forma en que el planeador considera los
   accesos no secuenciales a disco.

      Un valor bajo favorecerá el uso de índices; un valor
      alto, las lecturas secuenciales.

   Aunque es prudente reducir un poco este valor, debe
   recordarse que el uso de índices tiene un costo y nunca
   será más rápido que el acceso secuencial
   (seq_page_cost).
PostgreSQL


postgresql.conf: effective_cache_size

    Determina la estimación del planeador en cuanto a cuanta
    memoria hay disponible para mantener un cache para las
    consultas.

       Un valor alto favorecerá el uso de índices; un valor
       bajo, las lecturas secuenciales.
PostgreSQL


postgresql.conf: effective_cache_size

    Se debería configurar al valor de la memoria que queda
    luego de considerar shared_buffers, Sistema Operativo y
    otras aplicaciones.

    Un valor razonable, dependiendo de la instalación, puede
    ser de 1/2 del total de la memoria.
PostgreSQL


postgresql.conf: constraint_exclusion

    Permite al planeador considerar los constraints checks en
    la tabla al determinar el plan de ejecución.

       Se usa cuando se esta usando un esquema de
       partición basado en herencia de tablas.
PostgreSQL


postgresql.conf: constraint_exclusion

    En el siguente ejemplo solo se accesará a la tabla
    child2000.

    CREATE TABLE parent(key integer, ...);
    CREATE TABLE child1000(
      check (key between 1000 and 1999)
    ) INHERITS(parent);
    CREATE TABLE child2000(
      check (key between 2000 and 2999)
    ) INHERITS(parent);
    ...
    SELECT * FROM parent WHERE key = 2400;

Mais conteúdo relacionado

Mais procurados

Instalacion y configuracion de postgre sql
Instalacion y configuracion de postgre sqlInstalacion y configuracion de postgre sql
Instalacion y configuracion de postgre sqlUPTM
 
Tabla y Manual de instalación de PostgreSQL 9.5
Tabla y Manual de instalación de PostgreSQL 9.5Tabla y Manual de instalación de PostgreSQL 9.5
Tabla y Manual de instalación de PostgreSQL 9.5AdrianAsisVegaSegura
 
R ecuperacion
R ecuperacionR ecuperacion
R ecuperacionvictdiazm
 
Migrando de MSSQL a PostgreSQL
Migrando de MSSQL a PostgreSQLMigrando de MSSQL a PostgreSQL
Migrando de MSSQL a PostgreSQLscastell77
 
Consideraciones de hardware para SQL Server
Consideraciones de hardware para SQL ServerConsideraciones de hardware para SQL Server
Consideraciones de hardware para SQL ServerEduardo Castro
 
Diagnostico y resolución de problemas en sql server
Diagnostico y resolución de problemas en sql serverDiagnostico y resolución de problemas en sql server
Diagnostico y resolución de problemas en sql serverSpanishPASSVC
 
Presentación de Postgresql 9.1
Presentación de Postgresql 9.1Presentación de Postgresql 9.1
Presentación de Postgresql 9.1EQ SOFT EIRL
 
Presentacion backup recover - copia
Presentacion backup recover - copiaPresentacion backup recover - copia
Presentacion backup recover - copiaGonzalo del Pozo
 
Dba PostgreSQL desde básico a avanzado parte2
Dba PostgreSQL desde básico a avanzado parte2Dba PostgreSQL desde básico a avanzado parte2
Dba PostgreSQL desde básico a avanzado parte2EQ SOFT EIRL
 
Postgre sql y_replicacion_slony_p
Postgre sql y_replicacion_slony_pPostgre sql y_replicacion_slony_p
Postgre sql y_replicacion_slony_pedvin_marcelo
 
CESGA: Curso Básico SVG
CESGA: Curso Básico SVGCESGA: Curso Básico SVG
CESGA: Curso Básico SVGJavier Lopez
 
Postgresql Como Funciona Una Dbms Por Dentro
Postgresql Como Funciona Una Dbms Por DentroPostgresql Como Funciona Una Dbms Por Dentro
Postgresql Como Funciona Una Dbms Por DentroEQ SOFT EIRL
 
III LLAMPAGEEK 2013: Base de Datos Distribuidas con PostgreSQL.
III LLAMPAGEEK 2013: Base de Datos Distribuidas con PostgreSQL.III LLAMPAGEEK 2013: Base de Datos Distribuidas con PostgreSQL.
III LLAMPAGEEK 2013: Base de Datos Distribuidas con PostgreSQL.EtiCAGNU
 
Arquitectura e implementación de PostgreSQL 9.3
Arquitectura e implementación de PostgreSQL 9.3Arquitectura e implementación de PostgreSQL 9.3
Arquitectura e implementación de PostgreSQL 9.3Bryan Rodríguez
 
Documentacion postgresql
Documentacion postgresqlDocumentacion postgresql
Documentacion postgresqlCesar Martinez
 

Mais procurados (20)

Instalacion y configuracion de postgre sql
Instalacion y configuracion de postgre sqlInstalacion y configuracion de postgre sql
Instalacion y configuracion de postgre sql
 
Tabla y Manual de instalación de PostgreSQL 9.5
Tabla y Manual de instalación de PostgreSQL 9.5Tabla y Manual de instalación de PostgreSQL 9.5
Tabla y Manual de instalación de PostgreSQL 9.5
 
Requerimientos de PostgreSQL
Requerimientos de PostgreSQLRequerimientos de PostgreSQL
Requerimientos de PostgreSQL
 
R ecuperacion
R ecuperacionR ecuperacion
R ecuperacion
 
Migrando de MSSQL a PostgreSQL
Migrando de MSSQL a PostgreSQLMigrando de MSSQL a PostgreSQL
Migrando de MSSQL a PostgreSQL
 
Consideraciones de hardware para SQL Server
Consideraciones de hardware para SQL ServerConsideraciones de hardware para SQL Server
Consideraciones de hardware para SQL Server
 
Diagnostico y resolución de problemas en sql server
Diagnostico y resolución de problemas en sql serverDiagnostico y resolución de problemas en sql server
Diagnostico y resolución de problemas en sql server
 
Presentación de Postgresql 9.1
Presentación de Postgresql 9.1Presentación de Postgresql 9.1
Presentación de Postgresql 9.1
 
Presentacion backup recover - copia
Presentacion backup recover - copiaPresentacion backup recover - copia
Presentacion backup recover - copia
 
Dba PostgreSQL desde básico a avanzado parte2
Dba PostgreSQL desde básico a avanzado parte2Dba PostgreSQL desde básico a avanzado parte2
Dba PostgreSQL desde básico a avanzado parte2
 
Postgresql expo
Postgresql expoPostgresql expo
Postgresql expo
 
Postgre sql y_replicacion_slony_p
Postgre sql y_replicacion_slony_pPostgre sql y_replicacion_slony_p
Postgre sql y_replicacion_slony_p
 
CESGA: Curso Básico SVG
CESGA: Curso Básico SVGCESGA: Curso Básico SVG
CESGA: Curso Básico SVG
 
Postgresql Como Funciona Una Dbms Por Dentro
Postgresql Como Funciona Una Dbms Por DentroPostgresql Como Funciona Una Dbms Por Dentro
Postgresql Como Funciona Una Dbms Por Dentro
 
Replicacion en mysq
Replicacion en mysqReplicacion en mysq
Replicacion en mysq
 
III LLAMPAGEEK 2013: Base de Datos Distribuidas con PostgreSQL.
III LLAMPAGEEK 2013: Base de Datos Distribuidas con PostgreSQL.III LLAMPAGEEK 2013: Base de Datos Distribuidas con PostgreSQL.
III LLAMPAGEEK 2013: Base de Datos Distribuidas con PostgreSQL.
 
Arquitectura e implementación de PostgreSQL 9.3
Arquitectura e implementación de PostgreSQL 9.3Arquitectura e implementación de PostgreSQL 9.3
Arquitectura e implementación de PostgreSQL 9.3
 
PostgreSQL
PostgreSQLPostgreSQL
PostgreSQL
 
Clúster
ClústerClúster
Clúster
 
Documentacion postgresql
Documentacion postgresqlDocumentacion postgresql
Documentacion postgresql
 

Semelhante a Configuraciones PostgreSQL para mejorar el rendimiento

Monitoreo tunning postgresql_2011
Monitoreo tunning postgresql_2011Monitoreo tunning postgresql_2011
Monitoreo tunning postgresql_2011Lennin Caro
 
Fundamentos de Administración PostgreSQL
Fundamentos de Administración PostgreSQLFundamentos de Administración PostgreSQL
Fundamentos de Administración PostgreSQLcamposer
 
Segunda unidas open suse
Segunda unidas open suseSegunda unidas open suse
Segunda unidas open suseMiguel Magaña
 
Introduccion a la Arquitectura de Oracle. Z052 02
Introduccion a la Arquitectura de Oracle. Z052 02Introduccion a la Arquitectura de Oracle. Z052 02
Introduccion a la Arquitectura de Oracle. Z052 02Alexander Calderón
 
EvaluacióN Del Hardware Del Servidor De Base
EvaluacióN Del Hardware Del Servidor De BaseEvaluacióN Del Hardware Del Servidor De Base
EvaluacióN Del Hardware Del Servidor De BaseFreddy Banguero
 
28 el directorio sysconfig
28  el directorio sysconfig28  el directorio sysconfig
28 el directorio sysconfigAprende Viendo
 
Rendimiento en aplicaciones web con Symfony2
Rendimiento en aplicaciones web con Symfony2Rendimiento en aplicaciones web con Symfony2
Rendimiento en aplicaciones web con Symfony2Asier Marqués
 
Lo que siempre has querido saber para exprimir sql server
Lo que siempre has querido saber para exprimir sql serverLo que siempre has querido saber para exprimir sql server
Lo que siempre has querido saber para exprimir sql serverEnrique Catala Bañuls
 
Replicación de Base de Datos en PostGreSQL 9.4 en Sistemas Operativos de Win...
Replicación de  Base de Datos en PostGreSQL 9.4 en Sistemas Operativos de Win...Replicación de  Base de Datos en PostGreSQL 9.4 en Sistemas Operativos de Win...
Replicación de Base de Datos en PostGreSQL 9.4 en Sistemas Operativos de Win...Julio Antonio Huaman Chuque
 
Qnap Ts h1886 xu-ts-h1683xu_ts-h2483xu_es
Qnap Ts h1886 xu-ts-h1683xu_ts-h2483xu_esQnap Ts h1886 xu-ts-h1683xu_ts-h2483xu_es
Qnap Ts h1886 xu-ts-h1683xu_ts-h2483xu_esQNAP Systems, Inc.
 

Semelhante a Configuraciones PostgreSQL para mejorar el rendimiento (20)

PostgreSQL BDR - Altenwald.pdf
PostgreSQL BDR - Altenwald.pdfPostgreSQL BDR - Altenwald.pdf
PostgreSQL BDR - Altenwald.pdf
 
Monitoreo tunning postgresql_2011
Monitoreo tunning postgresql_2011Monitoreo tunning postgresql_2011
Monitoreo tunning postgresql_2011
 
Fundamentos de Administración PostgreSQL
Fundamentos de Administración PostgreSQLFundamentos de Administración PostgreSQL
Fundamentos de Administración PostgreSQL
 
Opensuse2
Opensuse2Opensuse2
Opensuse2
 
Pg pool cluster postgresql
Pg pool cluster postgresqlPg pool cluster postgresql
Pg pool cluster postgresql
 
Segunda unidas open suse
Segunda unidas open suseSegunda unidas open suse
Segunda unidas open suse
 
Introduccion a la Arquitectura de Oracle. Z052 02
Introduccion a la Arquitectura de Oracle. Z052 02Introduccion a la Arquitectura de Oracle. Z052 02
Introduccion a la Arquitectura de Oracle. Z052 02
 
EvaluacióN Del Hardware Del Servidor De Base
EvaluacióN Del Hardware Del Servidor De BaseEvaluacióN Del Hardware Del Servidor De Base
EvaluacióN Del Hardware Del Servidor De Base
 
Cent os_
 Cent os_ Cent os_
Cent os_
 
28 el directorio sysconfig
28  el directorio sysconfig28  el directorio sysconfig
28 el directorio sysconfig
 
Rendimiento en aplicaciones web con Symfony2
Rendimiento en aplicaciones web con Symfony2Rendimiento en aplicaciones web con Symfony2
Rendimiento en aplicaciones web con Symfony2
 
Lo que siempre has querido saber para exprimir sql server
Lo que siempre has querido saber para exprimir sql serverLo que siempre has querido saber para exprimir sql server
Lo que siempre has querido saber para exprimir sql server
 
Base de dato
Base de  dato Base de  dato
Base de dato
 
Base de dato act4
Base de  dato act4Base de  dato act4
Base de dato act4
 
Instancias Amazon EC2 a profundidad
Instancias Amazon EC2 a profundidadInstancias Amazon EC2 a profundidad
Instancias Amazon EC2 a profundidad
 
PostgreSQL
PostgreSQLPostgreSQL
PostgreSQL
 
Replicación de Base de Datos en PostGreSQL 9.4 en Sistemas Operativos de Win...
Replicación de  Base de Datos en PostGreSQL 9.4 en Sistemas Operativos de Win...Replicación de  Base de Datos en PostGreSQL 9.4 en Sistemas Operativos de Win...
Replicación de Base de Datos en PostGreSQL 9.4 en Sistemas Operativos de Win...
 
Tp1 db avanz-v1.1
Tp1 db avanz-v1.1Tp1 db avanz-v1.1
Tp1 db avanz-v1.1
 
Qnap Ts h1886 xu-ts-h1683xu_ts-h2483xu_es
Qnap Ts h1886 xu-ts-h1683xu_ts-h2483xu_esQnap Ts h1886 xu-ts-h1683xu_ts-h2483xu_es
Qnap Ts h1886 xu-ts-h1683xu_ts-h2483xu_es
 
Monit optim iis6_2
Monit optim iis6_2Monit optim iis6_2
Monit optim iis6_2
 

Mais de UTN

Er extendido
Er extendidoEr extendido
Er extendidoUTN
 
Disponibilidad de datos
Disponibilidad de datosDisponibilidad de datos
Disponibilidad de datosUTN
 
Disponibilidad de datos
Disponibilidad de datosDisponibilidad de datos
Disponibilidad de datosUTN
 
Sílabo (Administración de Base de Datos)
Sílabo (Administración de Base de Datos)Sílabo (Administración de Base de Datos)
Sílabo (Administración de Base de Datos)UTN
 
Representación grafica m er
Representación grafica m erRepresentación grafica m er
Representación grafica m erUTN
 
Gestion de cambios
Gestion de cambiosGestion de cambios
Gestion de cambiosUTN
 
Diseño de aplicaciones
Diseño de aplicacionesDiseño de aplicaciones
Diseño de aplicacionesUTN
 
Configuracion
ConfiguracionConfiguracion
ConfiguracionUTN
 
Creación de base de datos
Creación de base de datosCreación de base de datos
Creación de base de datosUTN
 
Modelo relacional
Modelo relacionalModelo relacional
Modelo relacionalUTN
 
Modelo conceptual
Modelo conceptualModelo conceptual
Modelo conceptualUTN
 
Administración de base de datos introduccion y objetivos
Administración de base de datos introduccion y objetivosAdministración de base de datos introduccion y objetivos
Administración de base de datos introduccion y objetivosUTN
 
Silabo
SilaboSilabo
SilaboUTN
 
Administracion basica pgsql(administracion de bdd)
Administracion basica pgsql(administracion de bdd)Administracion basica pgsql(administracion de bdd)
Administracion basica pgsql(administracion de bdd)UTN
 
Cardinalidad
CardinalidadCardinalidad
CardinalidadUTN
 
Modelo entidad relación
Modelo entidad relaciónModelo entidad relación
Modelo entidad relaciónUTN
 
Introduccion bases de datos
Introduccion bases de datosIntroduccion bases de datos
Introduccion bases de datosUTN
 
Creacion de un entorno de bdd el dba(administracion de base de datos)
Creacion de un entorno de bdd el dba(administracion de base de datos)Creacion de un entorno de bdd el dba(administracion de base de datos)
Creacion de un entorno de bdd el dba(administracion de base de datos)UTN
 
El dba(administracion de base de datos)
El dba(administracion de base de datos)El dba(administracion de base de datos)
El dba(administracion de base de datos)UTN
 

Mais de UTN (19)

Er extendido
Er extendidoEr extendido
Er extendido
 
Disponibilidad de datos
Disponibilidad de datosDisponibilidad de datos
Disponibilidad de datos
 
Disponibilidad de datos
Disponibilidad de datosDisponibilidad de datos
Disponibilidad de datos
 
Sílabo (Administración de Base de Datos)
Sílabo (Administración de Base de Datos)Sílabo (Administración de Base de Datos)
Sílabo (Administración de Base de Datos)
 
Representación grafica m er
Representación grafica m erRepresentación grafica m er
Representación grafica m er
 
Gestion de cambios
Gestion de cambiosGestion de cambios
Gestion de cambios
 
Diseño de aplicaciones
Diseño de aplicacionesDiseño de aplicaciones
Diseño de aplicaciones
 
Configuracion
ConfiguracionConfiguracion
Configuracion
 
Creación de base de datos
Creación de base de datosCreación de base de datos
Creación de base de datos
 
Modelo relacional
Modelo relacionalModelo relacional
Modelo relacional
 
Modelo conceptual
Modelo conceptualModelo conceptual
Modelo conceptual
 
Administración de base de datos introduccion y objetivos
Administración de base de datos introduccion y objetivosAdministración de base de datos introduccion y objetivos
Administración de base de datos introduccion y objetivos
 
Silabo
SilaboSilabo
Silabo
 
Administracion basica pgsql(administracion de bdd)
Administracion basica pgsql(administracion de bdd)Administracion basica pgsql(administracion de bdd)
Administracion basica pgsql(administracion de bdd)
 
Cardinalidad
CardinalidadCardinalidad
Cardinalidad
 
Modelo entidad relación
Modelo entidad relaciónModelo entidad relación
Modelo entidad relación
 
Introduccion bases de datos
Introduccion bases de datosIntroduccion bases de datos
Introduccion bases de datos
 
Creacion de un entorno de bdd el dba(administracion de base de datos)
Creacion de un entorno de bdd el dba(administracion de base de datos)Creacion de un entorno de bdd el dba(administracion de base de datos)
Creacion de un entorno de bdd el dba(administracion de base de datos)
 
El dba(administracion de base de datos)
El dba(administracion de base de datos)El dba(administracion de base de datos)
El dba(administracion de base de datos)
 

Configuraciones PostgreSQL para mejorar el rendimiento

  • 1. Afinamiento de la base de datos por Jaime Casanova
  • 2. PostgreSQL Consideraciones sobre el sistema de discos. Configuraciones de Postgresql.conf relevantes al rendimiento. Controlando el uso de recursos Mitigando el costo de escritura a disco. Indicando a Postgres como escoger los mejores planes.
  • 3. PostgreSQL Consideraciones sobre el Sistema de Discos El sistema de discos es uno de los cuellos de botella mas comunes en un sistema de base de datos. Aunque aumentar la memoria puede mejorar la situación para bases de datos pequeñas, no siempre es la solución.
  • 4. PostgreSQL Consideraciones sobre el Sistema de Discos Configuración RAID En la comunidad se ha recomendado el nivel 10
  • 5. PostgreSQL Consideraciones sobre el Sistema de Discos Configuración RAID En la comunidad se ha recomendado el nivel 10 Apagar cache de escritura o usar battery backed array controllers
  • 6. PostgreSQL Consideraciones sobre el Sistema de Discos Configuración RAID En la comunidad se ha recomendado el nivel 10 Apagar cache de escritura o usar battery backed array controllers Distribución de los discos
  • 7. PostgreSQL Consideraciones sobre el Sistema de Discos Configuración RAID En la comunidad se ha recomendado el nivel 10 Apagar cache de escritura o usar battery backed array controllers Distribución de los discos Poner el WAL ($PGDATADIR/pg_xlog) en un disco aparte
  • 8. PostgreSQL Consideraciones sobre el Sistema de Discos Configuración RAID En la comunidad se ha recomendado el nivel 10 Apagar cache de escritura o usar battery backed array controllers Distribución de los discos Poner el WAL ($PGDATADIR/pg_xlog) en un disco aparte Si es posible; disponer de discos separados para poner los datos, índices y archivos temporales.
  • 9. PostgreSQL postgresql.conf: Parámetros relevantes al rendimiento Controlando el uso de recursos max_connections shared_buffers work_mem max_fsm_pages, max_fsm_relations
  • 10. PostgreSQL postgresql.conf: max_connections Máximo número de conexiones permitidas a la base de datos. Debe mantenerse en un valor razonable. Al escoger el valor de max_connections se debe considerar el uso de work_mem. Se puede usar algún pool de conexiones (PgPool, PgBouncer) para mantener este valor bajo.
  • 11. PostgreSQL postgresql.conf: shared_buffers Este parámetro determina cuanta memoria puede usar PostgreSQL de forma dedicada para mantener datos en cache. Un valor razonable (para empezar a probar) es el 25% del total de la memoria RAM disponible.
  • 12. PostgreSQL postgresql.conf: shared_buffers Si no se indica la unidad se asume 8Kb por cada shared buffer. shared_buffers = 1024 (8Mb) Puede necesitarse alterar el valor de SHMMAX.
  • 13. PostgreSQL postgresql.conf: work_mem Este parámetro determina cuanta memoria puede usar PostgreSQL en operaciones de ordenamiento y para tablas hash antes de usar archivos temporales. Este valor se aplica por operación (una consulta realizando varios ordenamientos usará X veces este valor).
  • 14. PostgreSQL postgresql.conf: work_mem Al escoger el valor de work_mem se debe considerar el valor de max_connections, un valor razonable puede ser entre el 2-4% del total de la memoria. Para mitigar el costo de usar archivos temporales se puede usar el parámetro temp_tablespaces
  • 15. PostgreSQL postgresql.conf: max_fsm_pages y max_fsm_relations Guardan información sobre el espacio libre (reutilizable) generado debido a la existencia de tuplas muertas en la base de datos. El FSM solo se registra durante vacuum.
  • 16. PostgreSQL postgresql.conf: max_fsm_pages y max_fsm_relations max_fsm_relations debería ser igual al total de tablas e índices en todas las bases de datos de una instalación. Se puede usar vacuum verbose para determinar el valor de max_fsm_pages.
  • 17. PostgreSQL postgresql.conf: Parámetros relevantes al rendimiento Mitigando el costo de escritura a disco fsync, synchronous_commit commit_delay, commit_siblings checkpoints checkpoints_segments checkpoints_timeout checkpoints_completion_target
  • 18. PostgreSQL postgresql.conf: fsync, synchronous_commit Determina si todas las páginas del WAL deben gabarse a disco antes de que se considere terminada la transacción. Setear este valor a OFF podría causar corrupción de datos ante una eventual caída del servidor. En instalaciones de Data Warehouse podría apagarse para aumentar el rendimiento.
  • 19. PostgreSQL postgresql.conf: fsync, synchronous_commit synchronous_commit puede proveer la mejora en el rendimiento que fsync=off daría sin el riesgo de corrupción de datos. Se puede setear en cualquier momento.
  • 20. PostgreSQL postgresql.conf: commit_delay, commit_siblings Se usan para tratar de ejecutar COMMIT simultaneamente en varias transacciones. Si existen otros backends activos cuando una transacción está haciendo COMMIT, el servidor espera commit_delay microsegundos con la esperanza de que alguna otra de las transacciones (hasta commit_siblings) termine.
  • 21. PostgreSQL postgresql.conf: checkpoints Pueden ocurrir en 2 circunstancias: Se han llenado todos los segmentos del WAL (checkpoint_segment) Ha transcurrido chekpoint_timeout segundos desde el último checkpoint. checkpoint_completion_target fue concebido para distribuir uniformemente la ejecución del checkpoint actual durante el período de espera al siguiente.
  • 22. PostgreSQL postgresql.conf: escogiendo los mejores planes vacuum_cost_delay random_page_cost effective_cache_size constraint_exclusion
  • 23. PostgreSQL postgresql.conf: vacuum_cost_delay Determina el tiempo que vacuum dormirá luego de haber trabajado por un cierto periodo. Hacer uso de este parámetro puede evitar que un vacuum consuma demasiados recursos procesando una tabla muy grande y/o con alta concurrencia.
  • 24. PostgreSQL postgresql.conf: random_page_cost Determina la forma en que el planeador considera los accesos no secuenciales a disco. Un valor bajo favorecerá el uso de índices; un valor alto, las lecturas secuenciales. Aunque es prudente reducir un poco este valor, debe recordarse que el uso de índices tiene un costo y nunca será más rápido que el acceso secuencial (seq_page_cost).
  • 25. PostgreSQL postgresql.conf: effective_cache_size Determina la estimación del planeador en cuanto a cuanta memoria hay disponible para mantener un cache para las consultas. Un valor alto favorecerá el uso de índices; un valor bajo, las lecturas secuenciales.
  • 26. PostgreSQL postgresql.conf: effective_cache_size Se debería configurar al valor de la memoria que queda luego de considerar shared_buffers, Sistema Operativo y otras aplicaciones. Un valor razonable, dependiendo de la instalación, puede ser de 1/2 del total de la memoria.
  • 27. PostgreSQL postgresql.conf: constraint_exclusion Permite al planeador considerar los constraints checks en la tabla al determinar el plan de ejecución. Se usa cuando se esta usando un esquema de partición basado en herencia de tablas.
  • 28. PostgreSQL postgresql.conf: constraint_exclusion En el siguente ejemplo solo se accesará a la tabla child2000. CREATE TABLE parent(key integer, ...); CREATE TABLE child1000( check (key between 1000 and 1999) ) INHERITS(parent); CREATE TABLE child2000( check (key between 2000 and 2999) ) INHERITS(parent); ... SELECT * FROM parent WHERE key = 2400;