powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / linux postgresql вопросы по производительности
33 сообщений из 33, показаны все 2 страниц
linux postgresql вопросы по производительности
    #39110583
easa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день! сервер у меня не очень мощный, я бы даже сказал не очень свежий тестовый компьютер (i5-2,3GHz, RAM -8 gb, отдельный диск под БД). проблема в следующем, в таблицу с двумя колонками надо занести из файла (2Гб) информацию. в файле 150 м строк. 40м строк заносятся нормально. а после 60м все встает колом. top показывает 100% загрузку процессара процессом kworker, даже в консоле тяжело перемещатся по директориям. вставка идет через функцию, которая сначала делает селект если таких значений не находит то делается инсерт. сначало думал что баг в ядре, обновил ядро до 3.15. проблема не решилась. потом вычитал что если очень большой обьем инсерта, то переодически надо делать vacuum analyze таблицы. начал делать вакумм анализе через каждые 1м строк. но и это проблему не решило. у людей базы по 300Гб и всё работает, а тут затык на 2Гб данных. у кого какие соображения есть? в какую сторону копать?
...
Рейтинг: 0 / 0
linux postgresql вопросы по производительности
    #39110616
p2.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
easaвставка идет через функциючерез хранимую?
если таблица пустая, сформируй файл для copy, отфильтровав уникальные (sort -u).
или создай индекс.
или залей в другую таблицу и вставь только отсутствующие одним инсертом.
...
Рейтинг: 0 / 0
linux postgresql вопросы по производительности
    #39110619
easa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
p2.,

в этой таблице есть индекс UNIQUE
...
Рейтинг: 0 / 0
linux postgresql вопросы по производительности
    #39110626
easa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
p2.,
функция хранимая, хотел из нее триггер сделать. но думаю что быстрее от этого работать не будет
...
Рейтинг: 0 / 0
linux postgresql вопросы по производительности
    #39110628
dvim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
easa,

А чем не нравится использование COPY
При ваших объемах я бы через нее заливал данные в промежуточную таблицу , а далее бы уже обрабатывал логикой.
...
Рейтинг: 0 / 0
linux postgresql вопросы по производительности
    #39110629
easa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dvim,

а пример использования можно увидеть? ни разу таким способом не пользовался. а если файл на более мелкие файлы разбивать и их частями загружать?
...
Рейтинг: 0 / 0
linux postgresql вопросы по производительности
    #39110667
Dmitry_SV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Про COPY вполне понятно расписано в документации:
...
Рейтинг: 0 / 0
linux postgresql вопросы по производительности
    #39110668
Dmitry_SV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
linux postgresql вопросы по производительности
    #39110678
easa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dmitry_SV,

а если таблица не пустая и надо исключить в таблице наличие дублирующих записей, как тогда быть?
...
Рейтинг: 0 / 0
linux postgresql вопросы по производительности
    #39110692
ursido
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
easa,

Вам уже предлагали: загружайте данные в отдельную временную таблицу. Затем разбирайтесь с данными уже внутри базы данных.
...
Рейтинг: 0 / 0
linux postgresql вопросы по производительности
    #39110704
easa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ursido,

спасибо, направление решения данного вопроса понял. буду пробовать
...
Рейтинг: 0 / 0
linux postgresql вопросы по производительности
    #39110818
dvim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
easa,
Грузите в пустую временную таблицу, без индексов и триггеров.
А уже потом загруженное - обрабатываете.
...
Рейтинг: 0 / 0
linux postgresql вопросы по производительности
    #39110915
easa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dvim,
не получается у меня сделать копи в таблицу пишет следующее:
ОШИБКА: для использования COPY с файлами нужно быть суперпользователем
ПОДСКАЗКА: Не имея административных прав, можно использовать COPY с stdout и stdin (а также команду psql \copy).
а права повышать не очень охото
...
Рейтинг: 0 / 0
linux postgresql вопросы по производительности
    #39110918
p2.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
easaа права повышать не очень охотои подсказками пользоваться мама не велит.
...
Рейтинг: 0 / 0
linux postgresql вопросы по производительности
    #39111707
easa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
\copy замечательно все заносит в базу. а как добавить copy в хранимую функцию? copy заносится нормально, но не работает. а \copy не заносится, ругается на бэкслеш, может надо как то экранировать? можно ли copy через функцию?
...
Рейтинг: 0 / 0
linux postgresql вопросы по производительности
    #39111852
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
easaа права повышать не очень охото
security definer же
не ?
...
Рейтинг: 0 / 0
linux postgresql вопросы по производительности
    #39116000
easa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
итоги оптимизации такие. сделал на большую таблицу партицирование. разбил что бы в каждой таблице было не больше 10м. записей. в каждой таблице свои индексы. но появился вопрос. в документации написано что надо делать представление, сделал. но почему то и без представления делается замечательно выборка из главной таблицы. хотя в оф доке конкретно про представление. получается что оно не нужно? второй вопрос. copy замечательно работает. но когда я добавил столбы в копи для функции, она перестала работать. в логах пишет, что команда вернула 2 строки. хотя из консоли таже самая команда замечательно работает. вот пример команды copy:
Код: plsql
1.
2.
3.
CREATE TEMP TABLE table_temp (text character varying, nomer smallint);
 EXECUTE 'COPY table_temp FROM' || quote_literal(file_path) || 'DELIMITERS ',' WITH (FORMAT CSV);';
DROP TABLE passport_temp;
...
Рейтинг: 0 / 0
linux postgresql вопросы по производительности
    #39116193
Фотография Warstone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вам на этот вопрос сам форум ответ дал. Присмотритесь к подсветке.
...
Рейтинг: 0 / 0
linux postgresql вопросы по производительности
    #39116391
easa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Warstone,

кроме опечатки в DROP TABLE ничего не увидел. покажите где ошибка
...
Рейтинг: 0 / 0
linux postgresql вопросы по производительности
    #39116418
ursido
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
easa,

В при выполнении запроса в обычном режиме в его тексте содержатся символы кавычки (').
Затем при вставке выражения в EXECUTE вся строка была заключена в те же кавычки (').
Внимание, вопрос: что произошло с оставшимися неизменными символами внутри строки?
А не применить ли экранирование? (На что и намекает подсветка)
...
Рейтинг: 0 / 0
linux postgresql вопросы по производительности
    #39116457
tadmin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ursido,

Код: plsql
1.
'DELIMITERS ''',''' WITH (FORMAT CSV);';
...
Рейтинг: 0 / 0
linux postgresql вопросы по производительности
    #39116470
ursido
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tadmin,

Тогда для полной картины и на пробелы нужно внимание обратить:
Код: sql
1.
EXECUTE 'COPY table_temp FROM ' || quote_literal(file_path) ||  ' DELIMITERS ''',''' WITH (FORMAT CSV);';



после FROM и перед DELIMITERS
...
Рейтинг: 0 / 0
linux postgresql вопросы по производительности
    #39116492
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кавыки пересчитайте

PS

was used before PostgreSQL version 7.3 and is still supported:



а сейчас пот такб надо бы:
Код: sql
1.
EXECUTE 'COPY table_temp FROM ' || quote_literal(file_path) ||  ' WITH (FORMAT CSV DELIMITER '','' );';



...
Рейтинг: 0 / 0
linux postgresql вопросы по производительности
    #39116963
easa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwwq,
с copy разобрался, спасибо. а с первым вопросом как быть?
повторю свой первый вопрос: итоги оптимизации такие. сделал на большую таблицу партицирование. разбил что бы в каждой таблице было не больше 10м. записей. в каждой таблице свои индексы. но появился вопрос. в документации написано что надо делать представление, сделал. но почему то и без представления делается замечательно выборка из главной таблицы. хотя в оф доке конкретно про представление. получается что оно не нужно?
...
Рейтинг: 0 / 0
linux postgresql вопросы по производительности
    #39117034
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
easaqwwq,
с copy разобрался, спасибо. а с первым вопросом как быть?
повторю свой первый вопрос: итоги оптимизации такие. сделал на большую таблицу партицирование. разбил что бы в каждой таблице было не больше 10м. записей. в каждой таблице свои индексы. но появился вопрос. в документации написано что надо делать представление, сделал. но почему то и без представления делается замечательно выборка из главной таблицы. хотя в оф доке конкретно про представление. получается что оно не нужно?
я с голосами в голове предпочитаю не разговаривать.
особо -- в чужой


где говорится, в какой документации ? [тынц, +квота]

, что сделал -- это код, а не брехня по поводу и без
ну и т.п.
...
Рейтинг: 0 / 0
linux postgresql вопросы по производительности
    #39117058
easa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwwq,

дока вот http://www.postgresql.org/docs/current/static/ddl-partitioning.html. делал всё по доке, думаю что код дублировать не имеет смысла
...
Рейтинг: 0 / 0
linux postgresql вопросы по производительности
    #39117082
Lonepsycho
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
easa,

там говорится что "Partitioning can also be arranged using a UNION ALL view, instead of table inheritance ". т.е. создавать вью не обязательно, просто таким образом можно воспроизвести функционал наследования таблиц.
...
Рейтинг: 0 / 0
linux postgresql вопросы по производительности
    #39118124
easa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
появился еще один вопрос. если я делаю выборку из таблицы и использую ORDER BY по дате, то для ускорения выборки необходимо сделать индексирования столбца с датой?
...
Рейтинг: 0 / 0
linux postgresql вопросы по производительности
    #39118144
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
easa,

PostgreSQL не поддерживает multi-table индексы, поэтому если запрос вернет данные из нескольких таблиц-партиций, то будет сортировка.
...
Рейтинг: 0 / 0
linux postgresql вопросы по производительности
    #39118151
easa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vyegorov,

то есть, если есть таблицы-партиции то столбцы бессмыслено индексировать? больше нет никаких вариантов?
...
Рейтинг: 0 / 0
linux postgresql вопросы по производительности
    #39118212
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
easa,

Я этого не сказал. Индекс может вернуть отсортированные данные только в рамках одной таблицы. Если данные из нескольких таблиц, то будут явные сортировки. Рассматривайте конкретные схему и данные с конкретным запросом.
...
Рейтинг: 0 / 0
linux postgresql вопросы по производительности
    #39118247
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vyegoroveasa,

PostgreSQL не поддерживает multi-table индексы, поэтому если запрос вернет данные из нескольких таблиц-партиций, то будет сортировка.какбе это неверное утверждение.

поцгресс умеет таки merge append.
Но оно имеет смысл только если есть существенный LIMIT , или вся выборка --IOT.

и если ORDER BY полностью покрыт индексом. Если после индекс--листа добавить уникЪюцирующее поле -- это поделие свалится к sort [all] + limit. И придётся делать пассы руками.
...
Рейтинг: 0 / 0
linux postgresql вопросы по производительности
    #39118296
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
easaпоявился еще один вопрос. если я делаю выборку из таблицы и использую ORDER BY по дате, то для ускорения выборки необходимо сделать индексирования столбца с датой?

Это вопрос про сферического коня в вакууме, нужно конкретный запрос видеть всегда чтобы на такой вопрос ответить.
И его explain analyze.

--
Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
33 сообщений из 33, показаны все 2 страниц
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / linux postgresql вопросы по производительности
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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