Administración de Bases de Datos-Postgresql

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 22

Trabajo de práctica e investigación

Administración de Bases de
Datos
Unidad III - Configuración y
administración del espacio
en disco.

Por: Erika López Antonio y Felipe


Campos León
1. DESCRIBA LA ESTRUCTURA LÓGICA Y FÍSICA QUE UTILIZA EL DBMS.

ESTRUCTURA LÓGICA EN POSTGRES

 Libpq
 Postmaster
 Postgres
 Gestor de almacenamiento

Libpq

Es la interfaz para los programadores de aplicaciones


en C para PostgreSQL. Libpq es un conjunto de rutinas de biblioteca que permiten
a los programas cliente trasladar consultas al servidor de Postgres y recibir el
resultado de esas consultas.

El Libpq es el responsable de manipular las comunicaciones entre la aplicación


1
cliente y el postmaster (servicio del PostgreSQL en el servidor).

El server está compuesto por 2 grandes subsistemas, el “Postmaster” que es el


responsable de aceptar las comunicaciones con el cliente y autentificar y dar
acceso. El “Postgres” se encarga de la administración de los querys y comandos
enviados por el cliente. PostgreSQL trabaja bajo el concepto de “process per
user”, eso significa un solo procesos cliente por conexión. Tanto el Postmaster
como el Postgres deben estar junto en el mismo servidor siempre.

../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.

postmaster [-A 0 | 1] [-B nBuffers ] [-c nombre = valor ] [-d debug nivel ] [-


D datadir ] [-f] [-h hostname ] [-i] [-k directorio ] [-l] [-N max-connections ] [-o -
opciones adicionales ] [-p puerto ] [-S] [- nombre = valor ] [-n |-s]

ESTRUCTURA FISICA EN POSTGRES


 Ficheros
 Directorios
 Creación del clúster de bases de datos: initdb
Initdb

Initdb crea un nuevo PostgreSQL clúster de base de datos. Un cluster de base de


datos es un conjunto de bases de datos que son gestionados por una única
instancia de servidor.

Creación de un clúster de base de datos2consiste en la creación de los directorios


en los que vivirán los datos de base de datos, la generación de las tablas de
catálogos compartidos (tablas que pertenecen a todo el conjunto y no a una
determinada base de datos), y la creación de la template1 y postgres bases de
datos. Cuando más tarde crea una nueva base de datos, todo en
el template1 base de datos se copia. (Por lo tanto, nada instalado en template1 se
copia automáticamente en cada base de datos creada posteriormente.)
El postgres base de datos es una base de datos por omisión destinado a su
utilización por los usuarios, servicios y aplicaciones de terceros.

initdb [ opción ...] [ - pgdata | -D ] directorio

2. CUÁLES SON LAS DIFERENTES ESTRUCTURAS LÓGICAS DE


ALMACENAMIENTO QUE SE MANEJAN Y SU RELACIÓN CON EL SO.

Almacenamiento y organización de datos


La data en cualquier DBMS se almacena en pequeños bloques de disco llamadas
“páginas”.

Estás “páginas” se guardan en un disco en diferentes posiciones físicas, mucha


dispersión creará una baja performance en la DBMS.

3 puede ser tan pequeño como 8k


El tamaño de una página en PostgreSQL
(por defecto) hasta un máximo de 32k y no se permite que un tupla pueda ser mas
grande que una página de tamaño.

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.

Los módulos se programaron bajo 3 lineamientos bien claros:

● Manejar transacciones sin necesidad de escribir código complejo de


recuperación en caso de caídas.

● Mantener versiones históricas de la data bajo el concepto de “graba una vez, lee
muchas veces”.

● Tomar las ventajas que ofrece el hardware especializado como


multiprocesadores, memoria no volátil, etc.

Los módulos que componen el Storage Manager son:

●Transaction System

●Relational Storage
4
●Time Management

●Concurrency Control y Timestamp Management

●Record Acces

PostgreSQL siempre está añadiendo data, la data modificada o borrada realmente


no se modifica o se borra, las páginas donde ellas están almacenadas se marca
como “no visible” y se inserta un nuevo registro completo con un clon de toda la
data

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:

● Tiempo de búsqueda del OS en mover los brazos del disco duro.


● Tiempo de rotación de los discos para que el brazo encuentre la posición física
donde está la data.

● Tiempo de transferencia de R/W de la data del disco a la memoria.

Hay que buscar que reducir este tiempo para que el acceso a la data sea más
rápido.

3. COMANDOS (PASOS) UTILIZADOS PARA REVISAR LA ESTRUCTURA


LÓGICA Y FÍSICA DE LA BASE DE DATOS EN EL SISTEMA MANEJADOR DE
BASE DE DATOS.
Como procesar un Query

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.

Luego pasa por:


● Un identificador de reglas de que lo escrito sea sintácticamente entendible, que
los dígitos y los números sean reconocibles.
● Luego se descompone “palabra” a “palabra” el query para pasar a la estructura
que le corresponde según el query, en este caso a la estructura de un “select”,
esto se ve así:
4. DESCRIBA LOS PASOS PARA AGREGAR MÁS ESPACIO A LA BASE DE
DATOS.
La instalación de ArcSDE en Linux incluye una secuencia de comandos
(setup_pgdb.sde) para crear el espacio de tabla, la base de datos, el usuario sde y
el correspondiente esquema de PostgreSQL en Linux.

La secuencia de comandos setup_pgdb.sde también instala el lenguaje


PL/pgSQL. 7
Pasos:

1. Inicie sesión en psql como el superusuario postgres y cree el usuario


administrador de ArcSDE. El usuario debe crearse con el nombre sde,
pero se puede elegir cualquier contraseña.

CREATE ROLE sde LOGIN PASSWORD <password> SUPERUSER


NOINHERIT CREATEDB;

2. Si desea almacenar la base de datos utilizada para la geodatabase de


ArcSDE en un espacio de tabla distinto al predeterminado (pg_default),
cree un nuevo espacio de tabla en un directorio vacío.
En el ejemplo siguiente, se crea el espacio de tabla sde1 en el
directorio sde de un servidor de 32 bits. El espacio de tabla pertenece
al usuario sde.

CREATE TABLESPACE sde1 OWNER sde LOCATION


'/var/lib/pgsql/data/sde';

3. Cree una base de datos y otorgue al usuario sde acceso completo a la


misma.
El acceso completo es necesario para que el usuario sde cree la geodatabase.

La instalación de ArcSDE en Linux incluye una secuencia de comandos


(setup_pgdb.sde) para crear el espacio de tabla, la base de datos, el usuario sde y
el correspondiente esquema de PostgreSQL en Red Hat Linux. Puede utilizar la
secuencia de comandos incluida en el soporte de la instalación o realizar estos
pasos manualmente. Para obtener más información acerca de la instalación de
PostgreSQL, consulte la documentación de PostgreSQL.
8
La secuencia de comandos setup_pgdb.sde también instala el lenguaje
PL/pgSQL.

Pasos:

1. Inicie sesión en psql como el superusuario postgres y cree el usuario


administrador de ArcSDE. El usuario debe crearse con el nombre sde,
pero se puede elegir cualquier contraseña.

CREATE ROLE sde LOGIN PASSWORD <password> SUPERUSER


NOINHERIT CREATEDB;

2. Si desea almacenar la base de datos utilizada para la geodatabase de


ArcSDE en un espacio de tabla distinto al predeterminado (pg_default),
cree un nuevo espacio de tabla en un directorio vacío.
En el ejemplo siguiente, se crea el espacio de tabla sde1 en el
directorio sde de un servidor de 32 bits. El espacio de tabla pertenece
al usuario sde.

CREATE TABLESPACE sde1 OWNER sde LOCATION


'/var/lib/pgsql/data/sde';

3. Cree una base de datos y otorgue al usuario sde acceso completo a la


misma.

El acceso completo es necesario para que el usuario sde cree la


geodatabase.
En este ejemplo, la base de datos de la agencia pertenece al usuario
sde, utiliza la codificación de caracteres UTF8 y se almacena en el
espacio de tabla sde1.

CREATE DATABASE agency OWNER sde ENCODING 'UTF8'


9 ALL ON DATABASE agency TO sde;
TABLESPACE sde1; GRANT

4. Otorgue privilegios de usuario a los roles y grupos públicos o


específicos, de modo que otros usuarios puedan acceder a la base de
datos.

GRANT USAGE ON DATABASE agency TO public;

5. Inicie sesión en la base de datos como el superusuario postgres para


crear el esquema del usuario sde. Éste es el esquema en el que se
almacena el repositorio de la geodatabase de ArcSDE. El nombre del
esquema debe ser sde.

\c agency CREATE SCHEMA sde AUTHORIZATION sde;


6. Otorgue al usuario sde privilegios completos para el esquema sde.

GRANT ALL ON SCHEMA sde TO sde;

7. Otorgue uso a los roles y grupos públicos o específicos para acceder al


esquema sde.

Cualquier usuario que interactúe con la geodatabase debe disponer de


privilegios de uso del esquema sde.

GRANT USAGE ON SCHEMA sde TO public;

8. Si está utilizando el tipo de geometría PostGIS, también debe otorgar


los privilegios SELECT, INSERT, UPDATE y DELETE a sde en la tabla
public.geometry_columns.

GRANT SELECT, INSERT,


10 UPDATE, DELETE ON TABLE
public.geometry_columns TO sde;

9. Asimismo, si está utilizando el tipo de geometría PostGIS, otorgue


SELECT a sde en la tabla public.spatial_ref_sys.

GRANT SELECT ON TABLE public.spatial_ref_sys TO sde;

Cree otros usuarios para acceder a datos y manipularlos en la base de datos.

4. CON FUNCIONA Y DONDE SE UBICA LA BITÁCORA DE LA BASE DE


DATOS. COMO SE FORMAN LOS NOMBRES DE LOS ARCHIVOS EN
EL SO.
Una base de datos tiene toda la información que necesita para funcionar
grabada en nuestro disco duro. PostgreSQL no es una excepción.

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=# SHOW data_directory;


data_directory
11
----------------
/var/pgsql
(1 row)

Dentro del directorio de datos encontraremos varios subdirectorios con


diferentes cometidos.

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.

En el sistema utilizado para este artículo tenemos lo siguiente en este


directorio:

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:

postgres=# SELECT datid,datname from pg_stat_database;


datid | datname
-------+-----------
1 | template1
11939 | template0
11947 | postgres
(5 rows)

Los valores en la columna datid, corresponden a los valores listados en el


13
subdirectoriobase y la columna datname es el nombre de la base de datos
asociada al identificador numérico.

Vamos a crear una base de datos para nuestros ejemplos y a ver como esto
afecta a nuestro sistema.

postgres=# CREATE DATABASE testing_internals;


CREATE DATABASE

Podemos ver como se ha creado un nuevo subdirectorio con el nombre 16407,


correspondiente a la nueva base de datos creada.

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

postgres=# SELECT datid,datname from pg_stat_database;


datid | datname
-------+-------------------
1 | template1
11939 | template0
11947 | postgres
16407 | testing_internals
(4 rows)
14

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=# CREATE TABLE test001 ( id INTEGER, code INTEGER,


primary key(id));
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index
"test001_pkey" for table "test001"
CREATE TABLE

testing_internals=# \d test001
Table "public.test001"
Column | Type | Modifiers
--------+---------+-----------
id | integer | not null
code | integer |
Indexes:
"test001_pkey" PRIMARY KEY, btree (id)

El identificador de la tabla test001 y el fichero correspondiente lo podemos


obtener por ejemplo de esta manera:15

testing_internals=# SELECT
pg_relation_filenode('test001'),pg_relation_filepath('test001');

pg_relation_filenode | pg_relation_filepath
----------------------+----------------------
16465 | base/16407/16465
(1 row)

Y el del índice test001_pkeycreado para clave primaria de esta tabla con:

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)

Si hacemos un listado del contenido del directorio de nuestra base de datos


(base/16407) podremos ver que se han creado dos nuevos ficheros con los
nombres 16465 y 16468.

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*

-rw------- 1 postgres pgdba 1073741824 Jul 5 15:11 base/16407/16465


-rw------- 1 postgres pgdba 1073741824 Jul 6 15:11 base/16407/16465.1
-rw------- 1 postgres pgdba 1073741824 Jul 7 15:11 base/16407/16465.2
-rw------- 1 postgres pgdba 536870912 Jul 8 15:11 base/16407/16465.3

6. COMO ES ADMINISTRADA LA MEMORIA EN LA INSTANCIA DE LA BASE


DE DATOS, PARA USUARIOS Y PROCESOS PROPIOS DEL DBMS.
1.-Primero verificamos si está instalado,echando un vistazo a los procesos:
ps auxww | grep ^postgres
o chequeando el status, si lo esta, nos mostrara el process ID:
/etc/init.d/postgresql-9.1 status
pg_ctl: server is running (PID: 4449)
Nos indica el PID del servidor que esta levantado contra el cluster. Si no, muestra
algo similar a lo siguiente:
root@3ODI-009:/# /etc/init.d/postgresql-9.1 status
bash: /etc/init.d/postgresql-9.1: No existe el archivo o el directorio

2.- nos movemos al directorio donde se encuentre, en mi caso está en el escritorio


cd /home/usuario/Escritorio
- lo hacemos ejecutable
chmod +x postgresql-9.1.4-1-linux-x64.run
(ejecutar la versión de 32 bits o la de 64 dependiendo del sistema operativo
instalado)
17
- lo ejecutamos
sudo ./postgresql-9.1.4-1-linux-x64.run

Clic aquí para mostrar/ocultar imágenes de la instalación

- luego de que termina el proceso de instalación, se inicia el servidor y se crea el


desinstalador (uninstall-postgresql)
- Directorio de instalación: si nos vamos al directorio donde instalamos el
servidor, veremos lo siguiente:
root@3ODI-009:~# ls /opt/PostgreSQL/9.1
bin   doc      installer  pgAdmin3   scripts  stackbuilder
data  include  lib      pg_env.sh  share    uninstall-postgresql

- veamos una descripción de los directorios en /opt/PostgreSQL/9.1:


- bin: almacena los archivos ejecutables del sistema, psql, postgres, pg_ctl, etc.
- doc: documentación del sistema.
- include: almacena archivos (de extensión .h) para C/C++
- lib: librerías del sistema 
- man: manuales de los comandos
- share: archivos adicionales
- data: donde reside el cluster de PostgreSQL
- el cluster:
root@3ODI-009:~# ls /opt/PostgreSQL/9.1/data
base     pg_hba.conf    pg_multixact  pg_stat_tmp  pg_twophase    postgresql.conf
global     pg_ident.conf    pg_notify     pg_subtrans  PG_VERSION    
postmaster.opts
pg_clog  pg_log        pg_serial     pg_tblspc    pg_xlog    postmaster.pid

dos archivos que tocaremos mucho ya sea para configurar PostgreSQL o el nivel


de acceso, serán postgresql.conf y pg_hba.conf respectivamente.

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.

pg_hba.conf: permite restringir el acceso según:


- dirección IP del cliente.
- bases de Datos.
- nombre de usuarios y grupos.
- Requiere un reload para los cambios.

- 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

psql es el cliente interactivo de línea de comandos de PostgreSQL.

Luego de que termina la instalación, podemos acceder a psql colocando la ruta


donde se encuentra instalado e indicandole con que usuario deseamos
loguearnos:

/opt/PostgreSQL/9.1/bin/psql -U postgres

Es necesario declarar las variables de entorno requeridas por PostgreSQL, para


eso, editamos el archivo de configuración
19del interprete de comandos (.bashrc) y
conseguiremos no sólo lo primero, sino, poder acceder a psql colocando
unicamente "psql" en la consola y el password del usuario por defecto.

¿Qué pasa si coloco psql en la consola sin haber editado el .bashrc?


hay que indicarle al interprete de comandos donde se encuentra el psql instalado
o nos mostrará un bonito mensaje:

root@3ODI-009:~# psql
El programa «psql» no está instalado.  Puede instalarlo escribiendo:
apt-get install postgresql-client-common

En este caso, el psql si se encuentra instalado, pero el interprete de comandos no


sabe donde se encuentra, así que (en el caso de Ubuntu) nos vamos
a /home/tu_usuario/, y presionamos CTRL+H, o nos vamos a menú -> ver ->
mostrar los archivos ocultos y buscamos el archivo .bashrc.
.bashrc: es el archivo de configuración de la terminal, se ejecuta cuando abrimos
la consola, en el podemos indicar entre otras cosas, atajos a determinados
comandos, automatizar procesos, etc. Si no encuentras el archivo .bashrc en la
carpeta indicada, no hay problema, creamos uno nuevo, abrimos el gedit y
agregamos la siguiente linea:
# le indicamos donde están nuestras variables de entorno
. /opt/PostgreSQL/9.1/pg_env.sh

Guardamos y listo, como hemos editado el archivo de configuración, ahora


debemos cerrar la terminal y abrirla de nuevo para poder correr los cambios, así
que lo hacemos y continuamos:
root@3ODI-009:~# psql
Password: 
psql.bin (9.1.4)
Type "help" for help.
20
postgres=#

Ya podemos interactuar con PostgreSQL a través del cliente psql.


Dentro del pg_env.sh encontraremos algo similar a lo siguiente:
#!/bin/sh
# The script sets environment variables helpful for PostgreSQL
export PATH=/opt/PostgreSQL/9.1/bin:$PATH
export PGDATA=/opt/PostgreSQL/9.1/data
export PGDATABASE=Postgres
export PGUSER=Postgres
export PGPORT=5432
export PGLOCALEDIR=/opt/PostgreSQL/9.1/share/locale
export MANPATH=$MANPATH:/opt/PostgreSQL/9.1/share/man

Al tener las variables definidas en el pg_env.sh, nos evitamos tener que


exportarlas siempre que sean requeridas, en cualquier momento se puede
acceder a su contenido con un simple echo:
root@3ODI-009:~# echo $PGDATA;
/opt/PostgreSQL/9.1/data

21

También podría gustarte