Received: from localhost (unknown [200.46.204.183]) by mail.postgresql.org (Postfix) with ESMTP id C5B0D634D98 for ; Thu, 2 Apr 2009 17:20:25 -0300 (ADT) Received: from mail.postgresql.org ([200.46.204.86]) by localhost (mx1.hub.org [200.46.204.183]) (amavisd-maia, port 10024) with ESMTP id 21919-07 for ; Thu, 2 Apr 2009 17:20:24 -0300 (ADT) X-Greylist: from auto-whitelisted by SQLgrey-1.7.6 Received: from EXHUB018-2.exch018.msoutlookonline.net (exhub018-2.exch018.msoutlookonline.net [64.78.17.17]) by mail.postgresql.org (Postfix) with ESMTP id 24D6C634D40 for ; Thu, 2 Apr 2009 17:20:21 -0300 (ADT) Received: from EXVMBX018-1.exch018.msoutlookonline.net ([64.78.17.47]) by EXHUB018-2.exch018.msoutlookonline.net ([64.78.17.17]) with mapi; Thu, 2 Apr 2009 13:20:19 -0700 From: Scott Carey To: Merlin Moncure CC: Greg Smith , Mark Kirkwood , "pgsql-performance@postgresql.org" Date: Thu, 2 Apr 2009 13:20:15 -0700 Subject: Re: Raid 10 chunksize Thread-Topic: [PERFORM] Raid 10 chunksize Thread-Index: AcmzvK25NfeDmBgCQG+VKwO5ZOYzegAE8ENv Message-ID: In-Reply-To: Accept-Language: en-US Content-Language: en X-MS-Has-Attach: X-MS-TNEF-Correlator: acceptlanguage: en-US Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Virus-Scanned: Maia Mailguard 1.0.1 X-Spam-Status: No, hits=0 tagged_above=0 required=5 tests=none X-Spam-Level: X-Archive-Number: 200904/46 X-Sequence-Number: 33413 On 4/2/09 10:58 AM, "Merlin Moncure" wrote: > On Wed, Mar 25, 2009 at 12:16 PM, Scott Carey w= rote: >> On 3/25/09 1:07 AM, "Greg Smith" wrote: >>> On Wed, 25 Mar 2009, Mark Kirkwood wrote: >>>> I'm thinking that the raid chunksize may well be the issue. >>>=20 >>> Why? =A0I'm not saying you're wrong, I just don't see why that paramete= r >>> jumped out as a likely cause here. >>>=20 >>=20 >> If postgres is random reading or writing at 8k block size, and the raid >> array is set with 4k block size, then every 8k random i/o will create TW= O >> disk seeks since it gets split to two disks. =A0 Effectively, iops will = be cut >> in half. >=20 > I disagree. The 4k raid chunks are likely to be grouped together on > disk and read sequentially. This will only give two seeks in special > cases. =20 By definition, adjacent raid blocks in a stripe are on different disks. > Now, if the PostgreSQL block size is _smaller_ than the raid > chunk size, random writes can get expensive (especially for raid 5) > because the raid chunk has to be fully read in and written back out. > But this is mainly a theoretical problem I think. This is false and a RAID-5 myth. New parity can be constructed from the ol= d parity + the change in data. Only 2 blocks have to be accessed, not the whole stripe. Plus, this was about RAID 10 or 0 where parity does not apply. >=20 > I'm going to go out on a limb and say that for block sizes that are > within one or two 'powers of two' of each other, it doesn't matter a > whole lot. SSDs might be different, because of the 'erase' block > which might be 128k, but I bet this is dealt with in such a fashion > that you wouldn't really notice it when dealing with different block > sizes in pg. Well, raid block size can be significantly larger than postgres or file system block size and the performance of random reads / writes won't get worse with larger block sizes. This holds only for RAID 0 (or 10), parity is the ONLY thing that makes larger block sizes bad since there is a read-modify-write type operation on something the size of one block. Raid block sizes smaller than the postgres block is always bad and multiplies random i/o. Read a 8k postgres block in a 8MB md raid 0 block, and you read 8k from one disk. Read a 8k postgres block on a md raid 0 with 4k blocks, and you read 4k fro= m two disks.