<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <HTML> <HEAD> <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9"> <TITLE>Database-SQL-RDBMS HOW-TO document for Linux (PostgreSQL Object Relational Database System): Tuning - Come migliorare le prestazioni del server PostgreSQL</TITLE> <LINK HREF="PostgreSQL-HOWTO-9.html" REL=next> <LINK HREF="PostgreSQL-HOWTO-7.html" REL=previous> <LINK HREF="PostgreSQL-HOWTO.html#toc8" REL=contents> </HEAD> <BODY> <A HREF="PostgreSQL-HOWTO-9.html">Avanti</A> <A HREF="PostgreSQL-HOWTO-7.html">Indietro</A> <A HREF="PostgreSQL-HOWTO.html#toc8">Indice</A> <HR> <H2><A NAME="s8">8. Tuning - Come migliorare le prestazioni del server PostgreSQL</A></H2> <P>Generalmente il server database è un box 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. <H2><A NAME="ostune"></A> <A NAME="ss8.1">8.1 Messa a punto del SO, per il server Database </A> </H2> <P>Per ottenere più potenza elaborativa, da una data CPU, fate quanto segue:- <UL> <LI> Ricompilate il kernel di linux per renderlo più piccolo e snello. Eliminate le voci che non vengono utilizzate. Leggete il kernel howto situato presso <A HREF="http://www.linuxdoc.org/HOWTO/Kernel-HOWTO.html">http://www.linuxdoc.org/HOWTO/Kernel-HOWTO.html</A> <P> </LI> <LI> Chiudete i processi unix non necessari: eseguite chkconfig su sistemi linux/unix <HR> <PRE> bash$ su - root bash# man chkconfig bash# chkconfig --help bash# chkconfig --list | grep on | less Ora, dalla lista così ottenuta, mettete 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 </PRE> <HR> <P> </LI> <LI> Non fate girare altri processi applicativi che non siano necessari. <P> </LI> <LI> 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, che X-window generalmente usa, 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 linea di comando fissa sul prompt di login.</LI> </UL> <H2><A NAME="ostune"></A> <A NAME="ss8.2">8.2 Come ottimizzare il processo del server Database</A> </H2> <P>Suggerimenti di carattere generale per l'ottimizzazione: <UL> <LI> Gli indici possono velocizzare le interrogazioni. Il comando <B>explain</B> vi permette di verificare il modo in cui PostgreSQL sta interpretando la vostra interrogazione, e quali indici stia usando.</LI> <LI> Usate il comando <B>cluster</B> per raggruppare i dati nelle tabelle di base secondo la corrispondenza con un indice. Leggete la pagina di manuale <B>man cluster(1)</B> per maggiori dettagli.</LI> <LI> Se state effettuando un gran numero di inserimenti, considerate la possibilità di farli mediante un solo grande processo batch, usando il comando <B>copy</B>. È molto più rapido che effettuare inserimenti individuali.</LI> <LI> Le istruzioni non comprese in un blocco-transazione <B>begin work/commit</B>, vengono considerate come fossero in una propria transazione. Considerate la possibilità di raccogliere più istruzioni in un unico blocco-transazione. Ciò riduce l'overhead della transazione. Verificate anche la possibilità di ricreare gli indici, quando vengono effettuate vaste variazioni dei dati.</LI> <LI> È consigliato l'acquisto del "Performance Tuning guide", e il "tuning support" (l'assistenza all'ottimizzazione), dalla <A HREF="http://www.postgresql.org">PostgreSQL Corp.</A>.</LI> </UL> <P>Suggerimenti di carattere specialistico per l'ottimizzazione: <P> <UL> <LI> L'ottimizzazione interna di PostgreSQL è un argomento complesso; per affrontarla serve una conoscenza profonda del codice sorgente e del funzionamento interno di postgresql. È molto raccomandabile che i seguenti suggerimenti specialistici siano provati soltanto da professionisti:</LI> <LI> Potete disabilitare <B>fsync()</B>, inizializzando il postmaster con l'opzione <B>-o -F</B>. Ciò impedirà ad <B>fsync()</B> di effettuare il flushing dopo ogni transazione. Tuttavia esistono rischi di perdita dei dati, dovuti a tensione elettrica mancante, o ad errori di lettura del mezzo di memorizzazione. Potete ridurre il rischio di perdita dei dati dovuti a mancanza di tensione, usando un <A HREF="http://apc.com/products/ups.cfm">APC UPS</A> (Uninterrupted Power Supply=fornitore di potenza senza interruzioni); e potete usare i sistemi di dischi RAID ( <A HREF="http://www.linuxdoc.org/HOWTO/Antares-RAID-sparcLinux-HOWTO/index.html">Antares-Sparc-Raid</A> <A HREF="http://www.linuxdoc.org/HOWTO/Software-RAID-HOWTO.html">Software-Raid</A> <A HREF="http://www.linuxdoc.org/HOWTO/Software-RAID-0.4x-HOWTO.html">Old-Software-Raid</A> <A HREF="http://www.linuxdoc.org/HOWTO/Root-RAID-HOWTO.html">Root-Raid</A> <A HREF="http://www.linuxdoc.org/HOWTO/Boot+Root+Raid+LILO.html">Boot-Root-Raid</A>) come protezione dai guasti dovuti al mezzo di memorizzazione.</LI> <LI> Usate l'opzione <B>-B</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, sullo spazio di memoria condivisa, imposti dal kernel. Ogni buffer è di 8K, ed il valore predefinito è di 64 buffer.</LI> <LI> Usate l'opzione <B>-S</B> del back-end per incrementare l'ammontare massimo di memoria, usata da ogni processo di backend, per gli ordinamenti temporanei. Il valore <B>-S</B> è 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.</LI> </UL> <P> <HR> <A HREF="PostgreSQL-HOWTO-9.html">Avanti</A> <A HREF="PostgreSQL-HOWTO-7.html">Indietro</A> <A HREF="PostgreSQL-HOWTO.html#toc8">Indice</A> </BODY> </HTML>