Thanks!
I'll look into those system tools and probably come back with some more
questions...

Best,
Adi

On Mon, Sep 13, 2010 at 4:58 AM, Craig Ringer
<cr...@postnewspapers.com.au>wrote:

> On 09/12/2010 10:02 PM, adi hirschtein wrote:
>
>> Hi Craig,
>>
>> Thanks a lot for the quick response!
>> I'm coming from the Oracle side of the house and In oracle for instance,
>> you use shared buffer as well, but you are still able to see which
>> session is waiting for which blocks and if one session is doing the
>>
> > "real" I/O then the other one wait on 'wait for other session"
> > event so you are able to know who did the actual I/O
>
> There's nothing like that in PostgreSQL. There's some lock monitoring
> support for seeing what transactions hold locks and which other transactions
> are waiting on those locks, but AFAIK nothing like that for I/O. PostgreSQL
> does have DTrace hooks, so if you're on Solaris or some BSDs you might be
> able to use those to get the data you want.
>
> It'd be a pretty significant job to add a decent I/O monitoring system to
> PostgreSQL. Personally, if I needed something like that, I'd want to base it
> on an existing system-level tracing toolkit like Solaris's DTrace or Linux's
> "perf". I'd want to add some additional instrumentation hooks - some of
> which already exist in Pg for DTrace - to permit the tools to beaware of
> transactions, statements, the current database, which tables are which,
> which indexes are associated with which tables, etc. Then I'd use the data
> collected by the performance monitoring tools to report on load associated
> with particular users, indexes, tables, queries, etc. That way I'd be able
> to handle things like whether a request was satisfied with OS buffer cache
> or had to go to real disk, report on disk queue depth, etc as part of the
> whole system. It'd be a big job even with the use of existing trace tools to
> help.
>
> Currently there are some DTrace hooks, but I don't think there's any kind
> of integrated toolset like I've described to use the monitoring hooks plus
> the existing system hooks to do detailed reporting of load/user,
> load/tablespace, etc.
>
>
>  the reason behind it is that you want to check which objects is being
>> heavily hit by which  business processes or users and then tier your
>> storage accordingly.
>>
>
> At the moment, all you can really do is turn up the logging levels to log
> queries, logins, etc. Then watch pg_stat_activity and use system-level tools
> like iostat, vmstat, top, perf/dtrace, etc. If you see backends that're
> hogging resources you can look their pid up in pg_stat_activity or the logs,
> see what they were doing, and run controlled tests to see what can be
> improved.
>
> It's somewhat clumsy, but seems to work pretty well most of the time.
>
> Nobody has stepped up to build a comprehensive tracing and performance
> framework - and even if they did, they'd have to make it lightweight enough
> that it didn't slow PostgreSQL down when it wasn't in use, show that it
> wouldn't add an excessive maintenance burden for the developers, show that
> it wouldn't break or produce incorrect results the first time something
> changed, etc. The Linux kernel demonstrates just how hard getting this right
> can be. So does the amount of effort Sun put in to DTrace. Sure, PostgreSQL
> isn't an OS kernel, but it's far from simple.
>
> I guess that's why Oracle charges the big bucks - because of all the extras
> they include that round the database out into the kitchen-sink monster that
> it is.
>
>
>  is there any place rather than pg_stat_activity that you think I should
>> take a look at?
>>
>
> System-level tools and the postgresql logs, especially after proper
> configuration. There are some tools on pgfoundry that help a little with log
> analysis.
>
> --
> Craig Ringer
>

Reply via email to