Administración de Bases de Datos-Postgresql
Administración de Bases de Datos-Postgresql
Administración de Bases de Datos-Postgresql
Administración de Bases de
Datos
Unidad III - Configuración y
administración del espacio
en disco.
Libpq
Postmaster
Postgres
Gestor de almacenamiento
Libpq
../src/test/regress
../src/test/examples
../src/bin/psql
Postmaster
Postmaster es el PostgreSQL servidor de base de datos multiusuario. Para que
una aplicación cliente para acceder a una base de datos que se conecta (a través
de una red o de forma local) a un corredor postmaster.
Cuando se necesita guardar data muy grande (un video por ejemplo) la data es
comprimida y partida en pequeñas “filas” que se guardan en una tabla paralela,
esto es transparente para el usuario
Las páginas contienen “items” los cuales apuntan a tuplas o entradas de índices
junto con metadata. Para el caso de PostgreSQL las operaciones de R/W primero
se consultan al Buffer
PostgreSQL posee un solo “Storage Manager” está compuesto por varios módulos
que proveen administración de las transacciones y acceso a los objetos de la base
de datos.
● Mantener versiones históricas de la data bajo el concepto de “graba una vez, lee
muchas veces”.
●Transaction System
●Relational Storage
4
●Time Management
●Record Acces
Esto hace que la base de datos ocupe mucho espacio y afecta el “tiempo de
acceso” a la data.
Existe un “tiempo de acceso” para llegar a la data (sea read o write) que
depende de:
Hay que buscar que reducir este tiempo para que el acceso a la data sea más
rápido.
5
El parser transforma el pequeño query en una serie de instrucciones que la
base de datos pueda interpretar, por eso es importante escribir querys
inteligentes.
Pasos:
En este artículo vamos a intentar dar una introducción sobre como PostgreSQL
9.1 graba nuestros datos en el disco y como se las arregla para encontrar los
mismos cuando los necesitamos. Tener las cosas claras en lo que respecta a
este tema nos puede ayudar en momentos difíciles como administradores de
bases de datos, en el caso que nuestros datos se corrompan por alguna causa.
Para empezar vamos a ver como PostgreSQL organiza los ficheros con
nuestros datos en el disco. Todos los ficheros usados por PostgreSQL se
encuentran en el directorio que hayamos definido como directorio de datos
(data_directory) en nuestro sistema.
postgres@server01:~$ cd /var/pgsql/
postgres@server01:/var/pgsql$ ls -l
total 92
drwx------ 7 postgres nogroup 4096 2011-10-04 18:01 base
drwx------ 2 postgres nogroup 4096 2011-10-04 18:24 global
drwx------ 2 postgres nogroup 4096 2011-10-04 17:53 pg_clog
-rw------- 1 postgres nogroup 4476 2011-10-04 17:53 pg_hba.conf
-rw------- 1 postgres nogroup 1636 2011-10-04 17:53 pg_ident.conf
drwx------ 4 postgres nogroup 4096 2011-10-04 17:53 pg_multixact
drwx------ 2 postgres nogroup 4096 2011-10-04 17:53 pg_notify
drwx------ 2 postgres nogroup 4096 2011-10-04 17:53 pg_serial
drwx------ 2 postgres nogroup 4096 2011-10-05 11:23 pg_stat_tmp
drwx------ 2 postgres nogroup 4096 2011-10-04 17:53 pg_subtrans
drwx------ 2 postgres nogroup 4096 2011-10-04 17:53 pg_tblspc
drwx------ 2 postgres nogroup 4096 2011-10-04 17:53 pg_twophase
-rw------- 1 postgres nogroup 4 2011-10-04 17:53 PG_VERSION
drwx------ 3 postgres nogroup 4096 2011-10-04 17:53 pg_xlog
-rw------- 1 postgres nogroup 19129 2011-10-04 17:53 postgresql.conf
-rw------- 1 postgres nogroup 42 2011-10-04 17:53 postmaster.opts
-rw------- 1 postgres nogroup 68 2011-10-04 17:53 postmaster.pid
12
El que nos interesa en este artículo es uno que se llama base. Dentro de este
subdirectorio se graban todos los datos contenidos en nuestras bases de
datos.
postgres@server01:/var/pgsql$ ls -l base/
total 28
drwx------ 2 postgres nogroup 12288 2011-10-04 17:53 1
drwx------ 2 postgres nogroup 4096 2011-10-04 17:53 11939
drwx------ 2 postgres nogroup 4096 2011-10-04 17:53 11947
Como podeis ver, dentro del subdirectorio base existen otros subdirectorios
com nombres numéricos. Cada subdirectorio dentro del directorio base, es una
base de datos diferente. Para saber a que base de datos corresponden estos
subdirectorios podeis ejecutar este comando SQL en vuestro cliente:
Vamos a crear una base de datos para nuestros ejemplos y a ver como esto
afecta a nuestro sistema.
postgres@server01:/var/pgsql$ ls -l base/
total 24
drwx------ 2 postgres nogroup 12288 2011-10-04 17:53 1
drwx------ 2 postgres nogroup 4096 2011-10-04 17:53 11939
drwx------ 2 postgres nogroup 4096 2011-10-04 17:53 11947
drwx------ 2 postgres nogroup 4096 2011-10-05 11:31 16407
Si haceis un listado de este nuevo subdirectorio vereis que ya tiene una serie
de ficheros aunque no hayais creado ninguna tabla todavía. Estos ficheros
pertenecen al sistema y son necesarios para que la base de datos que habeis
creado funcione. Para este artículo no necesitamos saber nada más sobre los
mismos, solo que estan ahí y que son necesarios.
Ahora creamos una tabla muy simple en nuestra base de datos con un par de
columnas de tipo integer:
postgres=# \c testing_internals
You are now connected to database "testing_internals" as user "postgres".
testing_internals=# \d test001
Table "public.test001"
Column | Type | Modifiers
--------+---------+-----------
id | integer | not null
code | integer |
Indexes:
"test001_pkey" PRIMARY KEY, btree (id)
testing_internals=# SELECT
pg_relation_filenode('test001'),pg_relation_filepath('test001');
pg_relation_filenode | pg_relation_filepath
----------------------+----------------------
16465 | base/16407/16465
(1 row)
testing_internals=# SELECT
pg_relation_filenode('test001_pkey'),pg_relation_filepath('test001_pkey');
pg_relation_filenode | pg_relation_filepath
----------------------+----------------------
16468 | base/16407/16468
(1 row)
postgres@server01:/var/pgsql$ ls -l base/16407/16465
-rw------- 1 postgres nogroup 0 2011-10-06 12:09 base/16407/16465
postgres@server01:/var/pgsql$ ls -l base/16407/16468
16
-rw------- 1 postgres nogroup 8192 2011-10-06 12:09 base/16407/16468
Si esta tabla o índice llegasen a ser mayores que 1GB, se dividirian a nivel del
sistema de ficheros en ficheros con un máximo de 1GB cada uno. Si por
ejemplo, nuestra tabla llegase a ser de 3,5GB, veriamos algo similar a esto:
[postgres@server]$ ls -l base/16407/16465*
18
- postgresql.conf: define la configuración por defecto del servidor
- puerto de escucha
- parámetros de uso de memoria
- configuración del log
- configuración del idioma- etc.
- Los binarios:
root@3ODI-009:~# ls /opt/PostgreSQL/9.1/bin/
clusterdb ecpg pg_controldata pg_test_fsync psql
createdb initdb pg_ctl pg_upgrade psql.bin
createlang oid2name pg_dump pltcl_delmod reindexdb
createuser pg_archivecleanup pg_dumpall pltcl_listmod vacuumdb
dropdb pg_basebackup pg_resetxlog pltcl_loadmod vacuumlo
droplang pgbench pg_restore Postgres
dropuser pg_config pg_standby postmaster
/opt/PostgreSQL/9.1/bin/psql -U postgres
root@3ODI-009:~# psql
El programa «psql» no está instalado. Puede instalarlo escribiendo:
apt-get install postgresql-client-common
21