Skip site navigation (1) Skip section navigation (2)

Re: Asynchronous I/O in Postgres

From: Mladen Gogala <mladen(dot)gogala(at)vmsinfo(dot)com>
To: "pgsql-novice(at)postgresql(dot)org" <pgsql-novice(at)postgresql(dot)org>
Subject: Re: Asynchronous I/O in Postgres
Date: 2010-10-08 03:34:35
Message-ID: 4CAE914B.7050305@vmsinfo.com (view raw or flat)
Thread:
Lists: pgsql-docspgsql-novice
Mladen Gogala wrote:
>
> The platform is Postgres 9.0.1 on RH EL 5.5 x86-64. My understanding of 
> the "effective_io_concurrency" was apparently very wrong. What is the 
> "effective concurrency" and what are those "simultaneous I/O requests" 
> that man page is talking about. Can somebody please define in precise 
> terms what is it that this parameter defines? What kind of "concurrent 
> I/O" is Postgres doing without asynchronous I/O calls? If this parameter 
> is just a stub for the future reference, I'd like to know. Will Postgres 
> use asynchronous I/O? Is that planned?
>
>
>   
The mystery deepens. I thought that this might be the size of the I/O 
vector, for readv and writev routines, but not so. I did
"ltrace -e readv -p <PID> on a PID that was doing a large sequential 
scan  and not a single "readv" library call was encountered. All calls 
were just plain and simple "read" calls. Where is the concurrency? I am 
really curious now. The LWN article pompously announced that PostgreSQL 
9.0 will use asynchronous I/O, with aio_read and aio_write.  What does 
effective_io_concurrency define? What kind of "concurrent I/O" is 
Postgresql doing? This doesn't look very "concurrent":

read(65, "\16\0\0\0\210\254\333\240\1\0\4\0L\0P\0\0 \4 
\0\0\0\0000\231\240\r\370\227p\2"..., 8192) = 8192
read(65, "\16\0\0\0000\1\334\240\1\0\4\0008\0 \1\0 \4 
\0\0\0\0(\234\260\7`\231\220\5"..., 8192) = 8192
read(65, "\16\0\0\0\20;\334\240\1\0\4\0<\0(\1\0 \4 
\0\0\0\0\360\233\36\10\320\232(at)\2"..., 8192) = 8192
read(65, "\16\0\0\0Pk\334\240\1\0\4\0004\0\300\0\0 \4 \0\0\0\0H\232p\v 
\224P\f"..., 8192) = 8192
read(65, "\16\0\0\0\220\273C\241\1\0\4\0D\0p\0\0 \4 
\0\0\0\0\230\234\320\6\220\233\16\2"..., 8192) = 8192
read(65, "\16\0\0\0P\311\335\240\1\0\4\0<\0008\1\0 \4 
\0\0\0\0\240\231\300\fp\230`\2"..., 8192) = 8192
read(65, "\16\0\0\0\260*\335\240\1\0\4\0008\0\350\0\0 \4 
\0\0\0\0\20\230\340\0178\224\256\7"..., 8192) = 8192
read(65, "\16\0\0\0\20\10\337\240\1\0\4\0004\0h\0\0 \4 
\0\0\0\0\210\231\356\f\230\225\340\7"..., 8192) = 8192
read(65, "\16\0\0\0\220\310C\241\1\0\4\0(at)\0\260\0\0 \4 
\0\0\0\0H\231p\r0\227.\4"..., 8192) = 8192
read(65, "\16\0\0\0\350-\301\241\1\0\4\0<\0X\0\0 \4 
\0\0\0\0H\232p\v\0\226\216\10"..., 8192) = 8192

Descriptor 65 is a DB file:
[root(at)lpo-postgres-01 ~]# cd /proc/16663/fd
[root(at)lpo-postgres-01 fd]# ls -l 65
lrwx------ 1 postgres postgres 64 Oct  7 23:26 65 -> 
/software/pgsql/m-over/PG_9.0_201008051/16417/1572186.7

So, essentially, the process is reading block by block, in a sequence. 
What, exactly, does "effective_io_concurrency" mean?


-- 
Mladen Gogala 
Sr. Oracle DBA
1500 Broadway
New York, NY 10036
(212) 329-5251
www.vmsinfo.com 


In response to

Responses

pgsql-novice by date

Next:From: Lukasz BrodziakDate: 2010-10-08 05:41:14
Subject: Select statement problem
Previous:From: Mladen GogalaDate: 2010-10-08 01:00:02
Subject: Asynchronous I/O in Postgres

pgsql-docs by date

Next:From: Mladen GogalaDate: 2010-10-08 12:14:31
Subject: Re: Asynchronous I/O in Postgres
Previous:From: Robert HaasDate: 2010-10-08 02:39:50
Subject: EXPLAIN html formatting

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group