Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
16.04.2009, 14:43
|
|||
---|---|---|---|
|
|||
INSERT INTO ... SELECT медленная вставка |
|||
#18+
Доброго времени суток. Заранее извиняюсь за возможные некорректные формулировки. С PostgreSQL знаком недолго. PostgreSQL использую в связке с Python (psycopg2). Сервер тестовый (не самый быстрый 2Гц 2Гб винты обычные) Процесс таков: 1) Загружаю данные из csv формата с помощью copy from STDIN во временную таблицу (create temporary table my_table1 ...). Вставляется порядка 100-200 тыс. записей. Скорость COPY устраивает (около 5-10 секунд) 2) Эту времянку джойню с несколькими существующими (фильтрую как бы и некоторые значения подменяю) и результат пытаюсь вставить в результирующую таблицу с помощью INSERT INTO. Сам запрос выполняется 5-7 секунд. А вот со вставкой 2-3 минуты. (Записей 80-160 тыс.) Это неприемлимая скорость. Помогите пож-та разобраться с такой скоростью. И какие есть варианты в моём случае. Заранее спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.04.2009, 14:48
|
|||
---|---|---|---|
|
|||
INSERT INTO ... SELECT медленная вставка |
|||
#18+
DasterСам запрос выполняется 5-7 секунд. А вот со вставкой 2-3 минуты.покажите EXPLAIN ANALYZE SELECT ... и EXPLAIN ANALYZE INSERT ... ... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.04.2009, 14:54
|
|||
---|---|---|---|
|
|||
INSERT INTO ... SELECT медленная вставка |
|||
#18+
EXPLAIN ANALYZE SELECT Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.04.2009, 14:59
|
|||
---|---|---|---|
|
|||
INSERT INTO ... SELECT медленная вставка |
|||
#18+
EXPLAIN ANALYZE INSERT Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.04.2009, 15:01
|
|||
---|---|---|---|
|
|||
INSERT INTO ... SELECT медленная вставка |
|||
#18+
Здесь я небольшую выборку представил 76000 записей. Никаких индексов на таблицу куда вставляются данные нет. Есть только primary key и unique ограничение. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.04.2009, 15:03
|
|||
---|---|---|---|
|
|||
INSERT INTO ... SELECT медленная вставка |
|||
#18+
Сам запрос Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.04.2009, 15:39
|
|||
---|---|---|---|
|
|||
INSERT INTO ... SELECT медленная вставка |
|||
#18+
Удалил primary key и unique constraint вставка данных по времени стала примерно равной запросу. Кстати, может кто подскажет, мне кажется что и запрос сам не оптимален? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.04.2009, 15:50
|
|||
---|---|---|---|
|
|||
INSERT INTO ... SELECT медленная вставка |
|||
#18+
авторНикаких индексов на таблицу куда вставляются данные нет. Есть только primary key и unique ограничение.можете показать pg_dump -s? к сообщению в форуме можно приложить файл. авторEXPLAIN ANALYZE SELECT "Nested Loop (cost=2160.86..2405.67 rows=1 width=38) (actual time=5953.205..5953.205 rows=0 loops=1)"не понятно, почему actual rows=0. авторEXPLAIN ANALYZE INSERT ... "Total runtime: 24539.259 ms"вставка выполнялась 25 секунд? авторКстати, может кто подскажет, мне кажется что и запрос сам не оптимален?попробуйте индекс hotel_sync (other_id, oper_id) ... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.04.2009, 15:55
|
|||
---|---|---|---|
|
|||
INSERT INTO ... SELECT медленная вставка |
|||
#18+
Да выполнялась 25 секунд. После удаления Primary Key и Unique Constraint вставка нормально стала работать. Я так пока оставлю поскольку эти ограничения не очень нужны были. Сейчас попробую индекс вставить. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.04.2009, 15:59
|
|||
---|---|---|---|
|
|||
INSERT INTO ... SELECT медленная вставка |
|||
#18+
После вставки индекса все стало хуже Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.04.2009, 16:00
|
|||
---|---|---|---|
|
|||
INSERT INTO ... SELECT медленная вставка |
|||
#18+
Вот план без индексов Код: 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.
Подскажите куда копать чтобы оптимизировать? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.04.2009, 16:02
|
|||
---|---|---|---|
|
|||
INSERT INTO ... SELECT медленная вставка |
|||
#18+
Там одна таблица 3 раза джойнится с разными параметрами. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.04.2009, 16:02
|
|||
---|---|---|---|
|
|||
INSERT INTO ... SELECT медленная вставка |
|||
#18+
DasterПосле удаления Primary Key и Unique Constraint вставка нормально стала работать. Я так пока оставлю поскольку эти ограничения не очень нужны были.попробуйте создать pk и uk, они могли "замусориться", и после пересоздания может быстро работать. авторПосле вставки индекса все стало хужеможно попробовать set enable_nestloop to off; ... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.04.2009, 16:11
|
|||
---|---|---|---|
|
|||
INSERT INTO ... SELECT медленная вставка |
|||
#18+
Создал индекс. Выключил вложеные циклы и создал ограничения Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.04.2009, 16:18
|
|||
---|---|---|---|
|
|||
INSERT INTO ... SELECT медленная вставка |
|||
#18+
Без PrimaryKey и unique вставка теперь 3.5 секунды. Кстати в этой таблице (куда вставляем) впоследствии будет данных порядка 400-500 млн причем добавляться будет по 1 млн в среднем в неделю. Если я оставлю эту таблицу без Primary Key. Как то скажется скорость выборок на этом? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.04.2009, 16:20
|
|||
---|---|---|---|
INSERT INTO ... SELECT медленная вставка |
|||
#18+
Daster Процесс таков: 1) Загружаю данные из csv формата с помощью copy from STDIN во временную таблицу (create temporary table my_table1 ...). Вставляется порядка 100-200 тыс. записей. Скорость COPY устраивает (около 5-10 секунд) 2) Эту времянку джойню с несколькими существующими (фильтрую как бы и некоторые значения подменяю) и результат пытаюсь вставить в результирующую таблицу с помощью INSERT INTO. Сам запрос выполняется 5-7 секунд. А вот со вставкой 2-3 минуты. (Записей 80-160 тыс.) Это неприемлимая скорость. а если после пункта 1 и перед пунктом 2 выполнить: Код: plaintext 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.04.2009, 16:21
|
|||
---|---|---|---|
INSERT INTO ... SELECT медленная вставка |
|||
#18+
LeXa NalBatDasterПосле удаления Primary Key и Unique Constraint вставка нормально стала работать. Я так пока оставлю поскольку эти ограничения не очень нужны были.попробуйте создать pk и uk, они могли "замусориться", и после пересоздания может быстро работать.гм. не совсем понятно, с какой таблички автор снес пк и ук. если с таблички назначения - то да, работать будет быстрее. а "не очень нужно" - это из разряда когда автор сам себе буратинка. Или нужно - или нет. Если таки нужно - то можно сделать Vacuum ANALYZE данных табличек _перед вставкой_ (ну или REINEX). Обычно я так и делаю (у меня перед заливкой данных из буферных табличек делетится изрядная пачка данных (не транкейтиться, поскольку много разных путей заливки, могущих работать одновременно), а индексы на промежуточные таблички таки мне нужны - много отбрасывается по ним. Вот аккурат после делета и перед вставкой я и вакуум-анализирую конкретные таблички. Если это дело не запускать - быстро пролетает). Когда-то давно просматривал вариант сноса индексов-ограничений до вставки и поднятия после - не понравилось. и дороже, и ф-ии в том же сеансе ошибались (на oid-ах индексов). ... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.04.2009, 16:32
|
|||
---|---|---|---|
|
|||
INSERT INTO ... SELECT медленная вставка |
|||
#18+
Код: plaintext 1.
По поводу ключей. Я пока пытаюсь еще только спрогнозировать как будет работать база, а посколько опыта конкретно с Postgres не имею, то и мечусь. Вопрос про нужность Primary key все еще актуален. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.04.2009, 16:40
|
|||
---|---|---|---|
|
|||
INSERT INTO ... SELECT медленная вставка |
|||
#18+
DasterЕсли я оставлю эту таблицу без Primary Key. Как то скажется скорость выборок на этом?зависит от выборок. для ускорения определённых выборок можно будет создать индекс (по тем же полям, что удалённый primary key). ... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.04.2009, 16:42
|
|||
---|---|---|---|
|
|||
INSERT INTO ... SELECT медленная вставка |
|||
#18+
DasterВот план без индексов "Total runtime: 4135.964 ms" Подскажите куда копать чтобы оптимизировать?косяков в плане не видно. может взглянуть на hdd, память, настройки постгреса? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.04.2009, 17:08
|
|||
---|---|---|---|
INSERT INTO ... SELECT медленная вставка |
|||
#18+
Индекс по sync (kind, other_id, oper_id) должен помочь. Так как таким образом 3 джойна будут работать быстрее. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.04.2009, 18:52
|
|||
---|---|---|---|
|
|||
INSERT INTO ... SELECT медленная вставка |
|||
#18+
Всем спасибо за участие (особенно LeXa NalBat - мне бы так научиться планы читать). Пока решил остановиться на варианте без Primary key и unique constraint для таблицы куда вставляются данные. Для таблицы sync (джойнится 3 раза к времянке) пока оставлю индекс по (other_id и oper_id). Протестировал на времянке в 300 тыс. записей - время вставки 12 сек - меня такое время устраивает. А все остальные проблемы с выборками буду решать по мере поступления. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
29.01.2020, 12:32
|
|||
---|---|---|---|
|
|||
INSERT INTO ... SELECT медленная вставка |
|||
#18+
Пожалуй, подниму тему. Тот же самый INSERT INTO SELECT работает ну просто неприлично долго (10 секунд) при условии, что SELECT выполняется 300 мс, при этом CREATE AS SELECT выполняется столько же (300мс). Это сам запрос: Код: plsql 1.
Тут происходит затык: Код: plsql 1. 2. 3. 4. 5.
Подскажите, пожалуйста, в чем может быть проблема? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
29.01.2020, 14:17
|
|||
---|---|---|---|
|
|||
INSERT INTO ... SELECT медленная вставка |
|||
#18+
Вы хотите сказать, что для вставки 10 записей в таблицу 10с вина именно insert? Если вы там в триггерах ничего не майните и диски не битые, нет хитрых проверок, то вряд ли. Скорее всего проблема в select. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
29.01.2020, 14:51
|
|||
---|---|---|---|
|
|||
INSERT INTO ... SELECT медленная вставка |
|||
#18+
Но отдельно же он отрабатывает за 300 мс, таблица, в которую я вставляю UNLOGGED, с триггерами не игрался и диски, хоть и старые в RAIDе, но подозрений не вызывают(копирую по сети на них со скоростью 30 Мбайт/сек)... Вот и я уже голову сломал, почему так... ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=53&mobile=1&tid=1994844]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
34ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 150ms |
0 / 0 |