Re: SSD + RAID - Mailing list pgsql-performance

From Richard Neill
Subject Re: SSD + RAID
Date
Msg-id 4B06E72D.20504@cam.ac.uk
Whole thread Raw
In response to Re: SSD + RAID  (Axel Rau <Axel.Rau@chaos1.de>)
Responses Re: SSD + RAID
List pgsql-performance
Axel Rau wrote:
>
> Am 13.11.2009 um 14:57 schrieb Laszlo Nagy:
>
>> I was thinking about ARECA 1320 with 2GB memory + BBU. Unfortunately,
>> I cannot find information about using ARECA cards with SSD drives.
> They told me: currently not supported, but they have positive customer
> reports. No date yet for implementation of the TRIM command in firmware.
> ...
>> My other option is to buy two SLC SSD drives and use RAID1. It would
>> cost about the same, but has less redundancy and less capacity. Which
>> is the faster? 8-10 MLC disks in RAID 6 with a good caching
>> controller, or two SLC disks in RAID1?

Despite my other problems, I've found that the Intel X25-Es work
remarkably well. The key issue for short,fast transactions seems to be
how fast an fdatasync() call can run, forcing the commit to disk, and
allowing the transaction to return to userspace.
With all the caches off, the intel X25-E beat a standard disk by a
factor of about 10.
Attached is a short C program which may be of use.


For what it's worth, we have actually got a pretty decent (and
redundant) setup using a RAIS array of RAID1.


[primary server]

SSD }
      }  RAID1  -------------------}  DRBD --- /var/lib/postgresql
SSD }                            }
                                   }
                                   }
                                   }
                                   }
[secondary server]               }
                                   }
SSD }                            }
      }  RAID1 --------gigE--------}
SSD }



The servers connect back-to-back with a dedicated Gigabit ethernet
cable, and DRBD is running in protocol B.

We can pull the power out of 1 server, and be using the next within 30
seconds, and with no dataloss.


Richard



#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

#define NUM_ITER 1024

int main ( int argc, char **argv ) {
    const char data[] = "Liberate";
    size_t data_len = strlen ( data );
    const char *filename;
    int fd;
    unsigned int i;

    if ( argc != 2 ) {
        fprintf ( stderr, "Syntax: %s output_file\n", argv[0] );
        exit ( 1 );
    }
    filename = argv[1];
    fd = open ( filename, ( O_WRONLY | O_CREAT | O_EXCL ), 0666 );
    if ( fd < 0 ) {
        fprintf ( stderr, "Could not create \"%s\": %s\n",
              filename, strerror ( errno ) );
        exit ( 1 );
    }

    for ( i = 0 ; i < NUM_ITER ; i++ ) {
        if ( write ( fd, data, data_len ) != data_len ) {
            fprintf ( stderr, "Could not write: %s\n",
                  strerror ( errno ) );
            exit ( 1 );
        }
        if ( fdatasync ( fd ) != 0 ) {
            fprintf ( stderr, "Could not fdatasync: %s\n",
                  strerror ( errno ) );
            exit ( 1 );
        }
    }
    return 0;
}


pgsql-performance by date:

Previous
From: Jonathan Foy
Date:
Subject: Re: View based upon function won't use index on joins
Next
From: Richard Neill
Date:
Subject: Re: Postgres query completion status?