Вставка Clobs в Oracle с JDBC очень медленная

Привет, я пытаюсь вставить clob с помощью jdbc через плагин maven. Но вставка занимает около 10 минут. Это исключительно медленно, и мне было интересно, есть ли другой способ сделать это. Clob должен иметь разрывы строк. Моя вставка вызывается из файла sql и выглядит так:

INSERT INTO SCHEMANAME.ATABLENAME VALUES (1,1,'ASTRING','ANOTHERSTRING','STRING WITH LINEBREAKS

BLAH BLAH

BLAH BLAH
BLAH BLAH
BLAH','FINALSTRING',sysdate);

person Matt    schedule 23.09.2011    source источник
comment
Определен ли триггер INSERT для таблицы?   -  person a_horse_with_no_name    schedule 24.09.2011


Ответы (3)


Получите отчеты AWR и ADDM и посмотрите, чего ожидает вставка. При необходимости сделайте снимки вручную, чтобы получить несколько точек данных для проверки.

10 минут для вставки одной строки указывают на то, что внутри вашей БД происходит блокировка/блокировка/ожидание.

person Bart K    schedule 25.09.2011
comment
Есть ли руководство, которое вы можете указать мне, где я могу узнать, как получить эти отчеты? - person Matt; 27.09.2011
comment
Вы можете сделать это через OEM, если у вас есть настройки, в противном случае есть сценарии SQL в $ ORACLE_HOME/rdbms/admin. Вам, вероятно, понадобятся расширенные привилегии для их запуска, если вы не SYS или SYSTEM. Проверьте эти ссылки: forums.oracle.com/forums/thread.jspa?threadID= 1075428 oracle-base.com/articles/10g/AutomaticWorkloadRepository10g.php - person Bart K; 27.09.2011

Если вам интересно, есть ли другой способ сделать это, не могли бы вы сначала попробовать вставить нулевое значение в столбец CLOB и выполнить обновление столбца CLOB после первой вставки?

person user1094698    schedule 15.08.2013
comment
Перейдите по ссылке на вопрос Вставьте CLOB в базу данных Oracle, может дать вам некоторые подсказки. stackoverflow.com/questions/10727521/< /а> - person user1094698; 15.08.2013

CLOB, конечно, не проблема. Чрезвычайно долгое время в 10 минут указывает на то, что задействован какой-то тайм-аут. На ум приходят два из них:

  • Сетевое соединение ненадежно, и передача нескольких байтов занимает много времени.
  • Два сеанса базы данных пытаются вставить или обновить одну и ту же строку в Oracle. Если первый может выполнить вставку или обновление, но не фиксирует соединение, второй будет заблокирован до тех пор, пока первый не зафиксирует, не откатится или не завершит сеанс.

Второй более вероятен.

person Codo    schedule 23.09.2011
comment
Я сузил его до конкретных вставок clob ... все остальное работает быстро и плавно, создавая / изменяя / обновляя таблицы ... и т. Д. Все, что до вставок, выполняется быстро. - person Matt; 24.09.2011
comment
Две вставки будут блокировать друг друга только в том случае, если они будут вставлять одно и то же значение для уникального индекса (т.е. PK). Но если бы это было так, один из двух процессов выдал бы ошибку. - person a_horse_with_no_name; 24.09.2011