Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Медленный COPY / 13 сообщений из 13, страница 1 из 1
23.11.2018, 18:14
    #39737675
GLeBaTi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленный COPY
Здравствуйте. Есть таблица:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
CREATE TABLE "public"."ParamValueBlock" (
  "ParameterId" int2 NOT NULL,
  "DeviceId" int2 NOT NULL,
  "CompressedData" bytea,
  "StartDate" int4 NOT NULL,
  "UncompressedDataBits" int4 NOT NULL
)



База данных чистая. Т.е. без индексов, без триггеров и т.п.
Вставляю 1000 записей примерно так:

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
dbWrk.Tx.Prepare(pq.CopyIn("ParamValueBlock", "ParameterId", "DeviceId", "CompressedData", "StartDate", "UncompressedDataBits"))
for _, param := range params{
     stmt.Exec(
          param.ParameterID,
          param.DeviceID,
          param.CompressedData,
          param.StartDate,
          param.UncompressedDataBits)
}



В логах это:
автор2018-11-23 17:43:47.085 MSK [7700] СООБЩЕНИЕ: оператор: BEGIN ISOLATION LEVEL READ COMMITTED READ WRITE
2018-11-23 17:43:47.085 MSK [7700] СООБЩЕНИЕ: оператор: COPY "ParamValueBlock" ("ParameterId", "DeviceId", "CompressedData", "StartDate", "UncompressedDataBits") FROM STDIN
2018-11-23 17:43:54.020 MSK [7700] СООБЩЕНИЕ: оператор: COMMIT

Весь день пытался найти причину того, что 1000 записей вставляются 7! секунд
Помогите пожалуйста
...
Рейтинг: 0 / 0
23.11.2018, 20:54
    #39737745
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленный COPY
GLeBaTi,

потестируйте тоже самое без "CompressedData" для начала...
если станет сильно быстрее - смотрите на размер этого поля у вас...

вы по сети тестируете или локально?
какой диск на базе?

может не хватать или диска или сети если вы большие обьемы данных туда суете.
...
Рейтинг: 0 / 0
23.11.2018, 21:02
    #39737748
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленный COPY
Maxim Bogukпотестируйте тоже самое без "UncompressedDataBits" для начала...
CompressedData видимо, который bytea. UncompressedDataBits - int4 и вряд ли даст проблему.

ну и интересно было бы log_min_duration_statement = 0 добавить, чтобы было видно, что тупит не приложение перед отправкой коммита.
...
Рейтинг: 0 / 0
23.11.2018, 21:34
    #39737757
gav21
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленный COPY
GLeBaTi,
Если версия PG>10, то посмотрите во время выполнения наpg_stat_activity.wait, pg_stat_activity.wait_event, хотя бы будет понятно на каких ожиданиях висит запрос.
...
Рейтинг: 0 / 0
26.11.2018, 11:02
    #39738398
GLeBaTi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленный COPY
Maxim BogukGLeBaTi,

потестируйте тоже самое без "CompressedData" для начала...
если станет сильно быстрее - смотрите на размер этого поля у вас...

вы по сети тестируете или локально?
какой диск на базе?

может не хватать или диска или сети если вы большие обьемы данных туда суете.
Без CompressedData моментально сохраняется. Размер поля примерно 28КБ
Тестирую локально.
На базе диск HDD если это имеется ввиду.
Места на HDD ещё много
...
Рейтинг: 0 / 0
26.11.2018, 11:03
    #39738402
GLeBaTi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленный COPY
MelkijMaxim Bogukпотестируйте тоже самое без "UncompressedDataBits" для начала...
CompressedData видимо, который bytea. UncompressedDataBits - int4 и вряд ли даст проблему.

ну и интересно было бы log_min_duration_statement = 0 добавить, чтобы было видно, что тупит не приложение перед отправкой коммита.

автор2018-11-26 10:54:15.698 MSK [9028] СООБЩЕНИЕ: оператор: COPY "ParamValueBlock" ("ParameterId", "DeviceId", "CompressedData", "StartDate", "UncompressedDataBits") FROM STDIN;
2018-11-26 10:54:22.941 MSK [9028] СООБЩЕНИЕ: продолжительность: 7243.325 мс
...
Рейтинг: 0 / 0
26.11.2018, 11:04
    #39738403
GLeBaTi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленный COPY
gav21, висит как-раз на
"COPY "ParamValueBlock" ("ParameterId", "DeviceId", "CompressedData", "StartDate", "UncompressedDataBits") FROM STDIN;"
...
Рейтинг: 0 / 0
26.11.2018, 11:36
    #39738430
GLeBaTi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленный COPY
Думаю, может на файлы обычные перейти. Менять их не нужно, только считывать.
...
Рейтинг: 0 / 0
26.11.2018, 15:23
    #39738633
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленный COPY
Что-то я не понимаю:

2018-11-23 17:43:47 COPY .... STDIN
2018-11-23 17:43:54 COMMIT

54-47 = 7 секунд

7 секунд на 1000 записей X размер поля примерно 28КБ = 28 Мегабайт - на мой взгляд более-менее нормально
...
Рейтинг: 0 / 0
26.11.2018, 15:37
    #39738643
GLeBaTi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленный COPY
Leonid Kudryavtsev, если я делаю те-же данные через
Код: plsql
1.
COPY "ParamValueBlock" FROM 'C:\Temp\x.txt' (FORMAT text);


, то операция выполняется за 0.7 секунд.
...
Рейтинг: 0 / 0
26.11.2018, 15:47
    #39738649
Павел Лузанов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленный COPY
GLeBaTi,

Разве это не похоже на то, что приложение в STDIN медленно отдает, а не COPY долго загружает?
...
Рейтинг: 0 / 0
26.11.2018, 15:50
    #39738651
GLeBaTi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленный COPY
Павел Лузанов, хорошо, у гошников поспрашиваю пока)
...
Рейтинг: 0 / 0
28.11.2018, 12:11
    #39739646
GLeBaTi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленный COPY
Если кому интересно, это был баг стандартного драйвера golang для pg:
https://github.com/lib/pq/pull/784

Решение:
https://stackoverflow.com/a/53515774/273455
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Медленный COPY / 13 сообщений из 13, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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