Re: [Lug-bg] PgSQL table optimization.
- Subject: Re: [Lug-bg] PgSQL table optimization.
- From: Marian Marinov <mm@xxxxxxxx>
- Date: Fri, 4 Jul 2008 15:48:00 +0300
Здравейте,
с Васил се опитахме да направим какво ли не за да може да се използва 7.4 но
за съжаление query planner-а на PostgreSQL 7.4 стоически отказа да се
възползва от индексите :)
Единствения вариянт който остана беше да се uprade-не до 8.3 за щастие
postgresql имаше готови пакети за RHEL и не ми се наложи аз да си правя
такива.
След upgrade-а си работи както се очаква. Желанието ми беше просто да не
минавам през процедурата по upgrade защото сега трябва да upgrade-на повече
от 150 сървъра, което не е най-приятната задача на света :(
Поздрави
Мариян
P.S. Написах си скрипче за upgrade от 7.4 на 8.3 ако някой го интересува мога
да му го дам.
On Friday 04 July 2008 14:33:38 Илия Дюлгеров wrote:
> Marian Marinov wrote:
> > Здравейте колеги,
> >
> > днес цял ден се мъча с една табличка на 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
>
> Привет признавам че не съм SQL спец а прост админ но ако искаш
> перформанс наистина треа да upgrandesh към 8.3 , новата версия е
> наистина в пъти по бърза ( миграцията става лесно казвам от опит)
> машината/server-a трябва да е на ниво (Athlon64/Opteron или Core2Duo)
> RAM памет да е достатъчно дисковете бързи и ако са няколко по добре.
> от страна на настройки за по добра производителност има и значение
> конфигурацията на postgresql.conf:
>
> port = 5432 # (change requires restart)
> max_connections = 220 # (change requires restart)
> # (change requires restart)
> # (change requires restart)
>
>
> ssl = on # (change requires restart)
> # (change requires restart)
> password_encryption = on
>
>
>
> shared_buffers = 256MB
> temp_buffers = 64MB # min 800kB
> # (change requires restart)
> work_mem = 32MB # min 64kB
> maintenance_work_mem = 128MB # min 1MB
>
>
> max_fsm_pages = 204800
>
>
> bgwriter_delay = 600ms # 10-10000ms between rounds
>
>
>
> fsync = off
> full_page_writes = on # recover from partial page writes
> wal_buffers = 1024kB # min 32kB
>
>
> checkpoint_segments = 16
>
> enable_bitmapscan = on
> enable_hashagg = on
> enable_hashjoin = on
> enable_indexscan = on
>
>
> effective_cache_size = 1024MB
>
>
> geqo = on
>
>
> default_statistics_target = 10
>
> log_destination = 'stderr'
>
> logging_collector = on
> log_directory = 'pg_log'
> log_truncate_on_rotation = on
> log_rotation_age = 7d # Automatic rotation of logfiles will
> # happen after that time. 0 to disable.
> log_rotation_size = 0
>
> log_min_duration_statement = 1000 # -1 is disabled, 0 logs all
> statements
>
>
> log_checkpoints = on
> log_connections = on
> log_disconnections = on
> log_duration = on
> log_hostname = on
> log_line_prefix = '%h %t'
> log_lock_waits = on
>
>
> track_counts = on
>
> autovacuum = off # Enable autovacuum subprocess? 'on'
>
>
> datestyle = 'iso, mdy'
>
>
> lc_messages = 'en_US.UTF-8'
> # strings
> lc_monetary = 'en_US.UTF-8'
>
> default_text_search_config = 'pg_catalog.english'
>
> извадката по горе е от работещ постгре 8.3.0
>
> regex_flavor = advanced # advanced, extended, or basic
>
> и задължително да се провери плана за изпъление на заявката с
> http://explain-analyze.info/ и/или
> http://www.postgresql.org/docs/8.3/static/sql-explain.html
>
> успех
_______________________________________________
Lug-bg mailing list
Lug-bg@xxxxxxxxxxxxxxxxxx
http://linux-bulgaria.org/mailman/listinfo/lug-bg
|