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

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

 

 

Linux-Bulgaria.ORG

Mailing list messages are © Copyright their authors.