I manage a bunch of Postgres DBs and one of the things I almost always forget to do when setting up a new one is set the readahead up from the default of 256. I created this script and run it out of /etc/rc.local and sometimes cron it too. The 3 commands at the top are only really relevant on systems with “huge” memory – probably over 64 GB. We ran into some memory problems with CentOS 6 on a box with 128 GB ram which we ended up working around by reinstalling CentOS 5, but the /sys/kernel/mm/redhat_transparent_hugepage/
options below should fix them in 6.x (though we haven’t actually tried it on that DB, we haven’t seen any problems in other large DBs).
#!/bin/bash echo no > /sys/kernel/mm/redhat_transparent_hugepage/khugepaged/defrag echo never >/sys/kernel/mm/redhat_transparent_hugepage/defrag echo 1 > /proc/sys/vm/dirty_background_ratio BLOCK_DEVICES=`perl -ne 'chomp; my @a=split(/[s]+/); next unless $a[4]; next if ($a[4] =~ /sd[a-z]+[d]+/); print "$a[4]n";' /proc/partitions ` logger -t tune_blockdevs "Block devices matching: $BLOCK_DEVICES" for DEV in $BLOCK_DEVICES; do logger -t tune_blockdevs "Setting IO params for $DEV" ### Uncomment the below line if using SSD # echo "noop" > /sys/block/$DEV/queue/scheduler /sbin/blockdev --setra 65536 /dev/$DEV done