powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите PostgreSQL настроить
20 сообщений из 20, страница 1 из 1
Помогите PostgreSQL настроить
    #32843217
vadim_123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как примерно postgresql.conf должен выглядеть для этого:

Postgres v7.4.6
Память 1Гб
На винте места 15Гб
Всего 20 таблиц.
Самая большая пока 10млн записей. 10 таблиц 100тыс-1млн. Остальные совсем маленькие.
База используется только для хранения данных. Одновременное чисто коннектов 5-10 максимум. Каждую ночь - добавление по 1000-10000 записей.

А вообще проблема в том, что Insert в таблицу с 10млн очень медленно работает, иногда 1 запись могла до минуты вставляться. С Delete таже проблема. Раньше был 7.3, после небольшой настройки удалось немного ускорить, но в конце концов перешли всё-таки на 7.4, и памяти добавили. Безрезультатно.
Знаю что дело в основном в Foreign Key, но их отключать никак нельзя.

ЗЫ:
http://detail.phpclub.net/store/html/postgresql/node2.html
Наверное многие это читали. Что означает "1-4 ГБ доступной памяти", "можете взять 2-4% доступной памяти"? Это про оперативную память, или про что?
...
Рейтинг: 0 / 0
Помогите PostgreSQL настроить
    #32843269
Фотография Niemi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конечно оперативная память.
Поиши здесь по форуму, SadSpirit выкладывал FAQ по настройке, на удобном русском. Наверно ещё стоит разобратся с "VACUUM ANALYZE" и "VACUUM".

http://www.postgresql.org/docs/7.4/static/maintenance.html
...
Рейтинг: 0 / 0
Помогите PostgreSQL настроить
    #32843377
ilejn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NiemiНаверно ещё стоит разобратся с "VACUUM ANALYZE" и "VACUUM".


Какое влияние на ситуацию может оказать VACUUM,
если данные согласно описанию не удаляются вообще?
[это не риторический вопрос, а просто вопрос ;)]
...
Рейтинг: 0 / 0
Помогите PostgreSQL настроить
    #32843637
wbear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
очень хорошая статья и по русски:


http://detail.phpclub.net/store/html/postgresql/
...
Рейтинг: 0 / 0
Помогите PostgreSQL настроить
    #32843734
mwolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
Insert в таблицу с 10млн очень медленно работает, иногда 1 запись могла до минуты вставляться. С Delete таже проблема.

Странно всё это. ТАКИЕ тормоза!!! С чего?
Покажи файл postgres.conf. Можно не весь. Интересуют части Shared Memory Size, Non-shared Memory Sizes, Write-ahead log.

Ещё момент. Вставка - это обычный INSERT INTO ... VALUES(...)? Или вместо VALUES SELECT стоит? Может просто запросы у тебя не оптимальны? Автосбор статистики стоит? Некоторые это дело любят отключать.

Код: plaintext
Знаю что дело в основном в Foreign Key
Что у тебя за схема тогда?!?!?! Внешние ключи на индексах делаются, а это сильно не тормозит. Тем более когда "Каждую ночь - добавление по 1000-10000 записей" . Я убирал внешние ключи при вставке >50 записей\сек, да и то, особого прироста скорости не обнаружилось.
...
Рейтинг: 0 / 0
Помогите PostgreSQL настроить
    #32844369
vadim_123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
очень хорошая статья и по русски

Читал, конечно. Из-за того, что она по-русски, ума не прибавилось. Исключительно теоретические знания. А что на что влияет, и в каких ситуациях - только на собственном опыте, или у других спросить.
Вот и спрашиваю. Как для описанной конфигурации всё нормально настроить? Или, что может на производительность повлиять очень сильно? Эксперементировать можно долго. У более опытных людей, думаю, опыта в этом должно быть гораздо больше.

Вставка - это обычный INSERT INTO ... VALUES(...)?

Да.

Покажи файл postgres.conf

Все настройки по умолчанию. Изменялось многое, но только в целях эксперимета. После того как обнаруживалось, что результата это почти не приносит, ставилось обратно. Вероятно, надо изменять комплексно, и с умом. Вопрос - что?

Всё, что изменено на данный момент. Остальное по умолчанию.

7.3.
shared_buffers = 2048

В свежеустановленном 7.4.6:
shared_buffers = 8192



Что у тебя за схема тогда?!?!?!

Хоть и риторический вопрос, но всё-же. Вот, пожалуйста. Сам удивляюсь. Не моя, я-бы до такого не додумался. Жуткая вещь, приблизительно выглядит так:

site: (20 записей)
_____ поля: site_id
users: (200 записей)
__ поля: users_id, site_id.
__ key:
_____ site_id= site .site_id
orders: (500000 записей)
__ поля: orders_id, site_id, cash_user, driver_user, fill_user
__ key:
_____ site_id= site .site_id
_____ (site_id+cash_user)= users .(site_id+users_id)
_____ (site_id+driver_user)= users .(site_id+users_id)
_____ (site_id+fill_user)= users .(site_id+users_id)
orders_line: (1млн записей)
__ поля: orders_line_id, site_id, orders_id, parent_id, stock_id, good_id
__ key:
_____ site_id= site .site_id
_____ good_id= good .good_id
_____ (site_id+orders_id)= orders .(site_id+orders_id)
_____ (site_id+parent_id)= orders_line .(site_id+parent_id)
_____ (site_id+stock_id)= stock .(site_id+stock_id)
orders_line_baker: (500000 записей)
__ поля: orders_line_baker_id, site_id, orders_line_id
__ key:
_____ site_id= site .site_id
_____(site_id+orders_line_id)= orders_line .(site_id+orders_line_id)
stock: (1 млн записей - На этой очень сильно тормозит при Delete. Окончания за 2ое суток не дождался.)
__ поля: stock_id, site_id, user_id, stock_div_id
__ key:
_____site_id= site .site_id
_____stock_div_id= stock_div .stock_div_id
_____(site_id+users_id)= users .(site_id+users_id)
stock_line: (10 млн записей - На этой тормозит при Insert)
__ поля: stock_line_id, site_id, stock_id, item_id
__ key:
_____site_id= site .site_id
_____item_id= item .item_id
_____(site_id+stock_id)= stock .(site_id+stock_id)

Ну, и ещё несколько штук, поменьше.
item, good, stock_div, stock_size, customer, address, time_sheet, remains, remains_line . На всех, соответственно тоже ключи (site_id + ..._id), или просто (site_id)


Если всё это отключить, всё работает быстро, но из-за постоянных обрывов связи, образуется много всего ненужного, поэтому совсем отключать нельзя.
...
Рейтинг: 0 / 0
Помогите PostgreSQL настроить
    #32844428
mwolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот моё, сервер 7.3
Памяти тоже гиг, если на машине кроме Постгеса нет ничего, то можно увеличивать буфера
#
# Shared Memory Size
#
shared_buffers = 131072 # min max_connections*2 or 16, 8KB each
max_fsm_relations = 1000 # min 10, fsm is free space map, ~40 bytes
max_fsm_pages = 32000 # min 1000, fsm is free space map, ~6 bytes
#max_locks_per_transaction = 64 # min 10
wal_buffers = 128 # min 4, typically 8KB each

#

# Non-shared Memory Sizes
#
sort_mem = 20480 # min 64, size in KB
vacuum_mem = 20480 # min 1024, size in KB

и ещё эти параметры
effective_cache_size = 32000 # typically 8KB each
geqo = true
stats_start_collector = true


Теперь о плохом.
я не понял этих записей
(site_id+cash_user)=users.(site_id+users_id)
что это означает?
Если не трудно команды создания основных таблиц приведи, можно обрезав поля по которым связей нет.
...
Рейтинг: 0 / 0
Помогите PostgreSQL настроить
    #32844494
vadim_123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, попробую.

(site_id+cash_user)=users.(site_id+users_id)
означает вот это


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
CREATE TABLE "public"."orders" (
  "orders_id" SERIAL, 
  "site_id" INTEGER NOT NULL, 
  "localmachine" VARCHAR( 16 ), 
  "customer_id" INTEGER, 
  "customer_phone" VARCHAR( 12 ), 
  "customer_name" VARCHAR DEFAULT '', 
  "address_id" INTEGER, 
  "close_comment" VARCHAR DEFAULT '', 
  "driver_comment" VARCHAR DEFAULT '', 
  "inner_comment" VARCHAR DEFAULT '', 
  "delivery_address" VARCHAR( 255 ) DEFAULT '', 
  "delivery_time" TIMESTAMP WITHOUT TIME ZONE DEFAULT (now() + '00:30'::interval) NOT NULL, 
  "fill_user" INTEGER, 
  "fill_begin_time" TIMESTAMP WITHOUT TIME ZONE DEFAULT 'now()' NOT NULL, 
  "fill_end_time" TIMESTAMP WITHOUT TIME ZONE, 
  "driver_user" INTEGER, 
  "driver_time" TIMESTAMP WITHOUT TIME ZONE, 
  "driver_return_time" TIMESTAMP WITHOUT TIME ZONE, 
  "cash_user" INTEGER, 
  "cash_time" TIMESTAMP WITHOUT TIME ZONE, 
  "price_orig" NUMERIC( 10 , 2 ) DEFAULT  0 , 
  "discount_rate" NUMERIC( 10 , 2 ) DEFAULT  0 , 
  "discount" NUMERIC( 10 , 2 ) DEFAULT  0 , 
  "price" NUMERIC( 10 , 2 ) DEFAULT  0 , 
  "vat" NUMERIC( 10 , 2 ) DEFAULT  0 , 
  "sell_tax" NUMERIC( 10 , 2 ) DEFAULT  0 , 
  "paid" BOOLEAN DEFAULT false, 
  "modified" BOOLEAN DEFAULT true, 
  "orders_no" INTEGER, 
  CONSTRAINT "orders_pkey" PRIMARY KEY("orders_id", "site_id"), 
  FOREIGN KEY ("site_id")
    REFERENCES "public"."site"("site_id")
    ON DELETE NO ACTION
    ON UPDATE NO ACTION
    NOT DEFERRABLE, 
  CONSTRAINT "site_cash_user" FOREIGN KEY ("site_id", "cash_user")
    REFERENCES "public"."users"("site_id", "users_id")
    ON DELETE NO ACTION
    ON UPDATE NO ACTION
    NOT DEFERRABLE, 
  CONSTRAINT "site_driver_user" FOREIGN KEY ("site_id", "driver_user")
    REFERENCES "public"."users"("site_id", "users_id")
    ON DELETE NO ACTION
    ON UPDATE NO ACTION
    NOT DEFERRABLE, 
  CONSTRAINT "site_fill_user" FOREIGN KEY ("site_id", "fill_user")
    REFERENCES "public"."users"("site_id", "users_id")
    ON DELETE NO ACTION
    ON UPDATE NO ACTION
    NOT DEFERRABLE
) WITH OIDS;

CREATE TABLE "public"."users" (
  "users_id" SERIAL, 
  "site_id" INTEGER NOT NULL, 
  "user_name" VARCHAR( 40 ) DEFAULT '', 
  "pin" VARCHAR( 12 ), 
  "operator" BOOLEAN DEFAULT true, 
  "driver" BOOLEAN DEFAULT false, 
  "cashier" BOOLEAN DEFAULT false, 
  "stockkeeper" BOOLEAN DEFAULT false, 
  "manager" BOOLEAN DEFAULT false, 
  "viewer" BOOLEAN DEFAULT false, 
  "root" BOOLEAN DEFAULT false, 
  "deleted" BOOLEAN DEFAULT false, 
  "modified" BOOLEAN DEFAULT true, 
  CONSTRAINT "users_pkey" PRIMARY KEY("users_id", "site_id"), 
  FOREIGN KEY ("site_id")
    REFERENCES "public"."site"("site_id")
    ON DELETE NO ACTION
    ON UPDATE NO ACTION
    NOT DEFERRABLE
) WITH OIDS;


CREATE TABLE "public"."site" (
  "site_id" SERIAL, 
  "site_name" VARCHAR( 50 ), 
  CONSTRAINT "site_pkey" PRIMARY KEY("site_id")
) WITH OIDS



...
Рейтинг: 0 / 0
Помогите PostgreSQL настроить
    #32844531
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
интересно вяжетесь:

П-кей у вас (юзер, сайт) - тут создаются индексы

а ф-кеи (сайт,юзер) (надежда на автоматическое создание индексов (сайт,юзер) ф-кеями?) - для ф-кеев (постгресом) индексы, кажется, не создаются. надо самомму.

есть ли определения индексов для ф-кеев?
...
Рейтинг: 0 / 0
Помогите PostgreSQL настроить
    #32844565
mwolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to 4321
Мне почему-то подумалось, что Постгрес заюзает индекс (сайт,юзер) при внешнем ключе (юзер,сайт). Хотя может быть, может быть.

А удаление из stock?
stock: (1 млн записей - На этой очень сильно тормозит при Delete. Окончания за 2ое суток не дождался.)
__ поля: stock_id, site_id, user_id, stock_div_id
__ key:
_____site_id=site.site_id
_____stock_div_id=stock_div.stock_div_id
_____(site_id+users_id)=users.(site_id+users_id)


Товарищ vadim_123, а у вас случайно винт не посыпался?
...
Рейтинг: 0 / 0
Помогите PostgreSQL настроить
    #32844570
mwolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И ещё.
Те настройки Постгреса, которые я привёл, они больше на выборки повлияют. То есть данные с диска в память закешируется, больше будут буфера при сортировке -> свопить не будет, результаты запросов и планы выполнения тоже в памяти будут дольше оставаться.
Это всё повышает производительность при выборках, но не при вставках и удалениях. (((
Посему, окромя физической проверки винта, можно порекомендовать VACUUM ANALYZE и периодически перестраивать индексы.
...
Рейтинг: 0 / 0
Помогите PostgreSQL настроить
    #32844871
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mwolfto 4321
Мне почему-то подумалось, что Постгрес заюзает индекс (сайт,юзер) при внешнем ключе (юзер,сайт). Хотя может быть, может быть.

Вероятно (в силу здравого), но не обязательно.

Главное - нет индексов для самих ф-кеев. А это более критично для джойнов (на той стороне записёв обычно поболее в разы-:-разы порядков) , а сталбыть и для проверки целостности (при удалениях и первичного ключа главной).

И все таки думается желательно иметь для джойнов индексы (на обеих сторонах) одинаково упорядоченные (не факт, что вязка по черт те как упорядоченным индексам столь же прозрачна, хотя и внутри "атомарной операции выборки" - подставить в селект данные индексных полей из одной таблицы + запросить записи второй по полному набору полей ее индекса - вроде бы все и моноявственно).
...
Рейтинг: 0 / 0
Помогите PostgreSQL настроить
    #32846313
Фотография Кувалдин Роман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оффтопик: объясните мне пожалуйста сакральный смысл таблицы, состоящей всего из одной колонки?
...
Рейтинг: 0 / 0
Помогите PostgreSQL настроить
    #32847063
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кувалдин РоманОффтопик: объясните мне пожалуйста сакральный смысл таблицы, состоящей всего из одной колонки?У нас такая есть. Нужна именно для хранения в ней первичного ключа.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
companies
  company_id (primary key)

officies
  office_id (primary key)
  company_id (references companies)
  office_name
  ...

products
  product_id (primary key)
  company_id (references companies)
  product_name
  ...
...
Рейтинг: 0 / 0
Помогите PostgreSQL настроить
    #32847186
vadim_123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1. Винт рабочий
2. Все индексы пересоздал в соответствии с порядком, в котором перечисляются поля при создании ключей. В смысле -
index=(site_id, user_id)
key=(site_id, user_id)
3. Также создал индексы в таблицах, в которых создаются ключи.
4. На всякий случай, reindex, vacuum analyze

Результат - ноль внимания со стороны постгреса. Как будто ничего и не делал.

Кувалдин Роман
Оффтопик: объясните мне пожалуйста сакральный смысл таблицы, состоящей всего из одной колонки?]
Невнимательно смотрели. У меня нет таких таблиц. Хотя вариантов, при которых это может понадобится существует очень много.
...
Рейтинг: 0 / 0
Помогите PostgreSQL настроить
    #32847303
Sad Spirit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
INSERT может сильно тормозить только если при его выполнении совершаются какие-то непонятные телодвижения. Допустим, с внешними ключами всё нормально, тогда сразу два доп. вопроса:
1) Построены ли по таблице какие-либо хитрые индексы (в смысле не типа btree)?
2) Висят ли на таблице триггеры кроме триггеров внешних ключей?
...
Рейтинг: 0 / 0
Помогите PostgreSQL настроить
    #32847331
vadim_123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Триггеров нет
Все индексы btree
...
Рейтинг: 0 / 0
Помогите PostgreSQL настроить
    #32847366
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кидайте pg_dump -s и текст запроса, который выполняется медленнее, чем хочется.
...
Рейтинг: 0 / 0
Помогите PostgreSQL настроить
    #32847599
vadim_123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LeXa NalBatтекст запроса, который выполняется медленнее, чем хочется.

Мда..., где-ж вы были раньше?

Есть программа, которая переносит данные из одной базы в другую. На скорость её работы я в основном и ориентировался.
Очень внимательно взглянул на её текст.
Мне казалось, что такую прогу как-то не так написать очень сложно. Её автор, очевидно думал не так.
Текст запроса привести не могу, потому что не вполне понимаю, как он вообще создаётся.

А простой Insert намного быстрее заработал после пересоздания индексов. Просто забыл проверить отдельно от этой чудо-программы.

Буду разбираться с автором, всем спасибо.
...
Рейтинг: 0 / 0
Помогите PostgreSQL настроить
    #32849914
Фотография Кувалдин Роман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadim_123Невнимательно смотрели. У меня нет таких таблиц. Хотя вариантов, при которых это может понадобится существует очень много.


site: (20 записей)
_____ поля: site_id
Вот и объясните мне, зачем в базе, основанной на связи "ключ-значение" хранить ключи отдельно от значений.

Первичные ключи хранить отдельно от значений, связанных с ними, ИМХО бессмысленно.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите PostgreSQL настроить
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]