SlideShare a Scribd company logo
TUNING




             TUNING – Ottimizzazione risorse interne


27/11/08   /home/scotty/enrico/corso­web/finale/configurazione/slides/tuning1.odp
                                                                            page 1
Postgresql.conf


  Il file postgresql.con è il file con cui si 
  gestiscono la maggior parte delle configurazioni
  Circa 200 configurazioni in totale
  Possono essere raggruppate in 10 categorie
  Analazzeremo le principali caratteristiche del 
  file postgresql.conf 




27/11/08   /home/scotty/enrico/corso­web/finale/configurazione/slides/tuning1.odp
                                                                            page 2
Postgresql.conf

   File Locations
   Connections and Authentication
   Resource Usage
   WAL and Checkpoints
   Query Tuning
   Error and Reporting and Logging
   Statistics
   Locale & Formatting
   Lock Management
   Maintenance

27/11/08   /home/scotty/enrico/corso­web/finale/configurazione/slides/tuning1.odp
                                                                            page 3
File locations

   data_directory(string) :  è la directory usata per lo storage dei 
   dati.



   hba_file (string) : speficica il path verso il file pg_hba.conf 



   ident_file (string) : specifica il path verso il file pg_ident.conf



   external_pid_file (string) :   crea una ulteriore copia del process 
   ID. Può essere utilizzata dai tools di amministrazione che hanno 
   bisogno di una copia del process ID.




 27/11/08    /home/scotty/enrico/corso­web/finale/configurazione/slides/tuning1.odp
                                                                              page 4
Connections and Authentication
   listen_addresses (string) : specifica gli indirizzi ip sui quali il server 
   si  aspetta  le  connessione  dal  client.  '*'  imposta in  ingresso  qualsiasi 
   rete  → da impostare solo su macchine di sviluppo.



   port  (integer)  :  imposta  la  porta  TCP  sulla  quale  postgresql  è  in 
   ascolto.



   max_connections  (integer)  :  imposta  il  numero  massimo  delle 
   connessioni che postgresql può essere in grado di accettare. 



   superuser_reserved_connections (integer) : imposta il numero di 
   connessioni riservate all'utente  PostgreSQL superuser.




 27/11/08    /home/scotty/enrico/corso­web/finale/configurazione/slides/tuning1.odp
                                                                              page 5
max_connections
                                            Il numero massimo al momento 
                                            dell'installazione  viene  stabilito 
                                            dal comando initdb in base alle 
                                            possibilità  che  il  volstro  kernel 
                                            offre.

                                            All'aumentare  del  numero  max 
                                            di  connessioni  aumenta  il 
                                            numero  di  risorse  di  sistema 
                                            utilizzate.

                                            Qualora        il            vostro 
                                            max_connection sia >= 1000 si 
                                            consigli   di      utilizza     un 
                                            programma  di  pool  delle 
                                            connessioni.

                                       Qualora  il  vostro  sistema  non 
                                       supporti  dei  valori  di  default 
                                       molto  bassi    è  necessario 
                                       ritoccare  qualcosa  a  livello  di 
 http://developer.postgresql.org/pgdocs/postgres/kernel­resources.html
                                       kernel di macchina.
27/11/08   /home/scotty/enrico/corso­web/finale/configurazione/slides/tuning1.odp
                                                                            page 6
Connections and Authentication

    bonjour_name (string) : imposta il messaggio di broadcast.



    authentication_timeout (integer) : imposta in secondi il tempo 
    massimo richiesto al client per completare la propria autenticazione



    Ssl (boolean) : Abilita le connessioni ssl.



    password_encryption (boolean) :  Quando viene creato un utente 
    in SQL attraverso CREATE USER o ALTER USER senza passare il 
    parametro ENCRIPTED o UNENCRYPTED, questo parametro 
    determina se la password deve essere criptata o no.




 27/11/08   /home/scotty/enrico/corso­web/finale/configurazione/slides/tuning1.odp
                                                                             page 7
Un po' di internals

                                                 Considerazioni sulla 
                                                 perfomance


                                                      Ottimizzare l'utilizzo 
                                                      delle risorse del sistema 
                                                      (CPU, Memoria, Dischi)


                                                      Ottimizzare le queries 
                                                      inviate al database: 
                                                           CREATE INDEX
                                                           VACUUM
                                                           CLUSTER
                                                           EXPLAIN 


 27/11/08   /home/scotty/enrico/corso­web/finale/configurazione/slides/tuning1.odp
                                                                             page 8
Un po' di internals

                                                  In questa sede 
                                                  parleremo di come 
                                                  ottimizzare le risorse 
                                                  del server DBMS, 
                                                  vediamo ora i livelli di 
                                                  memoria:
                                                       Registri cpu
                                                       Cache cpu
                                                       Kernel cache (RAM)
                                                       Dischi




 27/11/08   /home/scotty/enrico/corso­web/finale/configurazione/slides/tuning1.odp
                                                                             page 9
Un po' di internals


                                                 All'aumentare del 
                                                 prezzo diminuisce la 
                                                 capacità della 
                                                 memoria. Tipicamente:


                                                      Registri cpu : bytes
                                                      Cache cpu : Kb / Mb
                                                      RAM : Mb/Gb
                                                      Dischi : Gb/Tb




 27/11/08   /home/scotty/enrico/corso­web/finale/configurazione/slides/tuning1.odp
                                                                             page 10
Un po' di internals



                                           Il  passaggio  di  dati  tra  i  vari 
                                           stadi  della  memoria  avviene 
                                           costantemente  in  un  server,  lo 
                                           swap  tra  i  registri  CPU  e  la 
                                           cache  di  CPU  non  possono 
                                           essere  gestiti  dal  DBA,  mentre 
                                           invece  è  possibile  il  tuning  tra 
                                           RAM e dischi.




 27/11/08   /home/scotty/enrico/corso­web/finale/configurazione/slides/tuning1.odp
                                                                             page 11
Un po' di internals

                                                 Un server PostgreSQL 
                                                 possiede:
                                                      Programmi in 
                                                      esecuzione
                                                      Dati e stack
                                                      Shared buffer cache
                                                      Kernel disk buffer cache
                                                      kernel




 27/11/08   /home/scotty/enrico/corso­web/finale/configurazione/slides/tuning1.odp
                                                                             page 12
Un po' di internals – Shared Buffer Cache

      PostgreSQL  non  cambia  direttamente  le 
      informazioni  su  un  disco  ma  le  scrive  sullo  shared 
      buffer cache le informazioni vengono prelevate:
            Dal disk buffer cache
            Direttamente dal disco




      I  processi  di  backend  accedono  allo  shared_buffer 
      e se ad esempio bisogna effettuare un processo di 
      lettura allora la lettura avviene tutta in RAM. 




 27/11/08     /home/scotty/enrico/corso­web/finale/configurazione/slides/tuning1.odp
                                                                               page 13
Un po' di internals – Shared Buffer Cache




 27/11/08   /home/scotty/enrico/corso­web/finale/configurazione/slides/tuning1.odp
                                                                             page 14
Un po' di internals – Shared Buffer Cache




COME DEVE ESSERE DIMENSIONATO LO SHARED BUFFER?




 27/11/08   /home/scotty/enrico/corso­web/finale/configurazione/slides/tuning1.odp
                                                                             page 15
Un po' di internals – Shared Buffer Cache
       Lo shared buffer deve avere la giusta dimensione 
       per consentire agli altri programmi di girare senza 
       intoppi.
       Se lo shared buffer è troppo grande, allora il 
       sistema operativo inizierà il processo di swap per 
       richiedere memoria per gli altri programmi in 
       esecuzione




                           RALLENTAMENTO



 27/11/08   /home/scotty/enrico/corso­web/finale/configurazione/slides/tuning1.odp
                                                                             page 16
Un po' di internals – Shared Buffer Cache

       Altro parametro importante: work_mem
            Specifica l'insieme totale di memoria non shared 
            RAM  usata per le operazioni interne di ordinamento 
            e tabelle di hash prima di passarle ai file 
            temporanei.




 27/11/08    /home/scotty/enrico/corso­web/finale/configurazione/slides/tuning1.odp
                                                                              page 17
Resource Usage ­ Memory

  shared_buffers (integer) : imposta la quantità totale di 
  memoria usata dai buffers della shared memory.
       E' una quantità di memoria definita come una RAM dedicata per 
       Postgresql, usata per il controllo delle connessioni, esecuzione di 
       operazioni e altro.
       Postgresql necessita anche di RAM per la gestione dei buffer file 
       system, ordinamento etc.. per cui shared_buffers non può essere 
       maggiore della RAM di sistema.
       32 Mb di default
       Deve essere almeno 128 Kb e almeno 16K*max_connections
       > 2Gb supportata solo per sistemi a 64 bits
       Incrementare shared_buffers → aumentare molto probabilmente 
       alcuni parametri del KERNEL SHMMAX e SHMALL.
       http://www.postgresql.org/docs/current/static/kernel­
       resources.html
27/11/08   /home/scotty/enrico/corso­web/finale/configurazione/slides/tuning1.odp
                                                                            page 18
Resource Usage ­ Memory

   work_mem (integer) : Specifica l'insieme totale di 
   memoria non shared RAM  usata per le operazioni 
   interne di ordinamento e tabelle di hash prima di 
   passarle ai file temporanei.
           Per una query complessa con ORDER BY, DISTINCT, MERGE 
           JOINS in parallelo, è possibile che si superi il valore work_mem 
           prima che il sistema inizi a depositare I dati su files temporanei 
           cosicchè la quantità di memoria utilizzata potrebbe essere di 
           molte volte superiore la work_mem.
           Questo limite ha il compito di non far andare andare il server in 
           swap.
           La work_mem è allocata per multipli di potenze di 2
           Il suo valore di default è 1Mb



27/11/08      /home/scotty/enrico/corso­web/finale/configurazione/slides/tuning1.odp
                                                                               page 19
Tunning


      Come impostare il giusto valore?  (B. Momjian)
           Per impostare il giusto valore conviene iniziare con il 25% 
           della RAM totale per quanto riguarda lo shared_buffer e 
           con il 2% ­  4%  della RAM totale per quanto riguarda la 
           work_mem.
           Aumentare i valori se il sistema non va in swap
           Diminuire i valori se il sistema va in swap. 




27/11/08    /home/scotty/enrico/corso­web/finale/configurazione/slides/tuning1.odp
                                                                             page 20
Resource Usage ­ Memory

     temp_buffers (integer) : Imposta il numero 
     massimo di buffers temporanei usati per ogni 
     sessione del database.
           Una sessione può allocare buffer temporanei come da lei 
           richiesto fino alla quantità massima indicata da 
           temp_buffers.
           Il valore di default può essere aumentato se la vostra 
           applicazione usa pesantemente temporary tables.
           Default 8Mb




27/11/08     /home/scotty/enrico/corso­web/finale/configurazione/slides/tuning1.odp
                                                                              page 21
Resource Usage ­ Memory

   max_prepared_transactions (integer) : Imposta il 
   massimo numero di transaction che possono essere 
   simultaneamente nello stato “prepared”. 
           Vedi PREPARED TRANSACTION
           Il valore 0 disabilità questa feature : se l'applicazione non usa 
           PREPARED TRANSACTION si può tranquillamente disabilitare
           Qualora si utilizzi questa feature il valore consigliato è un valore 
           pari quello di max_connection
           Default 5




27/11/08       /home/scotty/enrico/corso­web/finale/configurazione/slides/tuning1.odp
                                                                                page 22
Resource Usage ­ Memory

     maintenance_work_mem (integer) : Imposta la 
     quantità totale di memoria utilizzata per le 
     operazioni di amministrazioni del database 
     VACUUM, CREATE INDEX, ALTER TABLE ADD 
     FOREIGN KEY.
           Per ogni sessione una sola può essere eseguita una solo 
           di queste operazioni → E' buona norma avere un valore 
           molto maggiore di work_mem per migliorare le 
           performance di vacuum e restore.
           Default 16 Mb




27/11/08     /home/scotty/enrico/corso­web/finale/configurazione/slides/tuning1.odp
                                                                              page 23
Resource Usage ­ Memory

      max_stack_depth (integer) : Imposta la profondità 
      massima dello stack in Kb.
           Default 2 Mb
           Di solito va bene così
           Aumentare lo stack significativamente può comportare 
           che una funzione ricorsiva può provocare il crash del  
           singolo processo server in questione.
           E' raccomandabile non modificare questo valore.




27/11/08    /home/scotty/enrico/corso­web/finale/configurazione/slides/tuning1.odp
                                                                             page 24

More Related Content

PDF
PostgreSQL: Prima configurazione
PDF
PostgreSQL: Archtettura per la gestione dei pro
PDF
PostgreSQL : Architettura di storage
PDF
Pgtraining bdr
PDF
Ap Camp 2011
PDF
MontelLUG - Conferenze 2007 - Introduzione a RSync
PDF
PostgreSQL: Integrità dei dati
ODP
Linux Capabilities - ita - v2.1.5 - compatta
PostgreSQL: Prima configurazione
PostgreSQL: Archtettura per la gestione dei pro
PostgreSQL : Architettura di storage
Pgtraining bdr
Ap Camp 2011
MontelLUG - Conferenze 2007 - Introduzione a RSync
PostgreSQL: Integrità dei dati
Linux Capabilities - ita - v2.1.5 - compatta

What's hot (20)

PDF
PostgreSQL: Point in time recovery
PDF
Richiami su Linux - Webmin - Reti di calcolatori
PDF
Glusterfs: un filesystem altamente versatile
PDF
Sottoli in the cloud
PDF
Compilazione Kernel
PDF
The Google File System
PDF
Introduzione Alla Uml Mconsole
PDF
Linux Kernel, driver e compilazione
PDF
Slax su pendrive
PPTX
Post gresql su_raspberry
PPTX
Microservices webinar EMEA Aug. 2017
PDF
Hadoop in action!
PPTX
Installazione ambientepython ubuntumate
PDF
Server di posta aziendale su protocollo IMAP, antispam, antivirus, webmail, g...
PPTX
Socket python
PDF
LUG - Ricompilazione kernel
PDF
Raspberry omv
PPTX
Back to Basics, webinar 6: Messa in esercizio
PDF
Idp, passo dopo passo!
PDF
Messa in rete
PostgreSQL: Point in time recovery
Richiami su Linux - Webmin - Reti di calcolatori
Glusterfs: un filesystem altamente versatile
Sottoli in the cloud
Compilazione Kernel
The Google File System
Introduzione Alla Uml Mconsole
Linux Kernel, driver e compilazione
Slax su pendrive
Post gresql su_raspberry
Microservices webinar EMEA Aug. 2017
Hadoop in action!
Installazione ambientepython ubuntumate
Server di posta aziendale su protocollo IMAP, antispam, antivirus, webmail, g...
Socket python
LUG - Ricompilazione kernel
Raspberry omv
Back to Basics, webinar 6: Messa in esercizio
Idp, passo dopo passo!
Messa in rete
Ad

Viewers also liked (10)

PDF
PostgreSQL: Transazioni e locking
PDF
PostgreSQL
PDF
Vagrant e Docker a confronto;scegliere ed iniziare
PPTX
Automation Night (Docker)
PDF
Openday - PostgreSQL: primi passi con Json/Jsonb
PDF
PostgreSQL: Approximated searches
PDF
Love Your Database (ESC 2k16)
PPTX
Livin' with Docker - dallo sviluppo alla produzione
PPTX
Docker Fudamentals
PPTX
Architetture a Microservizi con Docker Container
PostgreSQL: Transazioni e locking
PostgreSQL
Vagrant e Docker a confronto;scegliere ed iniziare
Automation Night (Docker)
Openday - PostgreSQL: primi passi con Json/Jsonb
PostgreSQL: Approximated searches
Love Your Database (ESC 2k16)
Livin' with Docker - dallo sviluppo alla produzione
Docker Fudamentals
Architetture a Microservizi con Docker Container
Ad

Similar to PostgreSQL : Tuning (20)

PDF
MySQL Tech Tour 2015 - Progettare, installare e configurare MySQL Cluster
PDF
MySQL 5
PDF
Hosting: Database MySQL, 10 trucchi per migliorarne le performance - #TipOf...
PDF
Performance dei sistemi di calcolo
PDF
Implementazione di un ambiente in alta affidabilità
PDF
Come l’Open Source può essere alla base di un business di successo: il caso H...
PPTX
Delphi Day 2009 Win7 Dev Overview
PDF
Best Practices on SQL Server
PDF
Db2 e book_ita
PDF
10 suggerimenti per aumentare le performance di sql server senza spendere 1 euro
PDF
10 SUGGERIMENTI PER AUMENTARE LE PERFORMANCE DI SQL SERVER SENZA SPENDERE 1 EURO
PDF
E1 Memorie
PDF
Build a SQL Server machine - the right way (Italian)
PDF
Cross compiler per uso domestico
PDF
Network monitoring tramite snmp
PDF
Virtualizzazione e consolidamento hardware; applicazioni pratiche di Ms Hyper...
PDF
Vscc c6475 p
PDF
Vscc c6475 p
ODP
Lezioni 2009
PDF
Core Router Tw ss8-i7
MySQL Tech Tour 2015 - Progettare, installare e configurare MySQL Cluster
MySQL 5
Hosting: Database MySQL, 10 trucchi per migliorarne le performance - #TipOf...
Performance dei sistemi di calcolo
Implementazione di un ambiente in alta affidabilità
Come l’Open Source può essere alla base di un business di successo: il caso H...
Delphi Day 2009 Win7 Dev Overview
Best Practices on SQL Server
Db2 e book_ita
10 suggerimenti per aumentare le performance di sql server senza spendere 1 euro
10 SUGGERIMENTI PER AUMENTARE LE PERFORMANCE DI SQL SERVER SENZA SPENDERE 1 EURO
E1 Memorie
Build a SQL Server machine - the right way (Italian)
Cross compiler per uso domestico
Network monitoring tramite snmp
Virtualizzazione e consolidamento hardware; applicazioni pratiche di Ms Hyper...
Vscc c6475 p
Vscc c6475 p
Lezioni 2009
Core Router Tw ss8-i7

Recently uploaded (9)

PPTX
Copia di PROGETTO VIOLENZA sulle donne PCTO
PDF
GIÁO ÁN KẾ HOẠCH BÀI DẠY CHÍNH KHÓA TIẾNG ANH 9 - CẢ NĂM - THEO CÔNG VĂN 5512...
PDF
BÀI TẬP TEST BỔ TRỢ THEO TỪNG UNIT - TIẾNG ANH 10 FRIENDS GLOBAL - CẢ NĂM (24...
PDF
16 CHUYÊN ĐỀ BÀI TẬP ÔN THI TUYỂN SINH VÀO 10 - MÔN TIẾNG ANH - THEO FORM ĐỀ ...
PDF
CHUYÊN ĐỀ BỔ TRỢ NGỮ ÂM, TỪ VỰNG NÂNG CAO - TIẾNG ANH 9 VÀ ÔN THI VÀO LỚP 10 ...
PDF
GIÁO ÁN CHÍNH KHÓA TIẾNG ANH 9 - CẢ NĂM - THEO CÔNG VĂN 5512 (2 CỘT) NĂM HỌC ...
PDF
BÀI TẬP TEST BỔ TRỢ THEO TỪNG UNIT - TIẾNG ANH 10 EXPLORE NEW WORLDS - CẢ NĂM...
PPTX
SLIDE-DE-CURSOS-OssssFICIAL-DA-EGEPI-.pptx
PDF
Mazzoni-Reggi-2012-Effetto-Lucifero-Su-Wikipedia.pdf
Copia di PROGETTO VIOLENZA sulle donne PCTO
GIÁO ÁN KẾ HOẠCH BÀI DẠY CHÍNH KHÓA TIẾNG ANH 9 - CẢ NĂM - THEO CÔNG VĂN 5512...
BÀI TẬP TEST BỔ TRỢ THEO TỪNG UNIT - TIẾNG ANH 10 FRIENDS GLOBAL - CẢ NĂM (24...
16 CHUYÊN ĐỀ BÀI TẬP ÔN THI TUYỂN SINH VÀO 10 - MÔN TIẾNG ANH - THEO FORM ĐỀ ...
CHUYÊN ĐỀ BỔ TRỢ NGỮ ÂM, TỪ VỰNG NÂNG CAO - TIẾNG ANH 9 VÀ ÔN THI VÀO LỚP 10 ...
GIÁO ÁN CHÍNH KHÓA TIẾNG ANH 9 - CẢ NĂM - THEO CÔNG VĂN 5512 (2 CỘT) NĂM HỌC ...
BÀI TẬP TEST BỔ TRỢ THEO TỪNG UNIT - TIẾNG ANH 10 EXPLORE NEW WORLDS - CẢ NĂM...
SLIDE-DE-CURSOS-OssssFICIAL-DA-EGEPI-.pptx
Mazzoni-Reggi-2012-Effetto-Lucifero-Su-Wikipedia.pdf

PostgreSQL : Tuning

  • 1. TUNING TUNING – Ottimizzazione risorse interne 27/11/08 /home/scotty/enrico/corso­web/finale/configurazione/slides/tuning1.odp page 1
  • 2. Postgresql.conf Il file postgresql.con è il file con cui si  gestiscono la maggior parte delle configurazioni Circa 200 configurazioni in totale Possono essere raggruppate in 10 categorie Analazzeremo le principali caratteristiche del  file postgresql.conf  27/11/08 /home/scotty/enrico/corso­web/finale/configurazione/slides/tuning1.odp page 2
  • 3. Postgresql.conf File Locations Connections and Authentication Resource Usage WAL and Checkpoints Query Tuning Error and Reporting and Logging Statistics Locale & Formatting Lock Management Maintenance 27/11/08 /home/scotty/enrico/corso­web/finale/configurazione/slides/tuning1.odp page 3
  • 4. File locations data_directory(string) :  è la directory usata per lo storage dei  dati. hba_file (string) : speficica il path verso il file pg_hba.conf  ident_file (string) : specifica il path verso il file pg_ident.conf external_pid_file (string) :   crea una ulteriore copia del process  ID. Può essere utilizzata dai tools di amministrazione che hanno  bisogno di una copia del process ID. 27/11/08 /home/scotty/enrico/corso­web/finale/configurazione/slides/tuning1.odp page 4
  • 5. Connections and Authentication listen_addresses (string) : specifica gli indirizzi ip sui quali il server  si  aspetta  le  connessione  dal  client.  '*'  imposta in  ingresso  qualsiasi  rete  → da impostare solo su macchine di sviluppo. port  (integer)  :  imposta  la  porta  TCP  sulla  quale  postgresql  è  in  ascolto. max_connections  (integer)  :  imposta  il  numero  massimo  delle  connessioni che postgresql può essere in grado di accettare.  superuser_reserved_connections (integer) : imposta il numero di  connessioni riservate all'utente  PostgreSQL superuser. 27/11/08 /home/scotty/enrico/corso­web/finale/configurazione/slides/tuning1.odp page 5
  • 6. max_connections Il numero massimo al momento  dell'installazione  viene  stabilito  dal comando initdb in base alle  possibilità  che  il  volstro  kernel  offre. All'aumentare  del  numero  max  di  connessioni  aumenta  il  numero  di  risorse  di  sistema  utilizzate. Qualora  il  vostro  max_connection sia >= 1000 si  consigli  di  utilizza  un  programma  di  pool  delle  connessioni. Qualora  il  vostro  sistema  non  supporti  dei  valori  di  default  molto  bassi    è  necessario  ritoccare  qualcosa  a  livello  di  http://developer.postgresql.org/pgdocs/postgres/kernel­resources.html kernel di macchina. 27/11/08 /home/scotty/enrico/corso­web/finale/configurazione/slides/tuning1.odp page 6
  • 7. Connections and Authentication bonjour_name (string) : imposta il messaggio di broadcast. authentication_timeout (integer) : imposta in secondi il tempo  massimo richiesto al client per completare la propria autenticazione Ssl (boolean) : Abilita le connessioni ssl. password_encryption (boolean) :  Quando viene creato un utente  in SQL attraverso CREATE USER o ALTER USER senza passare il  parametro ENCRIPTED o UNENCRYPTED, questo parametro  determina se la password deve essere criptata o no. 27/11/08 /home/scotty/enrico/corso­web/finale/configurazione/slides/tuning1.odp page 7
  • 8. Un po' di internals Considerazioni sulla  perfomance Ottimizzare l'utilizzo  delle risorse del sistema  (CPU, Memoria, Dischi) Ottimizzare le queries  inviate al database:  CREATE INDEX VACUUM CLUSTER EXPLAIN  27/11/08 /home/scotty/enrico/corso­web/finale/configurazione/slides/tuning1.odp page 8
  • 9. Un po' di internals In questa sede  parleremo di come  ottimizzare le risorse  del server DBMS,  vediamo ora i livelli di  memoria: Registri cpu Cache cpu Kernel cache (RAM) Dischi 27/11/08 /home/scotty/enrico/corso­web/finale/configurazione/slides/tuning1.odp page 9
  • 10. Un po' di internals All'aumentare del  prezzo diminuisce la  capacità della  memoria. Tipicamente: Registri cpu : bytes Cache cpu : Kb / Mb RAM : Mb/Gb Dischi : Gb/Tb 27/11/08 /home/scotty/enrico/corso­web/finale/configurazione/slides/tuning1.odp page 10
  • 11. Un po' di internals Il  passaggio  di  dati  tra  i  vari  stadi  della  memoria  avviene  costantemente  in  un  server,  lo  swap  tra  i  registri  CPU  e  la  cache  di  CPU  non  possono  essere  gestiti  dal  DBA,  mentre  invece  è  possibile  il  tuning  tra  RAM e dischi. 27/11/08 /home/scotty/enrico/corso­web/finale/configurazione/slides/tuning1.odp page 11
  • 12. Un po' di internals Un server PostgreSQL  possiede: Programmi in  esecuzione Dati e stack Shared buffer cache Kernel disk buffer cache kernel 27/11/08 /home/scotty/enrico/corso­web/finale/configurazione/slides/tuning1.odp page 12
  • 13. Un po' di internals – Shared Buffer Cache PostgreSQL  non  cambia  direttamente  le  informazioni  su  un  disco  ma  le  scrive  sullo  shared  buffer cache le informazioni vengono prelevate: Dal disk buffer cache Direttamente dal disco I  processi  di  backend  accedono  allo  shared_buffer  e se ad esempio bisogna effettuare un processo di  lettura allora la lettura avviene tutta in RAM.  27/11/08 /home/scotty/enrico/corso­web/finale/configurazione/slides/tuning1.odp page 13
  • 14. Un po' di internals – Shared Buffer Cache 27/11/08 /home/scotty/enrico/corso­web/finale/configurazione/slides/tuning1.odp page 14
  • 15. Un po' di internals – Shared Buffer Cache COME DEVE ESSERE DIMENSIONATO LO SHARED BUFFER? 27/11/08 /home/scotty/enrico/corso­web/finale/configurazione/slides/tuning1.odp page 15
  • 16. Un po' di internals – Shared Buffer Cache Lo shared buffer deve avere la giusta dimensione  per consentire agli altri programmi di girare senza  intoppi. Se lo shared buffer è troppo grande, allora il  sistema operativo inizierà il processo di swap per  richiedere memoria per gli altri programmi in  esecuzione RALLENTAMENTO 27/11/08 /home/scotty/enrico/corso­web/finale/configurazione/slides/tuning1.odp page 16
  • 17. Un po' di internals – Shared Buffer Cache  Altro parametro importante: work_mem Specifica l'insieme totale di memoria non shared  RAM  usata per le operazioni interne di ordinamento  e tabelle di hash prima di passarle ai file  temporanei. 27/11/08 /home/scotty/enrico/corso­web/finale/configurazione/slides/tuning1.odp page 17
  • 18. Resource Usage ­ Memory shared_buffers (integer) : imposta la quantità totale di  memoria usata dai buffers della shared memory. E' una quantità di memoria definita come una RAM dedicata per  Postgresql, usata per il controllo delle connessioni, esecuzione di  operazioni e altro. Postgresql necessita anche di RAM per la gestione dei buffer file  system, ordinamento etc.. per cui shared_buffers non può essere  maggiore della RAM di sistema. 32 Mb di default Deve essere almeno 128 Kb e almeno 16K*max_connections > 2Gb supportata solo per sistemi a 64 bits Incrementare shared_buffers → aumentare molto probabilmente  alcuni parametri del KERNEL SHMMAX e SHMALL. http://www.postgresql.org/docs/current/static/kernel­ resources.html 27/11/08 /home/scotty/enrico/corso­web/finale/configurazione/slides/tuning1.odp page 18
  • 19. Resource Usage ­ Memory work_mem (integer) : Specifica l'insieme totale di  memoria non shared RAM  usata per le operazioni  interne di ordinamento e tabelle di hash prima di  passarle ai file temporanei. Per una query complessa con ORDER BY, DISTINCT, MERGE  JOINS in parallelo, è possibile che si superi il valore work_mem  prima che il sistema inizi a depositare I dati su files temporanei  cosicchè la quantità di memoria utilizzata potrebbe essere di  molte volte superiore la work_mem. Questo limite ha il compito di non far andare andare il server in  swap. La work_mem è allocata per multipli di potenze di 2 Il suo valore di default è 1Mb 27/11/08 /home/scotty/enrico/corso­web/finale/configurazione/slides/tuning1.odp page 19
  • 20. Tunning Come impostare il giusto valore?  (B. Momjian) Per impostare il giusto valore conviene iniziare con il 25%  della RAM totale per quanto riguarda lo shared_buffer e  con il 2% ­  4%  della RAM totale per quanto riguarda la  work_mem. Aumentare i valori se il sistema non va in swap Diminuire i valori se il sistema va in swap.  27/11/08 /home/scotty/enrico/corso­web/finale/configurazione/slides/tuning1.odp page 20
  • 21. Resource Usage ­ Memory temp_buffers (integer) : Imposta il numero  massimo di buffers temporanei usati per ogni  sessione del database. Una sessione può allocare buffer temporanei come da lei  richiesto fino alla quantità massima indicata da  temp_buffers. Il valore di default può essere aumentato se la vostra  applicazione usa pesantemente temporary tables. Default 8Mb 27/11/08 /home/scotty/enrico/corso­web/finale/configurazione/slides/tuning1.odp page 21
  • 22. Resource Usage ­ Memory max_prepared_transactions (integer) : Imposta il  massimo numero di transaction che possono essere  simultaneamente nello stato “prepared”.  Vedi PREPARED TRANSACTION Il valore 0 disabilità questa feature : se l'applicazione non usa  PREPARED TRANSACTION si può tranquillamente disabilitare Qualora si utilizzi questa feature il valore consigliato è un valore  pari quello di max_connection Default 5 27/11/08 /home/scotty/enrico/corso­web/finale/configurazione/slides/tuning1.odp page 22
  • 23. Resource Usage ­ Memory maintenance_work_mem (integer) : Imposta la  quantità totale di memoria utilizzata per le  operazioni di amministrazioni del database  VACUUM, CREATE INDEX, ALTER TABLE ADD  FOREIGN KEY. Per ogni sessione una sola può essere eseguita una solo  di queste operazioni → E' buona norma avere un valore  molto maggiore di work_mem per migliorare le  performance di vacuum e restore. Default 16 Mb 27/11/08 /home/scotty/enrico/corso­web/finale/configurazione/slides/tuning1.odp page 23
  • 24. Resource Usage ­ Memory max_stack_depth (integer) : Imposta la profondità  massima dello stack in Kb. Default 2 Mb Di solito va bene così Aumentare lo stack significativamente può comportare  che una funzione ricorsiva può provocare il crash del   singolo processo server in questione. E' raccomandabile non modificare questo valore. 27/11/08 /home/scotty/enrico/corso­web/finale/configurazione/slides/tuning1.odp page 24