Next
Previous
Contents
Generalmente il server database è uno scatolotto autonomo connesso alla rete.
Poiché il server database è il solo processo unix funzionante sulla CPU, potete
fare svariate ottimizzazioni per aumentare la produttività del server.
Per ottenere più potenza elaborativa, da una data CPU, fate quanto segue:
- Ricompilate il kernel di linux per renderlo più piccolo e snello. Eliminate le voci
che non vengono utilizzate. Leggete il kernel
howto situato presso
http://www.linuxdoc.org/HOWTO/Kernel-HOWTO.html
- Chiudete i processi unix non necessari: eseguite chkconfig su sistemi linux/unix
bash$ su - root
bash# man chkconfig
bash# chkconfig --help
bash# chkconfig --list | grep on | less
Ora, dalla lista così ottenuta, mettete a off i processi che volete lasciar disattivati al boot:
bash# chkconfig --level 0123456 <nome servizio> off
La prossima volta, al boot della macchina, questi servizi non verranno inizializzati.
Ora chiudete manualmente i servizi che avete disattivato.
bash# cd /etc/rc.d/init.d
bash# ./<nome servizio> stop
- Non fate girare altri processi applicativi che non siano necessari.
- Non lasciate girare X-Window a vuoto, inutilizzato. Infatti i processi di X-window
consumano memoria, appesantiscono la CPU, e possono essere una seria falla nella sicurezza, favorendo attacchi esterni.
I window manager solitamente usati da X-window sono: KDE, GNOME, CDE, XDM, e altri.
Dovete uscire da X-window immediatamente dopo averlo utilizzato e, per la maggior parte del tempo,
la macchina del server database dovrebbe presentare a video solo la console,
con la riga di comando fissa sul prompt di login.
Suggerimenti di carattere generale per l'ottimizzazione:
- Gli indici possono velocizzare le interrogazioni. Il comando explain vi permette
di verificare il modo in cui PostgreSQL sta interpretando la vostra interrogazione, e quali indici
stia usando.
- Usate il comando cluster per raggruppare i dati nelle tabelle di base secondo la corrispondenza con
un indice. Leggete la pagina di manuale man cluster(1) per maggiori dettagli.
- Se state effettuando un gran numero di inserimenti, considerate la possibilità di farli mediante un solo grande
processo batch, usando il comando copy. È molto più rapido che effettuare inserimenti individuali.
- Le istruzioni non comprese in un blocco di transazioni begin work/commit,
vengono considerate come fossero in una propria transazione. Considerate la possibilità di raccogliere più
istruzioni in un unico blocco di transazioni. Ciò riduce
il lavoro extra (overhead) dovuto alla transazione. Verificate anche la possibilità di ricreare gli indici, quando
vengono effettuate vaste variazioni dei dati.
- È consigliato l'acquisto della "Performance Tuning guide", e
del "tuning support" (l'assistenza all'ottimizzazione), dalla
PostgreSQL Corp..
Suggerimenti di carattere specialistico per l'ottimizzazione:
- L'ottimizzazione interna di PostgreSQL è un argomento complesso; per affrontarla serve una
conoscenza profonda del codice sorgente e del funzionamento interno di postgresql. È altamente
raccomandabile che i seguenti suggerimenti specialistici siano provati soltanto da professionisti:
- Potete disabilitare fsync(), inizializzando
il postmaster con l'opzione -o -F. Ciò impedirà ad fsync()
di effettuare il flushing dopo ogni transazione. Tuttavia esistono rischi di perdita
dei dati, dovuti a mancanza tensione elettrica, o ad errori di lettura del mezzo di memorizzazione.
Potete ridurre il rischio di perdita dei dati dovuti a mancanza di tensione, usando
un
APC UPS
(Uninterrupted Power Supply, o Gruppo di continuità); e potete usare i sistemi di dischi RAID
(
Antares-Sparc-Raid
Software-Raid
Old-Software-Raid
Root-Raid
Boot-Root-Raid)
come protezione dai guasti dovuti al mezzo di memorizzazione.
- Usate l'opzione -B di postmaster per aumentare il numero di
buffer di memoria condivisa, usata dai processi del back-end. Se rendete troppo
grande questo parametro, postmaster potrebbe non partire perché potreste aver superato
i vostri limiti, di spazio di memoria condivisa, imposti dal kernel. Ogni buffer è di 8K, ed il valore predefinito è di 64 buffer.
- Usate l'opzione -S del back-end per incrementare l'ammontare
massimo di memoria, usata da ogni processo di backend, per gli ordinamenti temporanei.
Il valore -S è misurato in kilobyte, ed è predefinito a 512 (cioè 512K).
Non è saggio rendere troppo grande questo valore, perché potreste terminare la memoria quando
l'interrogazione richiede diversi ordinamenti concorrenti.
Next
Previous
Contents