On 7 October 2010 03:25, Tom Lane <tgl@xxxxxxxxxxxxx> wrote: > Ivan Voras <ivoras@xxxxxxxxxxx> writes: >> On 10/04/10 20:49, Josh Berkus wrote: >>>> The other major bottleneck they ran into was a kernel one: reading from >>>> the heap file requires a couple lseek operations, and Linux acquires a >>>> mutex on the inode to do that. > >> Hmmm... lseek? As in "lseek() then read() or write()" idiom? It AFAIK >> cannot be fixed since you're modifying the global "strean position" >> variable and something has got to lock that. > > Um, there is no "global stream position" associated with an inode. > A file position is associated with an open-file descriptor. You're right of course, I was pattern matching late last night on the "lseek()" and "locking problems" keywords and ignored "inode". > If Josh quoted the problem correctly, the issue is that the kernel is > locking a file's inode (which may be referenced by quite a lot of file > descriptors) in order to change the state of one file descriptor. > It sure sounds like a possible source of contention to me. Though it does depend on the details of how pg uses it. Forked processes share their parents' file descriptors. -- Sent via pgsql-performance mailing list (pgsql-performance@xxxxxxxxxxxxxx) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-performance