#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;