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

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

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

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

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

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

спасибо, направление решения данного вопроса понял. буду пробовать
...
Рейтинг: 0 / 0
23.11.2015, 12:19
    #39110818
dvim
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
linux postgresql вопросы по производительности
easa,
Грузите в пустую временную таблицу, без индексов и триггеров.
А уже потом загруженное - обрабатываете.
...
Рейтинг: 0 / 0
23.11.2015, 13:25
    #39110915
easa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
linux postgresql вопросы по производительности
dvim,
не получается у меня сделать копи в таблицу пишет следующее:
ОШИБКА: для использования COPY с файлами нужно быть суперпользователем
ПОДСКАЗКА: Не имея административных прав, можно использовать COPY с stdout и stdin (а также команду psql \copy).
а права повышать не очень охото
...
Рейтинг: 0 / 0
23.11.2015, 13:28
    #39110918
p2.
p2.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
linux postgresql вопросы по производительности
easaа права повышать не очень охотои подсказками пользоваться мама не велит.
...
Рейтинг: 0 / 0
24.11.2015, 09:45
    #39111707
easa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
linux postgresql вопросы по производительности
\copy замечательно все заносит в базу. а как добавить copy в хранимую функцию? copy заносится нормально, но не работает. а \copy не заносится, ругается на бэкслеш, может надо как то экранировать? можно ли copy через функцию?
...
Рейтинг: 0 / 0
24.11.2015, 11:19
    #39111852
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
linux postgresql вопросы по производительности
easaа права повышать не очень охото
security definer же
не ?
...
Рейтинг: 0 / 0
30.11.2015, 08:49
    #39116000
easa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
linux postgresql вопросы по производительности
итоги оптимизации такие. сделал на большую таблицу партицирование. разбил что бы в каждой таблице было не больше 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
30.11.2015, 12:11
    #39116193
Warstone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
linux postgresql вопросы по производительности
Вам на этот вопрос сам форум ответ дал. Присмотритесь к подсветке.
...
Рейтинг: 0 / 0
30.11.2015, 15:15
    #39116391
easa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
linux postgresql вопросы по производительности
Warstone,

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

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

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

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



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

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


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

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


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