2011/10/7 Giovanni Mancuso <gmanc...@babel.it>

>  Hi,
>
> I have a problem with my postgres 8.2.
>
> I Have an application that write ojbect (file, folder, ecc.) and another
> table that have account. This to tables are likend eith another tablenthat
> have a permissions foreach objects + accounts.
>
> My structure is:
>
> TABLE WITH USERS
> # \d auth_accounts
>                                 Table "public.auth_accounts"
>    Column   |  Type   |
> Modifiers
>
> ------------+---------+----------------------------------------------------------------------
>  id         | integer | not null default
> nextval(('"auth_accounts_id_seq"'::text)::regclass)
>  login      | text    | not null
>  password   | text    | not null
>  first_name | text    |
>  last_name  | text    |
>  email      | text    |
>  phone      | text    |
> Indexes:
>     "auth_accounts_pkey" PRIMARY KEY, btree (id)
>     "auth_accounts_id_key" UNIQUE, btree (id)
>
>
> TABLE WITH OBJECTS:
> \d dm_object
>                                            Table "public.dm_object"
>     Column    |            Type             |
> Modifiers
>
> --------------+-----------------------------+------------------------------------------------------------------
>  id           | integer                     | not null default
> nextval(('"dm_object_id_seq"'::text)::regclass)
>  name         | text                        | not null
>  summary      | text                        |
>  object_type  | text                        |
>  create_date  | timestamp without time zone |
>  object_owner | integer                     |
>  status       | smallint                    | not null
>  status_date  | timestamp without time zone |
>  status_owner | integer                     |
>  version      | integer                     | not null default 1
>  reindex      | smallint                    | default 0
>  filesize     | numeric                     |
>  token        | text                        |
>  delete_date  | date                        |
> Indexes:
>     "dm_object_id_key" UNIQUE, btree (id)
>     "delete_date_index" btree (delete_date)
>     "dm_object_object_type_idx" btree (object_type)
>     "dm_object_search_key" btree (name, summary)
>     "filesize_index" btree (filesize)
>     "id_index" btree (id)
>     "name_index" btree (name)
>     "object_type_index" btree (object_type)
>     "summary_index" btree (summary)
>
>
> TABLE WITH PERMISSIONS:
> docmgr=# \d dm_object_perm
>    Table "public.dm_object_perm"
>    Column   |   Type   | Modifiers
> ------------+----------+-----------
>  object_id  | integer  | not null
>  account_id | integer  |
>  group_id   | integer  |
>  bitset     | smallint |
> Indexes:
>     "account_id_index" btree (account_id)
>     "bitset_index" btree (bitset)
>     "dm_object_perm_group_id" btree (group_id)
>     "dm_object_perm_id_key" btree (object_id)
>     "idx_dm_object_perm_nulls" btree (bitset) WHERE bitset IS NULL
>     "object_id_index" btree (object_id)
> Foreign-key constraints:
>     "$1" FOREIGN KEY (object_id) REFERENCES dm_object(id)
>
>
> If i count the records foreach tables i have:
> select count(*) from dm_object;
>  count
> -------
>   9778
> (1 row)
>
> select count(*) from auth_accounts;
>  count
> -------
>   4334
>
> select count(*) from dm_object_perm;
>   count
> ----------
>  38928077
> (1 row)
>
> The dm_object_perm have 38928077 of record.
>
> If i run the "EXPLAIN ANALYZE" of "select *" in auth_accounts and dm_object
> i have good time:
> docmgr=# explain analyze select * from auth_accounts;
>                                                      QUERY
> PLAN
>
> --------------------------------------------------------------------------------------------------------------------
>  Seq Scan on auth_accounts  (cost=0.00..131.33 rows=4333 width=196) (actual
> time=20.000..200.000 rows=4334 loops=1)
>  Total runtime: 200.000 ms
> (2 rows)
>
> docmgr=# explain analyze select * from dm_object;
>                                                   QUERY
> PLAN
>
> --------------------------------------------------------------------------------------------------------------
>  Seq Scan on dm_object  (cost=0.00..615.78 rows=9778 width=411) (actual
> time=0.000..10.000 rows=9778 loops=1)
>  Total runtime: 10.000 ms
> (2 rows)
>
>
> If i run "explain analyze select * from dm_object_perm;" it goes on for
> many hours.
>
> If i try to execute a left join: "SELECT dm_object.id FROM dm_object LEFT
> JOIN dm_object_perm ON dm_object.id = dm_object_perm.object_id;" my db is
> unusable.
>
> how can I fix this?
>

once you've provided more informations as required by other people it should
be easier to help you. What's duration do you expect your hardware to take
to read 1GB ? (or 10GB ?)

Even without this 'slow' (really?) query Your must review your indexes
usages: duplicate indexes are useless and reduce overall performance.
The first task here is to remove the duplicates.





>
> Thanks
> --
>
>  *Giovanni Mancuso*
> System Architect
> Babel S.r.l. - http://www.babel.it
> *T:* 06.9826.9600 *M:* 3406580739 *F:* 06.9826.9680
> P.zza S.Benedetto da Norcia, 33 - 00040 Pomezia (Roma)
> ------------------------------
>  CONFIDENZIALE: Questo messaggio ed i suoi allegati sono di carattere
> confidenziale per i destinatari in indirizzo.
> E' vietato l'inoltro non autorizzato a destinatari diversi da quelli
> indicati nel messaggio originale.
> Se ricevuto per errore, l'uso del contenuto e' proibito; si prega di
> comunicarlo al mittente e cancellarlo immediatamente.
>
>
> --
> Sent via pgsql-performance mailing list (pgsql-performance@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-performance
>
>


-- 
Cédric Villemain +33 (0)6 20 30 22 52
http://2ndQuadrant.fr/
PostgreSQL: Support 24x7 - Développement, Expertise et Formation

<<logo.gif>>

Reply via email to