Dan, On 2/24/06 4:47 PM, "Dan Gorman" <dgorman@xxxxxxx> wrote: > Was that sequential reads? If so, yeah you'll get 110MB/s? How big > was the datafile size? 8MB? Yeah, you'll get 110MB/s. 2GB? No, they > can't sustain that. There are so many details missing from this test > that it's hard to have any context around it :) > > I was getting about 40-50MB/s on a PV with 14 disks on a RAID10 in > real world usage. (random IO and fully saturating a Dell 1850 with 4 > concurrent threads (to peg the cpu on selects) and raw data files) OK, how about some proof? In a synthetic test that writes 32GB of sequential 8k pages on a machine with 16GB of RAM: ========================= Write test results ============================== time bash -c "dd if=/dev/zero of=/dbfast1/llonergan/bigfile bs=8k count=2000000 && sync" & time bash -c "dd if=/dev/zero of=/dbfast3/llonergan/bigfile bs=8k count=2000000 && sync" & 2000000++0 records in 2000000++0 records out 2000000++0 records in 2000000++0 records out real 1m0.046s user 0m0.270s sys 0m30.008s real 1m0.047s user 0m0.287s sys 0m30.675s So that's 32,000 MB written in 60.05 seconds, which is 533MB/s sustained with two threads. Now to read the same files in parallel: ========================= Read test results ============================== sync time dd of=/dev/null if=/dbfast1/llonergan/bigfile bs=8k & time dd of=/dev/null if=/dbfast3/llonergan/bigfile bs=8k & 2000000++0 records in 2000000++0 records out real 0m39.849s user 0m0.282s sys 0m22.294s 2000000++0 records in 2000000++0 records out real 0m40.410s user 0m0.251s sys 0m22.515s And that's 32,000MB in 40.4 seconds, or 792MB/s sustained from disk (not memory). These are each RAID5 arrays of 8 internal SATA disks on 3Ware HW RAID controllers. Now for real usage, let's run a simple sequential scan query on 123,434 MB of data in a single table on 4 of these machines in parallel. All tables are distributed evenly by Bizgres MPP over all 8 filesystems: ============= Bizgres MPP sequential scan results ========================= [llonergan@salerno0 +AH4]$ !psql psql -p 9999 -U mppdemo1 demo Welcome to psql 8.1.1 (server 8.1.3), the PostgreSQL interactive terminal. Type: +AFw-copyright for distribution terms +AFw-h for help with SQL commands +AFw? for help with psql commands +AFw-g or terminate with semicolon to execute query +AFw-q to quit demo=# +AFw-timing Timing is on. demo=# select version(); version ---------------------------------------------------------------------------- ---------------------------------------------------------------------------- ----- PostgreSQL 8.1.3 (Bizgres MPP 2.1) on x86_64-unknown-linux-gnu, compiled by GCC gcc (GCC) 3.4.4 20050721 (Red Hat 3.4.4-2) compiled on Feb 23 2006 11:34:06 (1 row) Time: 0.570 ms demo=# select relname,8*relpages/128 as MB from pg_class order by relpages desc limit 6; relname | mb --------------------------------++-------- lineitem | 123434 orders | 24907 partsupp | 14785 part | 3997 customer | 3293 supplier | 202 (6 rows) Time: 1.824 ms demo=# select count(*) from lineitem; count ----------- 600037902 (1 row) Time: 60300.960 ms So that's 123,434 MB of data scanned in 60.3 seconds, or 2,047 MB/s on 4 machines, which uses 512MB/s of disk bandwidth on each machine. Now let's do a query that uses a this big table (a two way join) using all 4 machines: ============= Bizgres MPP Query results ========================= demo=# select demo-# sum(l_extendedprice* (1 - l_discount)) as revenue demo-# from demo-# lineitem, demo-# part demo-# where demo-# ( demo(# p_partkey = l_partkey demo(# and p_brand = 'Brand#42' demo(# and p_container in ('SM CASE', 'SM BOX', 'SM PACK', 'SM PKG') demo(# and l_quantity >= 7 and l_quantity <= 7 ++ 10 demo(# and p_size between 1 and 5 demo(# and l_shipmode in ('AIR', 'AIR REG') demo(# and l_shipinstruct = 'DELIVER IN PERSON' demo(# ) demo-# or demo-# ( demo(# p_partkey = l_partkey demo(# and p_brand = 'Brand#15' demo(# and p_container in ('MED BAG', 'MED BOX', 'MED PKG', 'MED PACK') demo(# and l_quantity >= 14 and l_quantity <= 14 ++ 10 demo(# and p_size between 1 and 10 demo(# and l_shipmode in ('AIR', 'AIR REG') demo(# and l_shipinstruct = 'DELIVER IN PERSON' demo(# ) demo-# or demo-# ( demo(# p_partkey = l_partkey demo(# and p_brand = 'Brand#53' demo(# and p_container in ('LG CASE', 'LG BOX', 'LG PACK', 'LG PKG') demo(# and l_quantity >= 22 and l_quantity <= 22 ++ 10 demo(# and p_size between 1 and 15 demo(# and l_shipmode in ('AIR', 'AIR REG') demo(# and l_shipinstruct = 'DELIVER IN PERSON' demo(# ); revenue ---------------- 356492404.3164 (1 row) Time: 114908.149 ms And now a 6-way join among 4 tables in this same schema: demo=# SELECT demo-# s.s_acctbal,s.s_name,n.n_name,p.p_partkey,p.p_mfgr,s.s_address,s.s_phone,s.s _comment demo-# FROM demo-# supplier s,partsupp ps,nation n,region r, demo-# part p, ( demo(# SELECT p_partkey, min(ps_supplycost) as min_ps_cost from part, partsupp , demo(# supplier,nation, region demo(# WHERE demo(# p_partkey=ps_partkey demo(# and s_suppkey = ps_suppkey demo(# and s_nationkey = n_nationkey demo(# and n_regionkey = r_regionkey demo(# and r_name = 'EUROPE' demo(# GROUP BY demo(# p_partkey demo(# ) g demo-# WHERE demo-# p.p_partkey = ps.ps_partkey demo-# and g.p_partkey = p.p_partkey demo-# and g. min_ps_cost = ps.ps_supplycost demo-# and s.s_suppkey = ps.ps_suppkey demo-# and p.p_size = 15 demo-# and p.p_type like '%BRASS' demo-# and s.s_nationkey = n.n_nationkey demo-# and n.n_regionkey = r.r_regionkey demo-# and r.r_name = 'EUROPE' demo-# ORDER BY demo-# s. s_acctbal desc,n.n_name,s.s_name,p.p_partkey demo-# LIMIT 100; s_acctbal | s_name | n_name | p_partkey | p_mfgr | s_address | s_phone | s_comment -----------++---------------------------++---------------------------++-------- ---++---------------------------++------ ------------------------------------++-----------------++--------------------- -------------------------------------- ------------------------------------------- 9999.70 | Supplier#000239544 | UNITED KINGDOM | 6739531 | Manufacturer#4 | 1UCMu 3TLyUThghoeZ8arg6cV3Mr | 33-509-584-9496 | carefully ironic asymptotes cajole quickly. slyly silent a ccounts sleep. fl ... ... 9975.53 | Supplier#000310136 | ROMANIA | 10810115 | Manufacturer#5 | VNWON A5Sr B | 29-977-903-6199 | pending deposits wake permanently; final accounts sleep ab out the pending deposits. (100 rows) Time: 424981.813 ms - Luke