Arxius de configuració
Introducció
Cada motor de bases de dades gestiona la seva configuració a través d'un conjunt de fitxers de text estructurats. Conèixer la ubicació i el propòsit de cadascun és fonamental per a qualsevol DBA, ja que la majoria d'incidències en producció es resolen editant aquests fitxers.
Edició d'arxius de configuració
Feu sempre una còpia de seguretat del fitxer original abans d'editar-lo:
Un error de sintaxi en el fitxer de configuració pot impedir que el SGBD arrenqui.Arxius principals per motor
PostgreSQL utilitza tres fitxers de configuració principals:
| Fitxer | Propòsit |
|---|---|
postgresql.conf |
Paràmetres generals del servidor |
pg_hba.conf |
Autenticació de clients (Host-Based Authentication) |
pg_ident.conf |
Mapatge d'identitats de sistema operatiu a rols PostgreSQL |
Ubicacions habituals:
# Instal·lació via apt (Ubuntu/Debian)
/etc/postgresql/16/main/postgresql.conf
/etc/postgresql/16/main/pg_hba.conf
/etc/postgresql/16/main/pg_ident.conf
# Instal·lació Docker (per defecte PGDATA)
/var/lib/postgresql/data/postgresql.conf
/var/lib/postgresql/data/pg_hba.conf
/var/lib/postgresql/data/pg_ident.conf
Per trobar la ubicació des de psql:
MySQL/MariaDB llegeix la configuració d'un conjunt de fitxers en ordre de precedència:
| Prioritat | Fitxer | SO |
|---|---|---|
| 1 | /etc/my.cnf |
Linux (global) |
| 2 | /etc/mysql/my.cnf |
Linux (Debian/Ubuntu) |
| 3 | /etc/mysql/conf.d/*.cnf |
Linux (Debian, fragments) |
| 4 | /etc/mysql/mysql.conf.d/*.cnf |
Linux (Ubuntu, fragments) |
| 5 | ~/.my.cnf |
Linux (usuari) |
| 6 | C:\ProgramData\MySQL\my.ini |
Windows |
Comprovar quins fitxers es llegeixen:
SQL Server no usa fitxers .conf tradicionals a Windows; la configuració rau al registre. A Linux:
| Fitxer / Eina | Ubicació | Notes |
|---|---|---|
mssql.conf |
/var/opt/mssql/mssql.conf |
Linux: paràmetres de servidor |
| SQL Server Configuration Manager | Eina GUI Windows | Serveis, protocols, ports |
sp_configure |
Procediment emmagatzemat SQL | Paràmetres en temps d'execució |
| Registre Windows | HKLM\SOFTWARE\Microsoft\MSSQLServer |
Windows: configuració avançada |
Per veure la configuració actual a Linux:
Oracle pot usar dos tipus de fitxer de paràmetres:
| Fitxer | Tipus | Notes |
|---|---|---|
init<SID>.ora |
PFILE (text) | Llegible/editable directament |
spfile<SID>.ora |
SPFILE (binari) | Gestionat per Oracle, canvis via ALTER SYSTEM |
listener.ora |
Text | Configuració del listener de xarxa |
tnsnames.ora |
Text | Noms de servei i adreces de connexió |
sqlnet.ora |
Text | Paràmetres de xarxa SQLNet |
Ubicació habitual:
Paràmetres més importants
postgresql.conf — Paràmetres clau
# ===== CONNEXIONS =====
listen_addresses = 'localhost' # '*' per escoltar a totes les interfícies
port = 5432
max_connections = 100
# ===== MEMÒRIA =====
shared_buffers = 256MB # 25% de la RAM total
work_mem = 4MB # Per connexió, per operació
maintenance_work_mem = 64MB
effective_cache_size = 768MB # Estimació de RAM del SO per a caché
# ===== WAL (Write-Ahead Log) =====
wal_level = replica # minimal | replica | logical
max_wal_size = 1GB
min_wal_size = 80MB
checkpoint_completion_target = 0.9
# ===== LOGS =====
logging_collector = on
log_directory = 'log'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_rotation_age = 1d
log_rotation_size = 100MB
log_min_duration_statement = 1000 # Registra consultes > 1 segon (ms)
log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h '
log_connections = off
log_disconnections = off
log_lock_waits = on
# ===== RENDIMENT =====
random_page_cost = 1.1 # Per a SSDs (4.0 per a HDD)
effective_io_concurrency = 200 # Per a SSDs
default_statistics_target = 100
# ===== AUTOVACUUM =====
autovacuum = on
autovacuum_max_workers = 3
autovacuum_naptime = 1min
pg_hba.conf — Autenticació de clients
El fitxer pg_hba.conf controla qui es pot connectar, des d'on i amb quin mètode d'autenticació:
# Tipus Base de dades Usuari Adreça Mètode
# ---------------------------------------------------------------
# Connexions locals via socket Unix
local all postgres peer
local all all scram-sha-256
# Connexions locals via TCP/IP
host all all 127.0.0.1/32 scram-sha-256
host all all ::1/128 scram-sha-256
# Accés des de la xarxa local (exemple: 192.168.1.0/24)
host empresa app_user 192.168.1.0/24 scram-sha-256
# Replicació
local replication postgres peer
host replication replica 192.168.1.10/32 scram-sha-256
Mètodes d'autenticació a pg_hba.conf
trust— Accés sense contrasenya (PERILLÓS en xarxa)reject— Denegació semprepeer— Verificació per nom d'usuari del SO (només connexions locals)scram-sha-256— Autenticació per contrasenya xifrada (recomanat)md5— Autenticació per contrasenya (llegat, menys segur)ldap— Autenticació via servidor LDAP
my.cnf — Seccions principals de MySQL
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
# Configuració bàsica
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
tmpdir = /tmp
port = 3306
bind-address = 127.0.0.1 # '0.0.0.0' per a accés extern
# Codificació
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
# InnoDB
innodb_buffer_pool_size = 1G
innodb_buffer_pool_instances = 2
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 1 # 1=màxima durabilitat, 2=rendiment
innodb_flush_method = O_DIRECT
# Connexions
max_connections = 200
wait_timeout = 600
interactive_timeout = 600
# Logs
general_log = 0
general_log_file = /var/log/mysql/mysql.log
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 2 # Consultes > 2 segons
log_error = /var/log/mysql/error.log
# Seguretat
local-infile = 0 # Desactivar LOAD DATA LOCAL INFILE
mssql.conf — SQL Server a Linux
[EULA]
accepteula = Y
[sqlagent]
enabled = true
[network]
tlscert = /etc/ssl/certs/mssql.pem
tlskey = /etc/ssl/private/mssql.key
tlsprotocols = 1.2
forceencryption = 0
[memory]
memorylimitmb = 3072 # Límit de memòria en MB per a SQL Server
[filelocation]
defaultdatadir = /var/opt/mssql/data/
defaultlogdir = /var/opt/mssql/data/
defaultbackupdir = /var/opt/mssql/backup/
[telemetry]
customerfeedback = false
[hadr]
hadrenabled = 0
Canviar paràmetres via mssql-conf:
sudo /opt/mssql/bin/mssql-conf set memory.memorylimitmb 3072
sudo /opt/mssql/bin/mssql-conf set sqlagent.enabled true
sudo systemctl restart mssql-server
init.ora / SPFILE — Oracle
-- Veure tots els paràmetres actuals
SELECT name, value, description, isdefault
FROM v$parameter
ORDER BY name;
-- Veure paràmetres no-defaults
SELECT name, value
FROM v$parameter
WHERE isdefault = 'FALSE'
ORDER BY name;
-- Modificar un paràmetre en el SPFILE (persistent, requereix reinici)
ALTER SYSTEM SET db_cache_size = 500M SCOPE = SPFILE;
-- Modificar un paràmetre en memòria (efectiu ara, no persistent)
ALTER SYSTEM SET log_archive_dest_1 = 'LOCATION=/opt/oracle/archive' SCOPE = MEMORY;
-- Modificar un paràmetre a ambdós (SPFILE + memòria activa, si el paràmetre ho permet)
ALTER SYSTEM SET pga_aggregate_target = 400M SCOPE = BOTH;
-- Crear un PFILE a partir del SPFILE actual (per a edició manual)
CREATE PFILE = '/tmp/init_backup.ora' FROM SPFILE;
Ubicació dels arxius de log
# Ubicació dels logs (si logging_collector = on)
# Variable log_directory relativa a data_directory
/var/lib/postgresql/data/log/
# Des de psql
SHOW log_directory;
SHOW log_filename;
# Veure els últims errors des del contenidor
docker logs postgres16 --tail 50
# O directament al fitxer
tail -f /var/lib/postgresql/data/log/postgresql-$(date +%Y-%m-%d)*.log
# Log d'errors (el més important)
/var/log/mysql/error.log
# Log de consultes lentes
/var/log/mysql/mysql-slow.log
# Log binari (per a replicació i PITR)
/var/lib/mysql/mysql-bin.000001
/var/lib/mysql/mysql-bin.index
# Des de MySQL
SHOW VARIABLES LIKE '%log%';
SHOW VARIABLES LIKE 'log_error';
# Veure des del contenidor Docker
docker logs mysql8 --tail 50
# Logs de SQL Server a Linux
/var/opt/mssql/log/errorlog # Log principal d'errors
/var/opt/mssql/log/errorlog.1 # Log anterior
/var/opt/mssql/log/sqlagent.out # Log de l'agent SQL
# Des de SQL (T-SQL)
EXEC xp_readerrorlog 0, 1, NULL, NULL, NULL, NULL, 'DESC';
GO
# O via Dynamic Management View
SELECT log_date, process_info, text
FROM sys.dm_os_ring_buffers
WHERE ring_buffer_type = N'RING_BUFFER_EXCEPTION'
ORDER BY log_date DESC;
GO
# Alert log — el log principal de diagnòstic d'Oracle
$ORACLE_BASE/diag/rdbms/<db_name>/<instance_name>/trace/alert_<SID>.log
# Traces de sessió
$ORACLE_BASE/diag/rdbms/<db_name>/<instance_name>/trace/
# ADR (Automatic Diagnostic Repository) — Oracle 11g+
ADRCI> show alert # Veure alert log via adrci
Recàrrega de configuració sense reinici
Alguns paràmetres es poden aplicar sense aturar el servei. Altres requereixen un reinici complet.
-- Des de psql: recarregar pg_hba.conf i paràmetres "reload-safe"
SELECT pg_reload_conf();
-- Comprovar quins paràmetres requereixen reinici
SELECT name, setting, pending_restart, context
FROM pg_settings
WHERE pending_restart = true
OR context IN ('postmaster', 'sighup');
-- Paràmetres que requereixen reinici (context = 'postmaster'):
-- max_connections, shared_buffers, port, listen_addresses...
-- Paràmetres que NO requereixen reinici (context = 'sighup'):
-- log_min_duration_statement, work_mem, autovacuum_*...
-- Canvis en temps d'execució (sense reinici, no persistents)
SET GLOBAL max_connections = 200;
SET GLOBAL slow_query_log = ON;
SET GLOBAL long_query_time = 1;
-- Recarregar taules de privilegis
FLUSH PRIVILEGES;
-- Recarregar les taules de logs
FLUSH LOGS;
-- Comprovar si un paràmetre és canviable en temps d'execució
SHOW VARIABLES LIKE 'max_connections';
-- Veure si el canvi ha tingut efecte
SELECT @@GLOBAL.max_connections;
-- Molts paràmetres s'apliquen immediatament amb RECONFIGURE
EXEC sp_configure 'max degree of parallelism', 4;
RECONFIGURE;
GO
-- Alguns requereixen RECONFIGURE WITH OVERRIDE (canvis que pot ser perillosos)
EXEC sp_configure 'allow updates', 0;
RECONFIGURE WITH OVERRIDE;
GO
-- Comprovar si un paràmetre requereix reinici
SELECT name, value, value_in_use, is_dynamic
FROM sys.configurations
WHERE is_dynamic = 0; -- is_dynamic = 0 => requereix reinici
GO
-- Paràmetres dinàmics: canvi immediate (SCOPE = MEMORY)
ALTER SYSTEM SET log_archive_max_processes = 4 SCOPE = MEMORY;
-- Paràmetres estàtics: cal reinici (SCOPE = SPFILE)
ALTER SYSTEM SET db_block_size = 8192 SCOPE = SPFILE;
-- (db_block_size no es pot canviar realment sense recrear la BD)
-- Comprovar si un paràmetre és modificable dinàmicament
SELECT name, issys_modifiable, isinstance_modifiable
FROM v$parameter
WHERE name = 'log_archive_max_processes';
-- ISSYS_MODIFIABLE: IMMEDIATE (sense reinici) | DEFERRED (propera sessió) | FALSE (reinici)
-- Reinici del servei Oracle
-- SHUTDOWN IMMEDIATE;
-- STARTUP;
Miniactivitat — AC0108
Exploració dels arxius de configuració
- Entreu al contenidor Docker de PostgreSQL i localitzeu el fitxer
postgresql.confamb la comandaSHOW config_file;des de psql. - Editeu el fitxer
postgresql.confi canvieulog_min_duration_statementa500(ms). Recarregueu la configuració ambSELECT pg_reload_conf();i verifiqueu que el canvi s'ha aplicat ambSHOW log_min_duration_statement;. - Localitzeu el fitxer
pg_hba.confi observeu les seves entrades. Afegiu una línia per permetre connexions des de la xarxa172.17.0.0/16(xarxa Docker per defecte) amb autenticacióscram-sha-256. Recarregueu la configuració. - Per a MySQL: entreu al contenidor, localitzeu el
my.cnfi comproveu el valor deinnodb_buffer_pool_size. Canvieu-lo a un valor diferent viaSET GLOBALi verifiqueu el canvi. - Responeu: Quin és el risc de posar
trustcom a mètode alpg_hba.confper a connexions de xarxa?
Entrega: captures dels passos 2, 3 i 4, i resposta a la pregunta 5.