Linux-Bulgaria.ORG
навигация

 

начало

пощенски списък

архив на групата

семинари ...

линукс учебник

документи

как да ...

 

 

Предишно писмо Следващо писмо Предишно по тема Следващо по тема По Дата По тема (thread)

[Lug-bg] PgSQL table optimization.


  • Subject: [Lug-bg] PgSQL table optimization.
  • From: Marian Marinov <mm@xxxxxxxx>
  • Date: Thu, 26 Jun 2008 21:42:21 +0300

Здравейте колеги,

днес цял ден се мъча с една табличка на Postgre.

таблицата е следната:
cpustats=> \d stats
                                  Table "public.stats"
  Column  |            Type             |                      Modifiers
----------+-----------------------------+-----------------------------------------------------
 id       | integer                     | not null default 
nextval('stats_id_seq'::text)
 date     | timestamp without time zone |
 username | character varying(10)       | not null
 realtime | double precision            | default 0
 usertime | double precision            | default 0
 systime  | double precision            | default 0


Индексите с които съм пробвал са:

Indexes:
    "stats_id" unique, btree (id)
    "stats_24hour" btree (date) WHERE (date > '2008-06-25 13:09:33'::timestamp 
without time zone)
    "stats_24hourt" btree (date_trunc('hour'::text, date)) WHERE ((date 
> '2008-06-25 13:09:33'::timestamp without time zone) AND (date < '2008-06-26 
13:10:57'::timestamp without time zone))
    "stats_date" btree (date)
    "stats_datetrunc" btree (date_trunc('hour'::text, date))
    "stats_dateuser" btree (date_trunc('hour'::text, date), username)
    "stats_realtime" btree (realtime)
    "stats_systime" btree (systime)
    "stats_usertime" btree (usertime)


А заявките са тези:
cpustats-> \d exec2
               View "public.exec2"
 Column |            Type             | Modifiers
--------+-----------------------------+-----------
 date   | timestamp without time zone |
 count  | bigint                      |
View definition:
 SELECT date_trunc('hour'::text, stats.date) AS date, count(stats.date) AS 
count
   FROM stats
  WHERE stats.date::timestamp with time zone > (now() - '1 day'::interval)
  GROUP BY stats.date
  ORDER BY date;


cpustats-> \d daily_cpu_stats
          View "public.daily_cpu_stats"
 Column |            Type             | Modifiers
--------+-----------------------------+-----------
 hours  | timestamp without time zone |
 rt     | double precision            |
 ut     | double precision            |
 st     | double precision            |
 count  | bigint                      |
View definition:
 SELECT date_trunc('hour'::text, stats.date) AS hours, sum(stats.realtime) AS 
rt, sum(stats.usertime) AS ut, sum(stats.systime) AS st, count(stats.systime) 
AS count
   FROM stats
  WHERE stats.date::timestamp with time zone > (now() - '1 day'::interval)
  GROUP BY date_trunc('hour'::text, stats.date)
  ORDER BY date_trunc('hour'::text, stats.date);

проблемът ми е че тези заявки ми отнемат повече от 15сек всяка и товарят 
ужастно. Независимо какви комбинации от индекси използвах.

Таблицата към момента има 1,400,000 записа и на ден ми ръсте със средно 
400,000.

Аааа да и едно ограничение, говорим си за Postgres 7.4. Аз сериозно си мисля 
да си направя експеримент с partitioning на по-нов postgres. 

Моля ако някой има някаква идея как това може да се оптимизира да се обади. 
Приемам всякакви предложения, промяна на таблицата и каквото и да е. 

Бирата е от мен.

Поздрави
  Marian Marinov
  System Architect at Siteground.com
_______________________________________________
Lug-bg mailing list
Lug-bg@xxxxxxxxxxxxxxxxxx
http://linux-bulgaria.org/mailman/listinfo/lug-bg


 

наши приятели

 

линукс за българи
http://linux-bg.org

FSA-BG
http://fsa-bg.org

OpenFest
http://openfest.org

FreeBSD BG
http://bg-freebsd.org

KDE-BG
http://kde.fsa-bg.org/

Gnome-BG
http://gnome.cult.bg/

проект OpenFMI
http://openfmi.net

Silaw.ORG
http://cilaw.org

NetField Forum
http://netField.ludost.net/forum/

 

 

© Copyright 2006 - 2008 Linux-Bulgaria.ORG

Hosted by "Internet Group" Ltd. - Stara Zagora