Re: Statistics tab, "Tables" node
От | Guillaume Lelarge |
---|---|
Тема | Re: Statistics tab, "Tables" node |
Дата | |
Msg-id | 48206200.8000305@lelarge.info обсуждение исходный текст |
Ответ на | Re: Statistics tab, "Tables" node ("Dave Page" <dpage@pgadmin.org>) |
Ответы |
Re: Statistics tab, "Tables" node
("Dave Page" <dpage@pgadmin.org>)
|
Список | pgadmin-hackers |
Dave Page a écrit : > On Mon, May 5, 2008 at 4:38 PM, Guillaume Lelarge > <guillaume@lelarge.info> wrote: >>> +1 on the stuff from pg_stat (but make sure to check which columns are >>> available in which version) >>> >>> >> The patch attached takes care of this. > > It looks good to me, except the individual table stats should also > show the new data (ie. when you click on a single table). BTW, HOT > update count is cool - didn't know we added that :-) > Done. See attached patch. > The display is getting a little wide - I think it's OK for now, but if > anything else gets added we need to think about better ways to present > the data I think. > I completely agree. > What might be a nice enhancement, is some auto-sizing based on column > heading width. Wanna take a peek at that as well? > I'll get a look at it tonight. Can I apply this patch first and then work on the "auto-sizing columns" patch ? -- Guillaume. http://www.postgresqlfr.org http://dalibo.com Index: pgadmin/schema/pgTable.cpp =================================================================== --- pgadmin/schema/pgTable.cpp (révision 7278) +++ pgadmin/schema/pgTable.cpp (copie de travail) @@ -768,10 +768,27 @@ statistics->AddColumn(_("Tuples inserted"), 50); statistics->AddColumn(_("Tuples updated"), 50); statistics->AddColumn(_("Tuples deleted"), 50); + if (GetConnection()->BackendMinimumVersion(8, 3)) + { + statistics->AddColumn(_("Tuples HOT updated"), 50); + statistics->AddColumn(_("Live tuples"), 50); + statistics->AddColumn(_("Dead tuples"), 50); + } + if (GetConnection()->BackendMinimumVersion(8, 2)) + { + statistics->AddColumn(_("Last vacuum"), 50); + statistics->AddColumn(_("Last autovacuum"), 50); + statistics->AddColumn(_("Last analyze"), 50); + statistics->AddColumn(_("Last autoanalyze"), 50); + } if (hasSize) statistics->AddColumn(_("Size"), 60); wxString sql=wxT("SELECT st.relname, n_tup_ins, n_tup_upd, n_tup_del"); + if (GetConnection()->BackendMinimumVersion(8, 3)) + sql += wxT(", n_tup_hot_upd, n_live_tup, n_dead_tup"); + if (GetConnection()->BackendMinimumVersion(8, 2)) + sql += wxT(", last_vacuum, last_autovacuum, last_analyze, last_autoanalyze"); if (hasSize) sql += wxT(", pg_size_pretty(pg_relation_size(st.relid)") wxT(" + CASE WHEN cl.reltoastrelid = 0 THEN 0 ELSE pg_relation_size(cl.reltoastrelid) + COALESCE((SELECTSUM(pg_relation_size(indexrelid)) FROM pg_index WHERE indrelid=cl.reltoastrelid)::int8, 0) END") @@ -781,20 +798,35 @@ wxT(" JOIN pg_class cl on cl.oid=st.relid\n") wxT(" WHERE schemaname = ") + qtDbString(GetSchema()->GetName()) + wxT("\n ORDER BY relname"); - + pgSet *stats = GetDatabase()->ExecuteSet(sql); if (stats) { long pos=0; + int i; while (!stats->Eof()) { + i = 4; statistics->InsertItem(pos, stats->GetVal(wxT("relname")), PGICON_STATISTICS); statistics->SetItem(pos, 1, stats->GetVal(wxT("n_tup_ins"))); statistics->SetItem(pos, 2, stats->GetVal(wxT("n_tup_upd"))); statistics->SetItem(pos, 3, stats->GetVal(wxT("n_tup_del"))); + if (GetConnection()->BackendMinimumVersion(8, 3)) + { + statistics->SetItem(pos, i++, stats->GetVal(wxT("n_tup_hot_upd"))); + statistics->SetItem(pos, i++, stats->GetVal(wxT("n_live_tup"))); + statistics->SetItem(pos, i++, stats->GetVal(wxT("n_dead_tup"))); + } + if (GetConnection()->BackendMinimumVersion(8, 2)) + { + statistics->SetItem(pos, i++, stats->GetVal(wxT("last_vacuum"))); + statistics->SetItem(pos, i++, stats->GetVal(wxT("last_autovacuum"))); + statistics->SetItem(pos, i++, stats->GetVal(wxT("last_analyze"))); + statistics->SetItem(pos, i++, stats->GetVal(wxT("last_autoanalyze"))); + } if (hasSize) - statistics->SetItem(pos, 4, stats->GetVal(wxT("size"))); + statistics->SetItem(pos, i, stats->GetVal(wxT("size"))); stats->MoveNext(); pos++; } @@ -816,9 +848,18 @@ wxT(", idx_scan AS ") + qtIdent(_("Index Scans")) + wxT(", idx_tup_fetch AS ") + qtIdent(_("Index Tuples Fetched"))+ wxT(", n_tup_ins AS ") + qtIdent(_("Tuples Inserted"))+ - wxT(", n_tup_upd AS ") + qtIdent(_("Tuples Updated")) + - wxT(", n_tup_del AS ") + qtIdent(_("Tuples Deleted")) + - wxT(", heap_blks_read AS ") + qtIdent(_("Heap Blocks Read")) + + wxT(", n_tup_upd AS ") + qtIdent(_("Tuples Updated"))+ + wxT(", n_tup_del AS ") + qtIdent(_("Tuples Deleted")); + + if (GetConnection()->BackendMinimumVersion(8, 3)) + { + sql += + wxT(", n_tup_hot_upd AS ") + qtIdent(_("Tuples HOT Updated"))+ + wxT(", n_live_tup AS ") + qtIdent(_("Live Tuples"))+ + wxT(", n_dead_tup AS ") + qtIdent(_("Dead Tuples")); + } + + sql += wxT(", heap_blks_read AS ") + qtIdent(_("Heap Blocks Read")) + wxT(", heap_blks_hit AS ") + qtIdent(_("Heap Blocks Hit")) + wxT(", idx_blks_read AS ") + qtIdent(_("Index Blocks Read")) + wxT(", idx_blks_hit AS ") + qtIdent(_("Index Blocks Hit")) +
В списке pgadmin-hackers по дате отправления: