Блокировка таблицы происходит для считывателя и писателя блоков - PullRequest
2 голосов
/ 29 ноября 2011

Я работаю с подпружиненным загрузчиком данных.У меня есть 15000 файлов, и я обрабатываю только один файл с помощью многоресурсного разделителя. Кажется, что блокировка таблицы происходит при попытке вставить данные в таблицу. Здесь нет параллельного шага, определенного здесь.это очень медленно для обработки файлов.Ниже приведен фрагмент кода для устройства чтения и записи элементов чанка и вывод sql для блокировки таблицы.

Файл конфигурации Spring

<step id="filestep" xmlns="http://www.springframework.org/schema/batch" >
    <tasklet allow-start-if-complete="true" transaction-manager="ratransactionManager"  >
        <chunk writer="jdbcItenWriter" reader="fileItemReader" processor="itemProcessor" commit-interval="500" retry-limit="2">
         <retryable-exception-classes>
        <include class="org.springframework.dao.DeadlockLoserDataAccessException"/>
     </retryable-exception-classes>
    </chunk>
    <listeners>
        <listener ref="customStepExecutionListener">
        </listener>
    </listeners>
    </tasklet>
    <end on ="FAILED"/>
</step> 

Oracle Locks

select
  object_name, 
  object_type, 
  session_id, 
  type,                 -- Type or system/user lock
  lmode,        -- lock mode in which session holds lock
  request, 
  block, 
  ctime,
  owner,
  id1,id2                 -- Time since current mode was granted
from
  v$locked_object, all_objects, v$lock 
where
  v$locked_object.object_id = all_objects.object_id AND
  v$lock.id1 = all_objects.object_id AND
  v$lock.sid = v$locked_object.session_id    
  and all_objects.OBJECT_NAME  like '%MSC%'
order by
  session_id, ctime desc, object_name


OBJECT_NAME         OBJECT_TYPE  SESSION_ID      TYPE LMODE  REQUEST  BLOCK  CTIME  OWNER  ID1      ID2                                    
STAGING_TABLE_MSC    TABLE        137            TM   3       0         0      39    CDRR  9289370  0                                      

1 Ответ

2 голосов
/ 30 ноября 2011

LMODE 3 - это просто блокировка строки, возможно, от обычной вставки, и не должно быть проблемой.

Если вы видели LMODE 6, это означало бы, что вся таблица заблокирована исключительно.Например, из прямой записи из INSERT /*+APPEND*/.

См. Документацию V $ LOCK .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...