Postgres DISK IO molto alto. Cosa posso fare per ridurlo immediatamente?

Sono a conoscenza di dischi più veloci di quello che sto utilizzando, ma questo richiederà più tempo per mettere in e sto cercando di utilizzare alcune misure di emergenza per ridurre il disco IO. in cima sta riportndo l'uso DSK sul rosso quasi costantemente. Questo è per il postgres 8.3.

La mia impostazione shared_buffers è a 24MB anche se il server dispone di 16 GB di RAM che non sono completamente utilizzati. Il mio primo pensiero era quello di dare il database tanto ram come potrebbe prendere, ma non so come farlo (questo è un server di database dedicato).

  • Password non scadente sul server Linux
  • Posso creare un arrays "morbido" RAID1 senza fare i dati?
  • Backup linux al server ftp
  • 99% di disco IO colpisce con Percona
  • Continuare ssh dal precedente stato
  • Quanto efficace è il command tac su file di grandi size
  • Qualsiasi soluzione che non richiede un riavvio è preferibile, ma prendo ciò che posso get a questo punto.

    Grazie!

    5 Solutions collect form web for “Postgres DISK IO molto alto. Cosa posso fare per ridurlo immediatamente?”

    L'impostazione 24MB shared_buffers è il default conservativo, direi che deve essere molto più alto per un database dedicato con 16 GB di RAM disponibile. Ma sì, dovrai riavviare il server per ridimensionarlo. http://wiki.postgresql.org/wiki/Performance_Optimization è un buon punto di partenza per le linee guida per la configuration delle performance. L'impostazione del shared_buffers a 4GB o 6GB sembrerebbe più ragionevole.

    Si noti che su linux è necessario regolare l'impostazione kernel.shmmax sysctl (in /etc/sysctl.conf o semplicemente scrivendo / proc / sys / kernel / shmmax) per assegnare un block di questa memory molto condivisa. Se non si ottiene un errore che specifica quanto è stato richiesto, è necessario impostare kernel.shmmax superiore a quello.

    Poiché si dispone di un sacco di memory, si potrebbe anche considerare l'impostazione più alta del work_mem predefinito, che renderà le cose come i tipi e gli hash (gruppo / ordine / distinti ecc.) Tendono a lavorare in memory piuttosto che utilizzare file temp. Non è necessario riavviare il server per eseguire questa operazione, solo aggiornare il file di configuration, ricaricare il servizio e nuove sessioni otterranno la nuova impostazione. La memory di lavoro predefinita per una session è 1MB, è ansible calcolare il massimo che può essere utilizzato in una sola volta come work_mem * max_client_connections e stimare l'impatto che avrà.

    Dovresti anche aumentare efficace_cache_size per indicare al pianificatore che il livello del kernel FS probabilmente sta memorizzando molte pagine in memory al di fuori dei buffer condivisi di postgresql.

    ecc. ecc. spero che questo ti faccia partire ad un buon inizio.

    A parte i suggerimenti qui riportti, si potrebbe anche voler esaminare le impostazioni del vaccino automatico. Per impostazione predefinita si innesca dopo circa 50 aggiornamenti e se il database sta eseguendo molti aggiornamenti / inserti, ciò può innescare una quantità inutile di dichiarazioni di vuoto che genereranno un sacco di IO.

    Rimontare i dischi con noatime

    Su un sistema che è molto vicino al massimo throughput I / O durante il normale funzionamento, è ansible aumentare il checkpoint_completion_target per ridurre il carico di I / O dai controlli . Lo svantaggio di questo è che i punti di controllo prolungati influenzano il tempo di recupero, in quanto più segmenti di WAL dovranno essere tenuti in giro per un ansible utilizzo nel recupero

    Vedi più qui .

    Se il disco del postgresql è molto alto, controllare le istruzioni in esecuzione, in particolare per le istruzioni, fare un "sort on disk" e impostare indici corretti.

    Solo google per "Performance Tuning Postgresql", troverai abbastanza indietro where iniziare.

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.