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:
Archivos: Las bases de datos almacenan datos en archivos del SO
Procesos: Cada conexión cliente-servidor es un proceso/hilo del SO
Memoria: El SGBD usa memoria RAM gestionada por el SO
Permisos: Doble capa (SO + base de datos)
Tareas: Programación en ambos niveles (cron/SQL Agent vs eventos)
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
Publicar un comentario