2017-04-06 7 views
0

우리는 경험 한 교착 상태에 쿼리를 발생하는 교착 상태 : ACT_RU_TASK, ACT_RU_EXECUTIONACT_RE_PROCDEF.Activiti : 다음 표에 Activiti에서 제공하는 몇 가지 표준 '선택'쿼리와 테이블 _Task, _EXECUTION 및 _PROCDEF

### SQL: SELECT SUB.* FROM ( select distinct TEMPRES_ID_ as ID_, TEMPP_KEY_ as ProcessDefinitionKey, TEMPP_ID_ as ProcessDefinitionId,  TEMPRES_REV_ as REV_, TEMPRES_ACT_ID_ as ACT_ID_,  TEMPRES_BUSINESS_KEY_ as BUSINESS_KEY_, TEMPRES_IS_ACTIVE_ as IS_ACTIVE_,  TEMPRES_IS_CONCURRENT_ as IS_CONCURRENT_, TEMPRES_IS_SCOPE_ as IS_SCOPE_,  TEMPRES_IS_EVENT_SCOPE_ as IS_EVENT_SCOPE_, TEMPRES_PARENT_ID_ as PARENT_ID_,  TEMPRES_PROC_INST_ID_ as PROC_INST_ID_, TEMPRES_SUPER_EXEC_ as SUPER_EXEC_,  TEMPRES_SUSPENSION_STATE_ as SUSPENSION_STATE_, TEMPRES_CACHED_ENT_STATE_ as CACHED_ENT_STATE_,  TEMPVAR_ID_ as VAR_ID_, TEMPVAR_NAME_ as VAR_NAME_, TEMPVAR_TYPE_ as VAR_TYPE_, TEMPVAR_REV_ as VAR_REV_,  TEMPVAR_PROC_INST_ID_ as VAR_PROC_INST_ID_, TEMPVAR_EXECUTION_ID_ as VAR_EXECUTION_ID_, TEMPVAR_TASK_ID_ as VAR_TASK_ID_,  TEMPVAR_BYTEARRAY_ID_ as VAR_BYTEARRAY_ID_, TEMPVAR_DOUBLE_ as VAR_DOUBLE_,  TEMPVAR_TEXT_ as VAR_TEXT_, TEMPVAR_TEXT2_ as VAR_TEXT2_, TEMPVAR_LONG_ as VAR_LONG_  , row_number() over (ORDER BY TEMPRES_ID_ asc) rnk FROM (select distinct  RES.ID_ as TEMPRES_ID_, RES.REV_ as TEMPRES_REV_, P.KEY_ as TEMPP_KEY_, P.ID_ as TEMPP_ID_,  RES.ACT_ID_ as TEMPRES_ACT_ID_, RES.PROC_INST_ID_ as TEMPRES_PROC_INST_ID_,  RES.BUSINESS_KEY_ as TEMPRES_BUSINESS_KEY_, RES.IS_ACTIVE_ as TEMPRES_IS_ACTIVE_,  RES.IS_CONCURRENT_ as TEMPRES_IS_CONCURRENT_, RES.IS_SCOPE_ as TEMPRES_IS_SCOPE_,  RES.IS_EVENT_SCOPE_ as TEMPRES_IS_EVENT_SCOPE_, RES.PARENT_ID_ as TEMPRES_PARENT_ID_,  RES.SUPER_EXEC_ as TEMPRES_SUPER_EXEC_, RES.SUSPENSION_STATE_ as TEMPRES_SUSPENSION_STATE_,  RES.CACHED_ENT_STATE_ as TEMPRES_CACHED_ENT_STATE_,  VAR.ID_ as TEMPVAR_ID_, VAR.NAME_ as TEMPVAR_NAME_, VAR.TYPE_ as TEMPVAR_TYPE_, VAR.REV_ as TEMPVAR_REV_,  VAR.PROC_INST_ID_ as TEMPVAR_PROC_INST_ID_, VAR.EXECUTION_ID_ as TEMPVAR_EXECUTION_ID_, VAR.TASK_ID_ as TEMPVAR_TASK_ID_,  VAR.BYTEARRAY_ID_ as TEMPVAR_BYTEARRAY_ID_, VAR.DOUBLE_ as TEMPVAR_DOUBLE_,  VAR.TEXT_ as TEMPVAR_TEXT_, VAR.TEXT2_ as TEMPVAR_TEXT2_, VAR.LONG_ as TEMPVAR_LONG_    from ACT_RU_EXECUTION RES  inner join ACT_RE_PROCDEF P on RES.PROC_DEF_ID_ = P.ID_    left outer join ACT_RU_VARIABLE VAR ON RES.PROC_INST_ID_ = VAR.EXECUTION_ID_ and VAR.TASK_ID_ is null WHERE RES.PARENT_ID_ is null and P.KEY_ = ? and RES.BUSINESS_KEY_ = ? )RES) SUB WHERE SUB.rnk >= ? AND SUB.rnk < ? 

Activiti 버전 5.15.1이지만, 우리 때문에 엄격한 프로젝트 타임 라인으로 업그레이드 할 수 있습니다 : 다음은 예제 쿼리입니다.

누구나 비슷한 경험을 했나요? 아니면이 문제가 발생하는 이유와이를 방지하는 방법을 이해하기 시작한 사람이 있습니까?

답변

0

"교착 상태"란 말은 낙관적 인 잠금 예외 또는 실제 교착 상태를 말하는 것입니까? 실제 교착 상태 인 경우 MSSql 서버 DB를 사용하고 있습니까? 낙관적 잠금 예외의 원인은 비교적 잘 알려져 있으며 좋은 프로세스 모델링을 통해 거의 항상 해결 될 수 있기 때문에 질문합니다. 이 경우 Camunda 락스 문제의 해결을위한

https://app.camunda.com/jira/si/jira.issueviews:issue-html/CAM-1646/CAM-1646.html

있습니다 지침 : 그것은 경우 MSSQL 교착 상태 인 경우

는, 그것은 아마도 여기에 Camunda (AN Activiti 포크)에서보고 같은 문제입니다 이 문제입니다.

건배, 그레그

+0

교착 상태는 MSSql 형식입니다. 우리는 이미 격리 수준을 낮추는 솔루션을 시도했지만 제대로 작동하는 것으로 보입니다. 그러나 클라이언트가 금지하기 때문에이 솔루션을 사용할 수 없습니다. – mifert

+1

미안합니다. fabris, 클라이언트가 격리 수준 설정을 허용하지 않으면 여기에서 자세히 설명하는 행 버전 관리를 허용하려면 다음을 수행하십시오. https://technet.microsoft.com/en-us/library/ms175095(v=SQL.105).aspx 그런 다음 다른 데이터베이스 서버 . –