Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Parametros
Parametros
AUTORES
Belisario Rebeca C.I. N 19.864.786
Oliveros Leobaldo C.I. N 16.761.622
ABRIL, 2015
temp_buffers = 16MB
temp_buffers': La memoria temporal utilizada por cada sesin para las tablas temporarias y
para apertura de tablas en cada sesin de cada base de datos, tome en cuenta que este valor
depender obviamente de la cantidad de datos que carga cada sesin y depender
muchsimo del sistema que se utiliza.
work_mem = 16MB
work_mem': uno de los valores ms importantes y ms despreciados, work_mem se
refiere a la memoria temporal utilizada por cada sesin, para las operaciones de
ordenamiento (ORDER BY) para las sesiones de diferenciacin (GROUP HAVING y
DISTINCT) y para la gestin de hash (uniones HASH, indices HASH, hash_aggregations),
si en nuestro sistema realizamos muchsimas consultas ordenadas, agrupadas, diferenciadas
por cadenas, etc se crearn mucho de estos buffers de manera paralela, mientras ms
memoria asignemos, menos probabilidades hay que los ordenamientos y otras operaciones
se hagan con archivos temporales en disco (ms lentos que la memoria RAM).
max_stack_depth = 8MB
shared_preload_libraries = '$libdir/plpython2.so'
shared_preload_libraries': Permite cargar una librera especfica cuando arranca el sistema,
si utilizamos muchos procedimientos almacenados en un lenguaje especfico (ej: python,
perl, tcl, java, etc), es bueno pre-cargarla para que est disponible cuando se utilice por
primera vez. Nota: esta opcin ralentiza un poco el reinicio del sistema.
bgwriter_delay = 500ms
bgwriter_delay': El background-writer es un proceso del servidor que se encarga de
escribir a disco todos los shared_buffers modificados, este proceso conlleva una carga de
I/O sobre el disco, su modificacin permite o reducir el valor para evitar en lo ms posible
prdidas de datos en equipos que pueden fallar, o su incremento permite reducir el I/O al
disco duro en sistemas perfectamente protegidos.
Los valores que tiene postgresql.conf estn pensados para trabajar en una
configuracin de hardware mnima.
a) como calcular el valor de SHARED_BUFFERS Shared_buffers nos dice cuanta memoria
va a consumir la dbms, se recomeinda que sea al menos 10% a 25% de la ram disponible en
el sistema y hasta un 40%, el valor nunca puede ser jamas al informado en
/proc/sys/kernel/shmmax.
Para medir el valor correcto debemos contar cuantas pginas caben en la cantidad de ram
asignada en shared_buffers, una pgina generalmente mide 8kb, por ejemplo si tenemos
subirlo si es que tenemos transacciones que bloquean muchos ms objetos nicos (tablas)
que este valor, obviamente el consumo de memoria crecer.
e) 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.
f) random_page_cost: Determina en qu momento se van a utilizar ndices o bsquedas
secuenciales, el valor por defecto es 4, se recomienda aumentarlo para discos lentos y
bajarlo para discos rpidos.
Considere que los ndices son efectivos si la variedad de datos es alta, si es baja entonces es
probable que aunque se mueva la configuracin se ejecuten bsquedas secuenciales.
g) effective_cache_size: Setea el tamao 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 bsquedas secuenciales, se recomienda como mximo 50% del total de
la RAM.
h) statement_timeout: Configura cunto 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.
VACUUM
El proceso de vacuum se ocupa de borrar definitivamente las filas borradas en
operaciones de SQL. Las filas no son borradas fsicamente de la base de datos, nicamente
son marcadas a nivel lgico. Por ese motivo es muy necesario lanzar esta tarea cada cierto
tiempo para proceder al borrado de aquellas filas borradas y eliminarlas definitivamente.
Sin parmetros vacuum procesa cada tabla de la base de datos segn los permisos del
usuario conectado. Vacuum tambin puede procesar slo una tabla.
Vacuum analyze adems de ejecutar vacuum analiza cada tabla de la base de datos.
Esto es una combinacin potente para la ejecucin de scripts de mantenimiento.
Lanzar vacuum (sin la opcin full) simplemente reclama el espacio y lo pone a disposicin
para su reutilizacin. El proceso puede lanzarse mientras se estn realizando operaciones de
lectura y escritura en la base de datos, ya que el proceso vacuum no bloquea en modo
exclusivo. Sin embargo el espacio recuperado no se destina al sistema operativo, sino que
pasar a ser reutilizado dentro de la misma tabla desde donde se recuper.
Vacuum (en modo full) reescribe el contenido entero de la tabla en un nuevo fichero
de disco sin espacio adicional permitiendo la devolucin del espacio no usado al sistema
operativo. Esta opcin es mucho ms lento y requiere un bloqueo exclusivo de tabla en el
momento de su procesamiento.
VACUUM [ ( { FULL | FREEZE | VERBOSE | ANALYZE } [, ...] ) ] [ table [ (column
[, ...]) ] ]
VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] [ table ]
VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] ANALYZE [ table [ (column [, ...] ) ] ]
Analyze
Analyze recoge las estadsticas del contenido de las tablas de la base datos y los resultados
del catlogo de sistemas pg_statistic. El anlisis de las tablas permite determinar la manera
ms eficiente en las construccin de los planes de ejecucin de las quieres.
Sin parmetros analyze analiza cada tabla de la base de datos conectada. Con un parmetro
analyze examina solo la tabla indicada, tambin se pueden realizar anlisis de columnas
concretas.
ANALYZE [ VERBOSE ] [ table [ ( column [, ...] ) ] ]
Scripts
Ambas operaciones tanto Vacuum como Analyze son fundamentales para un
mantenimiento ptimo de la bd por lo que se mostrar una estrategia de mantenimiento en
entornos de produccin. Esto es un ejemplo y hay muchas otras alternativas, aunque esta
opcin es muy vlida.
Es aconsejable del lanzamiento de un anlisis y de un vacuum todos los das, dicha
ejecucin no provoca bloqueos, ni afecta en gran medida al rendimiento de la base de datos,
por lo que puede ser lanzado todos los das.
Para el lanzamiento de los scripts se va a emplear la herramienta vacuumdb que
permite la ejecucin desde el sistema operativo del comando vacuum. Su sintaxis es la
siguiente:
vacuumdb [connection-option...] [--full | -f] [--freeze | -F] [--verbose | -v] [--analyze | -z]
[--analyze-only | -Z] [--table | -t table [( column [,...] )] ] [dbname]
Script diario de mantenimiento
su - postgres -c "vacuumdb --all --verbose --analyze >
/datos01/data/pg_log/vacuum_analyze.log"
Este script lanza un vacuum con un analyze sobre todas las bases de datos a las que tiene
permiso el usuario postgres. Adems de realizar una limpieza de filas borradas lgicamente
tambin actualizar las estadsticas para la mejora de los planes de ejecucin.
Script semanal de mantenimiento
su - postgres -c "vacuumdb --all --verbose --full --analyze >
/datos01/data/pg_log/vacuum_full.log"
En este caso se lanza un vacuum full y con analyze sobre toda la base datos, esta ejecucin
bloquear las tablas que se estn procesando y afectar a los usuarios en caso de ejecucin,
por ello se aconseja su lanzamiento en tiempos de mnima carga.
En ambos scripts se redirecciona la salida a la carpeta de logs del propio PostgreSQL.
Un ejemplo de planificacin cron
00 00 * * 6 /datos01/vacuum_full.sh
00 00 * * 1-5 /datos01/vacuum_analyze.sh
Descripcin
REINDEX reconstruye un ndice utilizando los datos almacenados en la tabla de ndice, la
sustitucin de la vieja copia del ndice. Hay varios escenarios en que utilizar REINDEX:
Parmetros
NDICE
Vuelva a crear el ndice especificado.
TABLA
Volver a crear todos los ndices de la tabla especificada. Si la tabla tiene una
mesa "Toast" secundario, es decir a indizar tambin.
BASE DE DATOS
Volver a crear todos los ndices dentro de la base de datos actual. ndices en los
catlogos del sistema compartidos se omiten excepto en modo autnomo (ver ms
abajo). Esta forma de REINDEX no puede ejecutarse dentro de un bloque de transaccin.
SISTEMA
Volver a crear todos los ndices de catlogos del sistema dentro de la base de datos
actual. Los ndices de las tablas de usuario no se procesan. Adems, los ndices sobre los
catlogos de sistema compartidos se omiten excepto en modo autnomo (ver ms
abajo). Esta forma de REINDEX no puede ejecutarse dentro de un bloque de transaccin.
El nombre
El nombre del ndice, tabla o base de datos especfica para ser indexada. Los
nombres de ndice y de mesa puede ser calificado por el esquema. Actualmente, REINDEX
base de datos y SISTEMA REINDEX slo pueden indexar la base de datos actual, por lo
que su parmetro debe coincidir con el nombre de la base de datos actual.
FUERZA
Esta es una opcin obsoleta; se ignora si se especifica.
Notas
Si usted sospecha que la corrupcin de un ndice en una tabla de usuario, slo tiene que
reconstruir
ese
ndice,
todos
los
ndices
de
la
tabla,
usando NDICE
REINDEX,
SISTEMA
REINDEX,
TABLA
REINDEX o REINDEX
NDICE pueden ser emitidos, dependiendo de la cantidad que desea reconstruir. En caso de
duda, utilice SISTEMA REINDEX para seleccionar la reconstruccin de todos los ndices
del sistema en la base de datos. A continuacin, salga de la sesin de servidor de un solo
usuario y reiniciar el servidor regular.
todo
LIBPQ clientes
basados,
es
posible
establecer
la
variable
de
entorno PGOPTIONS a -P antes de iniciar el cliente. Tenga en cuenta que, si bien este
mtodo no requiere bloquear a otros clientes, todava podra ser prudente para evitar que
otros usuarios se conecten a la base de datos daada hasta que las reparaciones se han
completado.
pg_shdescription y pg_tablespace), a
continuacin,
un
servidor
Para todos los ndices, excepto los catlogos del sistema compartidos, REINDEX es
crash-seguro y transaccionales. REINDEX no se estrelle-seguro para los ndices
compartidos, por lo que no est permitido este caso durante el funcionamiento normal. Si se
produce un error mientras reindexacin uno de estos catlogos en modo autnomo, no ser
posible reiniciar el servidor regular hasta que se rectifica el problema. (El sntoma tpico de
Antes de PostgreSQL 8.1, REINDEX BASE DE DATOS procesa slo ndices del
sistema, no todos los ndices, como es de esperar de la marca. Esto ha sido cambiado para
reducir
el
factor
sorpresa. El
comportamiento
anterior
se
encuentra
Ejemplos
Reconstruir un nico ndice:
REINDEX NDICE my_index;
Reconstruye todos los ndices de la my_table tabla:
REINDEX my_table TABLE;
Reconstruye todos los ndices en una base de datos en particular, sin confiar en los ndices
del sistema sea vlida ya:
$ PGOPTIONS exportacin = "- P"
$ Psql broken_db
...
broken_db => REINDEX broken_db base de datos;
broken_db => \ q
TABLESPACES
Los Tablespaces permiten a los administradores de Bases de Datos definir las
ubicaciones en el sistema de archivos de los objetos que representan las bases de datos que
se pueden almacenar. Dicho de otra manera, nos permiten decirle a PostgreSQL donde
queremos almacenar nuestras tablas. Y para qu sirve esto? Pues por ejemplo para
optimizar el rendimiento; si sabemos que tablas son ms usadas y las que apenas se usan,
podramos almacenar las menos usadas en un disco duro antiguo o de menos prestaciones y
las que ms se usan en un disco ms rpido, de mejor calidad y por lo tanto ms caro.
Para definir un tablespace, utilice la sentencia CREATE TABLESPACE comando, por
ejemplo:
CREATE TABLESPACE fastspace LOCATION '/ mnt/sda1/postgresql/data';
La ubicacin debe ser una existente, directorio vaco que es de propiedad del usuario
del sistema de PostgreSQL. Posteriormente, todos los objetos creados dentro de tablas se
almacenan en los archivos bajo este directorio
Creacin de TABLESPACES debe hacerse como una base de datos de superusuario, pero
despus de que se puede permitir que la base de datos comn a los usuarios hacer uso de
ella. Para ello, les concedan el permiso CREATE en l.
Tablas, ndices, bases de datos enteras puede ser asignado a los TABLESPACES. Para
ello, un usuario con el privilegio de CREATE en un determinado tablespace deben aprobar
el nombre de tablas como un parmetro al comando. Por ejemplo, la siguiente crea una
tabla en la tablespace space1:
CREATE TABLE foo (i int) TABLESPACE space1;
Como alternativa, utilice el parmetro default_tablespace:
SET default_tablespace = space1;
CREATE TABLE foo (i int);
Cuando se establece default_tablespace a nada, pero una cadena vaca, que suministra
una clusula implcita TABLESPACE para CREATE TABLE y CREATE INDEX
comandos que no tienen una explcita.
Tambin hay un parmetro temp_tablespaces, que determina la colocacin temporal
de tablas e ndices, as como los archivos temporales que se utilizan para fines tales como la
clasificacin de grandes conjuntos de datos. Esto puede ser una lista de nombre de
tablespace, en lugar de uno slo, de modo que la carga asociada a los objetos temporales se
puede propagar a travs de mltiples tablespaces
Por lo general no tiene mucho sentido en la toma de ms de una lgica de tablas por
sistema de archivos, ya que no puede controlar la ubicacin de los archivos individuales
dentro de un sistema lgico de archivos. Sin embargo, PostgreSQL no garantice el
cumplimiento de cualquier limitacin de este tipo y, de hecho, no es directamente
consciente de los lmites del sistema de archivos en su sistema. Slo almacena los archivos
en los directorios que decirle que para su uso.