Search Postgresql Archives

Re: Hash index not being updated

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi.

Right direction is to use btree index.

Hash indexes are sensitive to power failures.

2011/10/5, Justin Naifeh <jnaifeh@xxxxxxxxxxxxxx>:
> In Postgres 8.4, I have a table called java_types with two columns,
> package_name and class_name. There is another table called java_objects
> that defines a column called type whose value matches the concatenation
> of package_name and class_name. A typical join and result looks like this:
>
> SELECT package_name, class_name, type FROM java_objects o INNER JOIN
> java_types t ON (t.package_name || '.' || t.class_name) = o.type;
>
> package_name, class_name, type
> "java.lang" , "String"  , "java.lang.String"
>
> The above works, although it is slow for large data sets so I defined
> the following index:
>
> CREATE INDEX java_type_hash
>    ON java_types
>    USING hash
>    (((package_name::text || '.'::text) || class_name::text));
>
> I confirmed that my new index is being used by inspecting the query plan
> and finding the following:
>
> ->  Index Scan using java_type_hash on java_types (cost=0.00..1.22
> rows=1 width=49)
>         Index Cond: ((((java_types.package_name)::text || '.'::text) ||
> (java_types.class_name)::text) = (java_objects.type)::text)
>
> This gave me a speed boost and worked initially. A day after defining
> the index, however, I inserted a few rows into java_types and then many
> rows into java_objects. When I ran the aforementioned query I got 0
> results. A month later (without restarting postgres), I ran the same
> query and still got 0 results. I suspected the index had either been
> corrupted or not updated automatically. I confirmed this by running the
> following:
>
> REINDEX INDEX java_type_hash;
>
> And then when I re-ran the same query the correct results came back! I
> thought that maybe my system wasn't set to autovacuum but a query for my
> current settings confirmed that it was:
>
> autovacuum = on
> autovacuum_analyze_scale_factor = 0.1
> autovacuum_analyze_threshold = 256
> autovacuum_freeze_max_age = 200000000
> autovacuum_max_workers = 3
> autovacuum_naptime = 60
> autovacuum_vacuum_cost_delay = 20
> autovacuum_vacuum_cost_limit = -1
> autovacuum_vacuum_scale_factor = 0.2
> autovacuum_vacuum_threshold = 512
> track_counts = on
>
> Finally, this query gave me some extra information about when my system
> had last been vacuumed/analyzed:
>
> SELECT relname, last_vacuum, last_autovacuum, last_analyze,
> last_autoanalyze FROM pg_stat_all_tables WHERE relname = 'java_types'
>
> rename      , last_vacuum                 , last_autovacuum ,
> last_analyze                , last_autoanalyze
> "java_types", "2011-10-04 13:37:03.867-07", ""              ,
> "2011-10-04 13:21:22.342-07", "2011-08-30 10:15:13.018-07"
>
> The index was created on 8/30/2011, inserts were done on java_types and
> java_objects on 8/31/2011, and then 10/4/2011 is when I manually ran
> REINDEX (and later VACUUM ANALYZE).
>
> So after all that, the questions is: If I have autovacuum set to true
> then I shouldn't have to worry about calling VACUUM/ANALYZE/REINDEX
> manually to update my java_types_hash index, right? Maybe my settings
> are wrong or I'm making an incorrect assumption about Postgres behavior.
>
> Any pointer in the right direction helps. Thanks in advance.
>
> --
>
>
>   Justin Naifeh Software Developer
>
> Voice:
> 303-460-7111 x1 	Toll Free:
> 877-444-3074 x1 	Cell:
> 720-363-8874 	AIM, Yahoo
> justinnaifeh <aim:goim?screenname=justinnaifeh>
>
> www.terraframe.com/products/runwaysdk
> <http://www.terraframe.com/products/runwaysdk>
> Makers of TerraFrame RUNWAY SDK^(TM), the next-generation
> model-driven engineering (MDE) application toolkit for software developers
>
>


-- 
------------
pasman

-- 
Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux