Вставка замедления запроса для CxOracle в Ubuntu

#ubuntu #buffer #sql-insert #cx-oracle

#ubuntu #буфер #sql-вставка #cx-oracle

Вопрос:

Я пытаюсь вставить около 60 тысяч записей в базу данных Oracle, используя cxOracle из python. Раньше записи вставлялись очень быстро, однако теперь на каждые 100 записей требуется около 9 млн. Я вставляю запись за записью, чтобы сохранить любую неудачную запись на потом.

Замедление связано с тем, что моя системная память заполнена,

           total        used        free      shared  buff/cache   available
Mem:      32146        2920        9218         337       20008       27770
Swap:     0           0           0
         
 
 rootuser@<hostname>:~$ tail -f /proc/78673/fd/1
2020-12-30 08:09:35,832 - DEBUG - [insert.py]-[insert_to_db]-[163] - Inserted 11100 records in GlobalReport
2020-12-30 08:18:07,131 - DEBUG - [insert.py]-[insert_to_db]-[163] - Inserted 11200 records in GlobalReport
2020-12-30 08:27:11,816 - DEBUG - [insert.py]-[insert_to_db]-[163] - Inserted 11300 records in GlobalReport
2020-12-30 08:35:41,880 - DEBUG - [insert.py]-[insert_to_db]-[163] - Inserted 11400 records in GlobalReport
2020-12-30 08:44:12,371 - DEBUG - [insert.py]-[insert_to_db]-[163] - Inserted 11500 records in GlobalReport
2020-12-30 08:52:40,005 - DEBUG - [insert.py]-[insert_to_db]-[163] - Inserted 11600 records in GlobalReport
2020-12-30 09:01:41,538 - DEBUG - [insert.py]-[insert_to_db]-[163] - Inserted 11700 records in GlobalReport
2020-12-30 09:10:12,562 - DEBUG - [insert.py]-[insert_to_db]-[163] - Inserted 11800 records in GlobalReport
2020-12-30 09:18:45,239 - DEBUG - [insert.py]-[insert_to_db]-[163] - Inserted 11900 records in GlobalReport
2020-12-30 09:27:15,327 - DEBUG - [insert.py]-[insert_to_db]-[163] - Inserted 12000 records in GlobalReport
 

Ответ №1:

Из того, что вы показали, это не похоже на проблемы с памятью. На сервере базы данных периодически выполняются некоторые действия, которые могут препятствовать прогрессу. Вы можете ограничить эту активность с помощью пакетной вставки. Вы можете использовать пакетные ошибки, чтобы иметь возможность захватывать сбойные записи для последующей обработки. Взгляните на этот пример. Если это все еще не помогает, вам нужно будет задействовать службы администратора базы данных или самостоятельно настроить необходимую конфигурацию!

Комментарии:

1. спасибо за подсказку по части сервера базы данных. на самом деле это был Oracle RecycleBin full или что-то в этом роде. При проверке получено «orA-00604: произошла ошибка при рекурсивном SQL уровня 1 ORA-30667», и она была решена с помощью purge recyclebin;