Обсуждение: pg_autovacuum reltuples bug
There's a bug in pg_autovacuum that makes it vacuum large tables way to
frequently.
ogr=# select reltuples from pg_class where relname='ogr_summary';
reltuples
-------------
2.64411e+07
(1 row)
[2004-04-27 02:03:08 PM] table name: ogr."public"."ogr_results"
[2004-04-27 02:03:08 PM] relid: 615097; relisshared: 0
[2004-04-27 02:03:08 PM] reltuples: 7; relpages: 519951
[2004-04-27 02:03:08 PM] curr_analyze_count: 9904180; cur_delete_count: 168282
[2004-04-27 02:03:08 PM] ins_at_last_analyze: 9904180; del_at_last_vacuum: 168282
[2004-04-27 02:03:08 PM] insert_threshold: 507; delete_threshold 1014
[2004-04-27 02:03:08 PM] added table: ogr."public"."ogr_results"
I suspect the issue is on line 121:
new_tbl->reltuples = atoi(PQgetvalue(res, row, PQfnumber(res, "reltuples")));
I'm not a C coder, but doesn't atoi just take a text value and convert
it to an int? Shouldn't all the stats counters be stored as reals?
--
Jim C. Nasby, Database Consultant jim@nasby.net
Member: Triangle Fraternity, Sports Car Club of America
Give your computer some brain candy! www.distributed.net Team #1828
Windows: "Where do you want to go today?"
Linux: "Where do you want to go tomorrow?"
FreeBSD: "Are you guys coming, or what?"
This is a known bug, and if fixed in CVS. It will be released as part of 7.4.3, or just download pg_autovacuum.c and pg_autovacuum.h from cvs and compile a new executable. Matthew O'Connor Jim C. Nasby wrote: > There's a bug in pg_autovacuum that makes it vacuum large tables way to > frequently. > > ogr=# select reltuples from pg_class where relname='ogr_summary'; > reltuples > ------------- > 2.64411e+07 > (1 row) > > [2004-04-27 02:03:08 PM] table name: ogr."public"."ogr_results" > [2004-04-27 02:03:08 PM] relid: 615097; relisshared: 0 > [2004-04-27 02:03:08 PM] reltuples: 7; relpages: 519951 > [2004-04-27 02:03:08 PM] curr_analyze_count: 9904180; cur_delete_count: 168282 > [2004-04-27 02:03:08 PM] ins_at_last_analyze: 9904180; del_at_last_vacuum: 168282 > [2004-04-27 02:03:08 PM] insert_threshold: 507; delete_threshold 1014 > [2004-04-27 02:03:08 PM] added table: ogr."public"."ogr_results" > > I suspect the issue is on line 121: > new_tbl->reltuples = atoi(PQgetvalue(res, row, PQfnumber(res, "reltuples"))); > > I'm not a C coder, but doesn't atoi just take a text value and convert > it to an int? Shouldn't all the stats counters be stored as reals?