1.1. Fundamentos de sistemas operativos

 

Tutorial Práctico: Sistemas Operativos en Contexto SQL

1. ¿Cómo interactúa SQL con el Sistema Operativo?

Ejemplo 1: Archivos de Base de Datos en el Sistema de Archivos

sql

-- Muchos sistemas de bases de datos almacenan datos en archivos del SO


-- En PostgreSQL, puedes ver la ubicación de los archivos:

SHOW data_directory;


-- Ejemplo de salida:

-- /var/lib/postgresql/14/main


-- En MySQL:

SHOW VARIABLES LIKE 'datadir';

Estructura típica en el sistema de archivos:

text

/var/lib/mysql/

├── tienda/           # Base de datos

│   ├── productos.frm # Estructura de tabla

│   ├── productos.ibd # Datos e índices

│   └── db.opt        # Opciones

├── ibdata1          # Tablespace global

└── ib_logfile0      # Logs de transacciones


2. Ejemplo 2: Procesos del Sistema Operativo

Ver procesos de base de datos en Linux:

bash

# Desde la terminal del SO

ps aux | grep mysql


# Salida ejemplo:

# mysql    12345  0.5  2.1 1023456 54321 ?  Ssl  Mar05  45:30 /usr/sbin/mysqld

En SQL, podemos ver conexiones activas:

sql

-- MySQL

SHOW PROCESSLIST;


-- PostgreSQL

SELECT * FROM pg_stat_activity;


-- SQL Server

EXEC sp_who;

Ejemplo de salida:

text

+----+------+-----------------+--------+---------+------+-------+------------------+

| Id | User | Host            | db     | Command | Time | State | Info             |

+----+------+-----------------+--------+---------+------+-------+------------------+

| 5  | root | localhost:1234  | tienda | Query   | 0    | NULL  | SHOW PROCESSLIST |

| 6  | app  | 192.168.1.100   | tienda | Sleep   | 15   | NULL  | NULL             |

+----+------+-----------------+--------+---------+------+-------+------------------+


3. Ejemplo 3: Memoria y Almacenamiento

Configuración de memoria desde SQL:

sql

-- MySQL: Ver configuración de memoria

SHOW VARIABLES LIKE '%buffer%';


-- PostgreSQL

SHOW shared_buffers;

SHOW work_mem;


-- SQL Server

SELECT * FROM sys.configurations 

WHERE name LIKE '%memory%';

Ejemplo práctico - Crear tabla y ver uso de disco:

sql

-- Crear tabla con diferentes tipos de datos

CREATE TABLE ejemplo_sistema (

    id INT PRIMARY KEY,

    nombre VARCHAR(100),

    contenido TEXT,

    fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,

    archivo BLOB

);


-- Insertar datos de diferente tamaño

INSERT INTO ejemplo_sistema (id, nombre, contenido) 

VALUES (1, 'pequeño', REPEAT('A', 100));  -- 100 bytes


INSERT INTO ejemplo_sistema (id, nombre, contenido)

VALUES (2, 'grande', REPEAT('B', 10000)); -- 10KB


-- En el sistema operativo puedes ver el archivo crecer


4. Ejemplo 4: Permisos del Sistema Operativo vs Permisos de Base de Datos

Niveles de seguridad:

text

Sistema Operativo (Linux/Windows)

    ↓

Usuario del SO (mysql, postgres)

    ↓

Proceso de Base de Datos

    ↓

Usuarios de Base de Datos

    ↓

Permisos sobre Tablas

Ejemplo práctico - Backup:

sql

-- Desde la base de datos (MySQL)

-- Crear backup lógico

SELECT * INTO OUTFILE '/tmp/productos_backup.csv'

FIELDS TERMINATED BY ',' 

ENCLOSED BY '"'

LINES TERMINATED BY '\n'

FROM productos;


-- Para restaurar

LOAD DATA INFILE '/tmp/productos_backup.csv'

INTO TABLE productos

FIELDS TERMINATED BY ',' 

ENCLOSED BY '"'

LINES TERMINATED BY '\n';

Permisos requeridos en el SO:

bash

# El usuario mysql necesita permisos en /tmp

ls -la /tmp/productos_backup.csv

# -rw-rw-r-- 1 mysql mysql 1024 Mar 10 10:30 productos_backup.csv


5. Ejemplo 5: Programación de Tareas (Cron/Planificador)

Tarea 1: Backup automático desde el SO

bash

# En Linux (crontab -e)

0 2 * * * mysqldump -u root -pPassword123 tienda > /backups/tienda_$(date +\%Y\%m\%d).sql

Tarea 2: Mantenimiento desde eventos de SQL

sql

-- Crear evento en MySQL

CREATE EVENT limpieza_diaria

ON SCHEDULE EVERY 1 DAY

STARTS '2024-03-10 03:00:00'

DO

BEGIN

    -- Eliminar registros antiguos

    DELETE FROM logs WHERE fecha < DATE_SUB(NOW(), INTERVAL 30 DAY);

    

    -- Optimizar tablas

    OPTIMIZE TABLE logs, temporal_data;

END;


6. Ejemplo 6: Manejo de Archivos desde SQL

Ejemplo en PostgreSQL (funciones de archivo):

sql

-- Leer archivo del sistema desde SQL

CREATE TABLE archivos_sistema AS

SELECT pg_read_file('/etc/hostname') as hostname;


-- Escribir resultados a archivo

COPY (SELECT * FROM productos) 

TO '/var/lib/postgresql/backup/productos.csv' 

WITH CSV HEADER;

Ejemplo en SQL Server:

sql

-- Leer archivo usando xp_cmdshell

EXEC xp_cmdshell 'dir C:\Backups\';


-- Escribir query a archivo

EXEC xp_cmdshell 'bcp "SELECT * FROM tienda.dbo.productos" queryout "C:\export\productos.csv" -c -t, -S localhost -U sa'


7. Ejemplo 7: Variables de Entorno y Configuración

Acceder a variables del SO desde SQL:

sql

-- MySQL: Ver variables del sistema

SHOW VARIABLES LIKE 'tmpdir';

SHOW VARIABLES LIKE 'socket';


-- PostgreSQL

SHOW data_directory;

SHOW config_file;


-- Usar rutas del sistema en sentencias

-- Backup a directorio temporal específico

SELECT * INTO OUTFILE '/tmp/mysql_backup/productos.txt'

FROM productos;


8. Ejemplo Práctico: Sistema de Monitoreo

Tabla para monitoreo del sistema:

sql

CREATE TABLE monitoreo_sistema (

    id SERIAL PRIMARY KEY,

    timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,

    conexiones_activas INT,

    memoria_usada_mb DECIMAL(10,2),

    espacio_disco_gb DECIMAL(10,2),

    carga_sistema DECIMAL(5,2)

);


-- Procedimiento que simula recolección de métricas

DELIMITER //

CREATE PROCEDURE recolectar_metricas()

BEGIN

    INSERT INTO monitoreo_sistema 

    (conexiones_activas, memoria_usada_mb, espacio_disco_gb, carga_sistema)

    VALUES (

        (SELECT COUNT(*) FROM information_schema.PROCESSLIST),

        (SELECT VARIABLE_VALUE/1024/1024 

         FROM information_schema.GLOBAL_STATUS 

         WHERE VARIABLE_NAME = 'Innodb_buffer_pool_bytes_data'),

        (SELECT 100 - (VARIABLE_VALUE/1024/1024/1024)

         FROM information_schema.GLOBAL_VARIABLES

         WHERE VARIABLE_NAME = 'innodb_data_file_path'),

        0.5 -- Simulación de carga

    );

END //

DELIMITER ;


9. Ejercicio Práctico Integrado

Paso 1: Crear estructura en el sistema de archivos

bash

# Desde el SO

mkdir -p /opt/basedatos/archivos

chown mysql:mysql /opt/basedatos/archivos

Paso 2: Crear tabla con referencia a archivos externos

sql

CREATE TABLE documentos (

    id INT PRIMARY KEY AUTO_INCREMENT,

    nombre VARCHAR(255),

    ruta_archivo VARCHAR(500),  -- Ruta en el sistema de archivos

    tamano_bytes BIGINT,

    fecha_subida TIMESTAMP DEFAULT CURRENT_TIMESTAMP

);


-- Insertar referencia a archivo del sistema

INSERT INTO documentos (nombre, ruta_archivo, tamano_bytes)

VALUES (

    'Configuración del servidor',

    '/opt/basedatos/archivos/config.txt',

    1024

);

Paso 3: Consulta que involucra sistema de archivos

sql

-- Reporte de uso de espacio

SELECT 

    TABLE_NAME as Tabla,

    ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024, 2) as Tamaño_MB,

    TABLE_ROWS as Filas

FROM information_schema.TABLES 

WHERE TABLE_SCHEMA = 'tienda'

ORDER BY Tamaño_MB DESC;


10. Comandos Útiles del SO para Administradores de Bases de Datos

Linux:

bash

# Monitorear uso de disco por la base de datos

du -sh /var/lib/mysql/*


# Ver uso de memoria

free -h


# Monitorear I/O

iotop -u mysql


# Ver logs de la base de datos

tail -f /var/log/mysql/error.log

Windows:

cmd

# Ver servicios de base de datos

sc query | findstr SQL


# Monitorear recursos

perfmon


# Ver espacio en disco

wmic logicaldisk get size,freespace,caption


Resumen de Conceptos Clave:

  1. Archivos: Las bases de datos almacenan datos en archivos del SO

  2. Procesos: Cada conexión cliente-servidor es un proceso/hilo del SO

  3. Memoria: El SGBD usa memoria RAM gestionada por el SO

  4. Permisos: Doble capa (SO + base de datos)

  5. Tareas: Programación en ambos niveles (cron/SQL Agent vs eventos)

  6. Monitoreo: Métricas del SO complementan métricas de SQL


Consejo Final: Un buen administrador de bases de datos debe entender tanto SQL como los fundamentos del sistema operativo donde corre su base de datos.


Comentarios

Entradas más populares de este blog

1-3-¿Qué es SQL?

6-8-Proyecto del Día 1

5-7. MySQL y MySQL Workbench