Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 вопрос по дедлоку  [new]
Matroskin
Member

Откуда: Жатай->Подольск
Сообщений: 137
Имеем табличку Table_Base и зависящие от нее несколько таблиц Table1..n

Есть две операции:
1. делает клон записи в Table_Base и клон записей в зависящих таблицах Table1..n
2. удаляет запись из Table_Base и каскадно записи из зависимых таблицах Table1..n

имеем стабильный дедлок
с одной стороны операция 2, с другой вставка/удаление записей в/из таблицах Table1..n
пересечение идет всегда по PK из Table_Base

как сие можно победить ?
7 мар 12, 12:35    [12209098]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по дедлоку  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Посмотреть в граф и победить.
7 мар 12, 12:38    [12209125]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по дедлоку  [new]
Matroskin
Member

Откуда: Жатай->Подольск
Сообщений: 137
Matroskin
имеем стабильный дедлок
с одной стороны операция 2, с другой вставка/удаление записей в/из таблицах Table1..n
пересечение идет всегда по PK из Table_Base


Судя по этому уже смотрел.

А конструктивно?
Хотя бы на уровне теоретических изысканий ?

Например: "Каскадное удаление - зло, поэтому что ...." или "удалите PK он не нужен, потому что ..."
7 мар 12, 12:42    [12209161]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по дедлоку  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Matroskin
А конструктивно?
Весь конструктив в графе дедлока, структуре таблиц, дедлочащихся запросах и их планах.

Matroskin
Например: "Каскадное удаление - зло, поэтому что ...." или "удалите PK он не нужен, потому что ..."
Типа, погадать предлагаете? Извините, кофе закончился.
7 мар 12, 12:50    [12209262]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по дедлоку  [new]
Matroskin
Member

Откуда: Жатай->Подольск
Сообщений: 137
Граф

<deadlock-list>
 <deadlock victim="process7c394c8">
  <process-list>
   <process id="process7c394c8" taskpriority="0" logused="4796" waitresource="KEY: 8:72057596931538944 (8802a4c88219)" waittime="1476" ownerId="6121671" transactionguid="0xf66ce107306a09418097f2bf4537a411" transactionname="user_transaction" lasttranstarted="2012-03-07T12:14:19.870" XDES="0x817c0e90" lockMode="S" schedulerid="45" kpid="12740" status="suspended" spid="108" sbid="2" ecid="0" priority="0" trancount="1" lastbatchstarted="2012-03-07T12:14:20.057" lastbatchcompleted="2012-03-07T12:14:20.040" clientapp=".Net SqlClient Data Provider" hostname="BISSBOR-WEB" hostpid="8028" loginname="BISSBOR1\Администратор" isolationlevel="read committed (2)" xactid="6121671" currentdb="8" lockTimeout="4294967295" clientoption1="671221856" clientoption2="128056">
    <executionStack>
     <frame procname="adhoc" line="1" sqlhandle="0x02000000f949ad39139dcb18af98ea6d8d9372f91766bb51">
insert bulk doc.AllocationJustificationRegServicesRegServices ([idAllocationJustification] UniqueIdentifier, [idRegServices] UniqueIdentifier) with (KEEP_NULLS, CHECK_CONSTRAINTS, FIRE_TRIGGERS)     </frame>
    </executionStack>
    <inputbuf>
insert bulk doc.AllocationJustificationRegServicesRegServices ([idAllocationJustification] UniqueIdentifier, [idRegServices] UniqueIdentifier) with (KEEP_NULLS, CHECK_CONSTRAINTS, FIRE_TRIGGERS)    </inputbuf>
   </process>
   <process id="process7499b88" taskpriority="0" logused="195900" waitresource="KEY: 8:72057596931538944 (da01da387ada)" waittime="621" ownerId="6113319" transactionguid="0xd4810a906400d3469dfe337873b7f389" transactionname="user_transaction" lasttranstarted="2012-03-07T12:14:14.063" XDES="0x1f7ae6e90" lockMode="S" schedulerid="33" kpid="5296" status="suspended" spid="68" sbid="2" ecid="0" priority="0" trancount="2" lastbatchstarted="2012-03-07T12:14:19.197" lastbatchcompleted="2012-03-07T12:14:19.197" clientapp=".Net SqlClient Data Provider" hostname="BISSBOR-WEB" hostpid="8028" loginname="BISSBOR1\Администратор" isolationlevel="read committed (2)" xactid="6113319" currentdb="8" lockTimeout="4294967295" clientoption1="671221856" clientoption2="128056">
    <executionStack>
     <frame procname="adhoc" line="1" stmtstart="44" sqlhandle="0x02000000cdc9403975e0c4f8f47237e1a677440a68c9348d">
DELETE FROM [doc].[AllocationJustification] WHERE id = @p0     </frame>
     <frame procname="unknown" line="1" sqlhandle="0x000000000000000000000000000000000000000000000000">
unknown     </frame>
    </executionStack>
    <inputbuf>
(@p0 uniqueidentifier)DELETE FROM [doc].[AllocationJustification] WHERE id = @p0    </inputbuf>
   </process>
  </process-list>
  <resource-list>
   <keylock hobtid="72057596931538944" dbid="8" objectname="sbor_test.doc.AllocationJustification" indexname="AllocationJustification_PK_583" id="lock1ed519e80" mode="X" associatedObjectId="72057596931538944">
    <owner-list>
     <owner id="process7499b88" mode="X"/>
    </owner-list>
    <waiter-list>
     <waiter id="process7c394c8" mode="S" requestType="wait"/>
    </waiter-list>
   </keylock>
   <keylock hobtid="72057596931538944" dbid="8" objectname="sbor_test.doc.AllocationJustification" indexname="AllocationJustification_PK_583" id="lockbb8aec80" mode="X" associatedObjectId="72057596931538944">
    <owner-list>
     <owner id="process7c394c8" mode="X"/>
    </owner-list>
    <waiter-list>
     <waiter id="process7499b88" mode="S" requestType="wait"/>
    </waiter-list>
   </keylock>
  </resource-list>
 </deadlock>
</deadlock-list>


Структура основной таблицы
CREATE TABLE [doc].[AllocationJustification](
	[id] [uniqueidentifier] NOT NULL,
	[tstamp] [timestamp] NULL,
	[idDocStatus] [uniqueidentifier] NULL,
	[CreationTime] [datetime] NULL,
	[RegistrationTime] [datetime] NULL,
	[idBudget] [uniqueidentifier] NOT NULL,
	[Number] [int] NOT NULL,
	[Date] [datetime] NOT NULL,
	[SubmitDate] [datetime] NULL,
	[BeginDate] [datetime] NOT NULL,
	[Sbp] [uniqueidentifier] NOT NULL,
	[sDescription] [nvarchar](max) NULL,
	[idVersion] [uniqueidentifier] NOT NULL,
	[sCaption] [nvarchar](400) NULL,
	[ParentDoc] [uniqueidentifier] NULL,
	[isGroup] [bit] NOT NULL,
	[TerminationDate] [datetime] NULL,
	[GroundsTermination] [nvarchar](max) NULL,
	[Commentary] [nvarchar](max) NULL,
	[idPublicLegalFormation] [uniqueidentifier] NULL,
	[Initiator] [uniqueidentifier] NULL,
	[isChangePlan] [bit] NULL,
	[Ofg] [numeric](18, 5) NULL,
	[Pfg1] [numeric](18, 5) NULL,
	[Pfg2] [numeric](18, 5) NULL,
	[Creater]  AS ([cmn].[RefFirstChangerName]([id])),
	[Changer]  AS ([cmn].[RefLastChangerName]([id])),
 CONSTRAINT [AllocationJustification_PK_583] PRIMARY KEY CLUSTERED 
(
	[id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY],
 CONSTRAINT [AllocationJustification_Number_UNIQUE] UNIQUE NONCLUSTERED 
(
	[Number] ASC,
	[idBudget] ASC,
	[idVersion] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

ALTER TABLE [doc].[AllocationJustification]  WITH CHECK ADD  CONSTRAINT [idBudget_FK_60d334c9] FOREIGN KEY([idBudget])
REFERENCES [doc].[Budget] ([id])
GO

ALTER TABLE [doc].[AllocationJustification] CHECK CONSTRAINT [idBudget_FK_60d334c9]
GO

ALTER TABLE [doc].[AllocationJustification]  WITH CHECK ADD  CONSTRAINT [idDocStatus_FK_90989ef8] FOREIGN KEY([idDocStatus])
REFERENCES [ref].[DocStatus] ([id])
GO

ALTER TABLE [doc].[AllocationJustification] CHECK CONSTRAINT [idDocStatus_FK_90989ef8]
GO

ALTER TABLE [doc].[AllocationJustification]  WITH CHECK ADD  CONSTRAINT [idPublicLegalFormation_FK_a92ef3c3] FOREIGN KEY([idPublicLegalFormation])
REFERENCES [ref].[PublicLegalFormations] ([id])
GO

ALTER TABLE [doc].[AllocationJustification] CHECK CONSTRAINT [idPublicLegalFormation_FK_a92ef3c3]
GO

ALTER TABLE [doc].[AllocationJustification]  WITH CHECK ADD  CONSTRAINT [idVersion_FK_915411c6] FOREIGN KEY([idVersion])
REFERENCES [ref].[Versions] ([id])
GO

ALTER TABLE [doc].[AllocationJustification] CHECK CONSTRAINT [idVersion_FK_915411c6]
GO

ALTER TABLE [doc].[AllocationJustification]  WITH CHECK ADD  CONSTRAINT [Initiator_FK_faf742c9] FOREIGN KEY([Initiator])
REFERENCES [cmn].[ReferenceItem] ([id])
GO

ALTER TABLE [doc].[AllocationJustification] CHECK CONSTRAINT [Initiator_FK_faf742c9]
GO

ALTER TABLE [doc].[AllocationJustification]  WITH CHECK ADD  CONSTRAINT [ParentDoc_FK_11dad4c9] FOREIGN KEY([ParentDoc])
REFERENCES [doc].[AllocationJustification] ([id])
GO

ALTER TABLE [doc].[AllocationJustification] CHECK CONSTRAINT [ParentDoc_FK_11dad4c9]
GO

ALTER TABLE [doc].[AllocationJustification]  WITH CHECK ADD  CONSTRAINT [Sbp_FK_0c74c0f7] FOREIGN KEY([Sbp])
REFERENCES [ref].[SubjectsOfBudgetaryPlanning] ([id])
GO

ALTER TABLE [doc].[AllocationJustification] CHECK CONSTRAINT [Sbp_FK_0c74c0f7]
GO

ALTER TABLE [doc].[AllocationJustification] ADD  CONSTRAINT [AllocationJustification_id_583]  DEFAULT (newid()) FOR [id]
GO

ALTER TABLE [doc].[AllocationJustification] ADD  CONSTRAINT [CreationTime_DEFAULT_2312]  DEFAULT (getdate()) FOR [CreationTime]
GO

ALTER TABLE [doc].[AllocationJustification] ADD  CONSTRAINT [Number_DEFAULT_c392]  DEFAULT ((0)) FOR [Number]
GO

ALTER TABLE [doc].[AllocationJustification] ADD  CONSTRAINT [Date_DEFAULT_a16b]  DEFAULT (getdate()) FOR [Date]
GO

ALTER TABLE [doc].[AllocationJustification] ADD  CONSTRAINT [AllocationJustification_BeginDate_Default_d38]  DEFAULT (getdate()) FOR [BeginDate]
GO

ALTER TABLE [doc].[AllocationJustification] ADD  CONSTRAINT [Sbp_DEFAULT_de1e]  DEFAULT (newid()) FOR [Sbp]
GO

ALTER TABLE [doc].[AllocationJustification] ADD  CONSTRAINT [AllocationJustification_idVersion_Default_915]  DEFAULT ('13DA367D-68D4-4CC2-965A-0A5FC92659EC') FOR [idVersion]
GO

ALTER TABLE [doc].[AllocationJustification] ADD  CONSTRAINT [isGroup_DEFAULT_a920]  DEFAULT ((0)) FOR [isGroup]
GO


Структура одной из зависимых, участвующей в графе:

CREATE TABLE [doc].[AllocationJustificationRegServicesRegServices](
	[idAllocationJustification] [uniqueidentifier] NOT NULL,
	[idRegServices] [uniqueidentifier] NOT NULL,
 CONSTRAINT [PK__AllocationJustif__32A65B68] PRIMARY KEY CLUSTERED 
(
	[idAllocationJustification] ASC,
	[idRegServices] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

ALTER TABLE [doc].[AllocationJustificationRegServicesRegServices]  WITH CHECK ADD  CONSTRAINT [AllocationJustification570] FOREIGN KEY([idAllocationJustification])
REFERENCES [doc].[AllocationJustification] ([id])
ON DELETE CASCADE
GO

ALTER TABLE [doc].[AllocationJustificationRegServicesRegServices] CHECK CONSTRAINT [AllocationJustification570]
GO

ALTER TABLE [doc].[AllocationJustificationRegServicesRegServices]  WITH CHECK ADD  CONSTRAINT [RegServicesb07] FOREIGN KEY([idRegServices])
REFERENCES [ref].[RegServices] ([id])
ON DELETE CASCADE
GO

ALTER TABLE [doc].[AllocationJustificationRegServicesRegServices] CHECK CONSTRAINT [RegServicesb07]
GO
7 мар 12, 13:00    [12209373]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по дедлоку  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
А вы вставляете и удаляете один и тот же AllocationJustification.id одновременно?

Чтобы предотвратить вставку, надо на диапазон ключей в AllocationJustificationRegServicesRegServices наложить Range-блокировку. Поскольку у вас форинкеи, то или сначала блокировать подчиненные (select @a = count(*) from AllocationJustificationRegServicesRegServices with ( holdlock ) ), либо удалять из подчиненных руками с тем же хинтом.

Другой путь - заблокировать во вставляющей транзакции записи в AllocationJustification.

Сообщение было отредактировано: 7 мар 12, 13:36
7 мар 12, 13:34    [12209700]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по дедлоку  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Гавриленко Сергей Алексеевич
Другой путь - заблокировать во вставляющей транзакции записи в AllocationJustification.
Хотя, я не уверен, что при каскадных операциях, сначала накладывается блокировки на главную таблицу. Надо проверять.
7 мар 12, 13:40    [12209752]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по дедлоку  [new]
Matroskin
Member

Откуда: Жатай->Подольск
Сообщений: 137
Гавриленко Сергей Алексеевич,

Нет, вставляются и удаляются с разными идентификаторами
7 мар 12, 16:28    [12211187]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по дедлоку  [new]
FK you
Guest
Гавриленко Сергей Алексеевич
Гавриленко Сергей Алексеевич
Другой путь - заблокировать во вставляющей транзакции записи в AllocationJustification.
Хотя, я не уверен, что при каскадных операциях, сначала накладывается блокировки на главную таблицу. Надо проверять.

даже без каскада накладывается (сначала вроде IS, при каскадах переводится в редактировательную) снизу вверх при вставке и сверху вниз при удалении.
стабильно повторять дэдлок можно если (сам себя не запутал бы) вставлять много в дочернюю и удалять много (про эскалацию) из родительской.
7 мар 12, 17:15    [12211539]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по дедлоку  [new]
FK you
Guest
блокировка называется "есть чо?"
7 мар 12, 17:20    [12211579]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по дедлоку  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Вообще, я наврал. Передрались ведь за записей в AllocationJustification.

Во-первых, вставляющая транзакция каким-то образом лочит какую-то запись в AllocationJustification до вставки, потом в этой же транзакции делает вставку. Что происходит в этой транзакции до вставки?
Во-вторых, план запроса на удаление показать можете? Есть предположение, что AllocationJustification.ParentDoc нет индекса, и при удалении записи из AllocationJustification происходит скан всей AllocationJustification из-за ссылки на саму себя (ParentDoc_FK_11dad4c9).

Сообщение было отредактировано: 7 мар 12, 17:32
7 мар 12, 17:29    [12211652]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по дедлоку  [new]
Matroskin
Member

Откуда: Жатай->Подольск
Сообщений: 137
Гавриленко Сергей Алексеевич,

По идее происходит следующее:
открывается транзакция приложением READ_COMМITTED
1. берется док, у него готовятся к изменению некоторые поля
2. делается клон этого дока, вставляется
3. пишутся изменения из п.1
транзакция закрывается
возможно изменения из п.1 происходят в несколько этапов, часть данных UPDATE-ится до вставки, часть после


на ParentDoc действительно нет индекса
7 мар 12, 17:52    [12211801]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по дедлоку  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Matroskin
на ParentDoc действительно нет индекса
Делайте. Если по логике вы не будете менять описанным вами образом ParendDoc в момент удаления документа, то дедлока не будет.
7 мар 12, 17:55    [12211815]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по дедлоку  [new]
Matroskin
Member

Откуда: Жатай->Подольск
Сообщений: 137
Гавриленко Сергей Алексеевич
Matroskin
на ParentDoc действительно нет индекса
Делайте. Если по логике вы не будете менять описанным вами образом ParendDoc в момент удаления документа, то дедлока не будет.


В смысле не будете менять ParentDoc ? Это по сути ссылка на док, из которого делается клон.
7 мар 12, 17:57    [12211834]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по дедлоку  [new]
Matroskin
Member

Откуда: Жатай->Подольск
Сообщений: 137
план на удаление
+
<?xml version="1.0" encoding="utf-16"?>
<ShowPlanXML xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="1.1.1" Build="10.0.5500.0" xmlns="http://schemas.microsoft.com/sqlserver/2004/07/showplan">
  <BatchSequence>
    <Batch>
      <Statements>
        <StmtSimple StatementCompId="1" StatementEstRows="1" StatementId="1" StatementOptmLevel="FULL" StatementSubTreeCost="4.1552" StatementText="delete from doc.AllocationJustification where id=''" StatementType="DELETE" ParameterizedText="(@1 varchar(8000))DELETE [doc].[AllocationJustification]  WHERE [id]=@1" QueryHash="0x67861C2B2BCCFA6F" QueryPlanHash="0x764AC98ED249A36C">
          <StatementSetOptions ANSI_NULLS="true" ANSI_PADDING="true" ANSI_WARNINGS="true" ARITHABORT="true" CONCAT_NULL_YIELDS_NULL="true" NUMERIC_ROUNDABORT="false" QUOTED_IDENTIFIER="true" />
          <QueryPlan CachedPlanSize="128" CompileTime="139" CompileCPU="27" CompileMemory="1576">
            <MissingIndexes>
              <MissingIndexGroup Impact="66.7614">
                <MissingIndex Database="[murmansk2]" Schema="[ref]" Table="[AllocationIndirectCosts]">
                  <ColumnGroup Usage="EQUALITY">
                    <Column Name="[idOwner]" ColumnId="3" />
                  </ColumnGroup>
                  <ColumnGroup Usage="INCLUDE">
                    <Column Name="[id]" ColumnId="1" />
                  </ColumnGroup>
                </MissingIndex>
              </MissingIndexGroup>
            </MissingIndexes>
            <RelOp AvgRowSize="9" EstimateCPU="0.000194383" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimateRows="1" LogicalOp="Sequence" NodeId="1" Parallel="false" PhysicalOp="Sequence" EstimatedTotalSubtreeCost="4.1552">
              <OutputList />
              <Sequence>
                <RelOp AvgRowSize="23" EstimateCPU="1.27146E-05" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimateRows="1" LogicalOp="Eager Spool" NodeId="2" Parallel="false" PhysicalOp="Table Spool" EstimatedTotalSubtreeCost="0.00551099">
                  <OutputList>
                    <ColumnReference Database="[murmansk2]" Schema="[doc]" Table="[AllocationJustification]" Column="id" />
                  </OutputList>
                  <Spool>
                    <RelOp AvgRowSize="23" EstimateCPU="4E-06" EstimateIO="0.04" EstimateRebinds="0" EstimateRewinds="0" EstimateRows="1" LogicalOp="Delete" NodeId="3" Parallel="false" PhysicalOp="Clustered Index Delete" EstimatedTotalSubtreeCost="0.0432871">
                      <OutputList>
                        <ColumnReference Database="[murmansk2]" Schema="[doc]" Table="[AllocationJustification]" Column="id" />
                      </OutputList>
                      <SimpleUpdate>
                        <Object Database="[murmansk2]" Schema="[doc]" Table="[AllocationJustification]" Index="[AllocationJustification_PK_583]" IndexKind="Clustered" />
                        <Object Database="[murmansk2]" Schema="[doc]" Table="[AllocationJustification]" Index="[AllocationJustification_status_idx]" IndexKind="NonClustered" />
                        <Object Database="[murmansk2]" Schema="[doc]" Table="[AllocationJustification]" Index="[AllocationJustification_idbudget_idx]" IndexKind="NonClustered" />
                        <Object Database="[murmansk2]" Schema="[doc]" Table="[AllocationJustification]" Index="[AllocationJustification_Number_UNIQUE]" IndexKind="NonClustered" />
                        <SeekPredicateNew>
                          <SeekKeys>
                            <Prefix ScanType="EQ">
                              <RangeColumns>
                                <ColumnReference Database="[murmansk2]" Schema="[doc]" Table="[AllocationJustification]" Column="id" />
                              </RangeColumns>
                              <RangeExpressions>
                                <ScalarOperator ScalarString="CONVERT_IMPLICIT(uniqueidentifier,'',0)">
                                  <Convert DataType="uniqueidentifier" Style="0" Implicit="true">
                                    <ScalarOperator>
                                      <Const ConstValue="''" />
                                    </ScalarOperator>
                                  </Convert>
                                </ScalarOperator>
                              </RangeExpressions>
                            </Prefix>
                          </SeekKeys>
                        </SeekPredicateNew>
                      </SimpleUpdate>
                    </RelOp>
                  </Spool>
                </RelOp>
                <RelOp AvgRowSize="23" EstimateCPU="5.01903E-05" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimateRows="1.97714" LogicalOp="Eager Spool" NodeId="4" Parallel="false" PhysicalOp="Table Spool" EstimatedTotalSubtreeCost="0.0274833">
                  <OutputList>
                    <ColumnReference Database="[murmansk2]" Schema="[ref]" Table="[GoalProgAJ]" Column="id" />
                  </OutputList>
                  <Spool>
                    <RelOp AvgRowSize="23" EstimateCPU="1.97714E-06" EstimateIO="0.01" EstimateRebinds="0" EstimateRewinds="0" EstimateRows="1.97714" LogicalOp="Delete" NodeId="5" Parallel="false" PhysicalOp="Clustered Index Delete" EstimatedTotalSubtreeCost="0.0547663">
                      <OutputList>
                        <ColumnReference Database="[murmansk2]" Schema="[ref]" Table="[GoalProgAJ]" Column="id" />
                      </OutputList>
                      <Update DMLRequestSort="false">
                        <Object Database="[murmansk2]" Schema="[ref]" Table="[GoalProgAJ]" Index="[GoalProgAJ_PK_ce3]" IndexKind="Clustered" />
                        <RelOp AvgRowSize="23" EstimateCPU="0.00807994" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimateRows="1.97714" LogicalOp="Inner Join" NodeId="6" Parallel="false" PhysicalOp="Nested Loops" EstimatedTotalSubtreeCost="0.0447643">
                          <OutputList>
                            <ColumnReference Database="[murmansk2]" Schema="[ref]" Table="[GoalProgAJ]" Column="id" />
                          </OutputList>
                          <NestedLoops Optimized="false">
                            <Predicate>
                              <ScalarOperator ScalarString="[murmansk2].[ref].[GoalProgAJ].[idOwner]=[murmansk2].[doc].[AllocationJustification].[id]">
                                <Compare CompareOp="EQ">
                                  <ScalarOperator>
                                    <Identifier>
                                      <ColumnReference Database="[murmansk2]" Schema="[ref]" Table="[GoalProgAJ]" Column="idOwner" />
                                    </Identifier>
                                  </ScalarOperator>
                                  <ScalarOperator>
                                    <Identifier>
                                      <ColumnReference Database="[murmansk2]" Schema="[doc]" Table="[AllocationJustification]" Column="id" />
                                    </Identifier>
                                  </ScalarOperator>
                                </Compare>
                              </ScalarOperator>
                            </Predicate>
                            <RelOp AvgRowSize="23" EstimateCPU="1.27146E-05" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimateRows="1" LogicalOp="Eager Spool" NodeId="7" Parallel="false" PhysicalOp="Table Spool" EstimatedTotalSubtreeCost="0.00551099">
                              <OutputList>
                                <ColumnReference Database="[murmansk2]" Schema="[doc]" Table="[AllocationJustification]" Column="id" />
                              </OutputList>
                              <Spool PrimaryNodeId="2" />
                            </RelOp>
                            <RelOp AvgRowSize="39" EstimateCPU="0.0022833" EstimateIO="0.0283102" EstimateRebinds="0" EstimateRewinds="0" EstimateRows="1933" LogicalOp="Clustered Index Scan" NodeId="8" Parallel="false" PhysicalOp="Clustered Index Scan" EstimatedTotalSubtreeCost="0.0305935" TableCardinality="1933">
                              <OutputList>
                                <ColumnReference Database="[murmansk2]" Schema="[ref]" Table="[GoalProgAJ]" Column="id" />
                                <ColumnReference Database="[murmansk2]" Schema="[ref]" Table="[GoalProgAJ]" Column="idOwner" />
                              </OutputList>
                              <IndexScan Ordered="true" ForcedIndex="false" NoExpandHint="false">
                                <DefinedValues>
                                  <DefinedValue>
                                    <ColumnReference Database="[murmansk2]" Schema="[ref]" Table="[GoalProgAJ]" Column="id" />
                                  </DefinedValue>
                                  <DefinedValue>
                                    <ColumnReference Database="[murmansk2]" Schema="[ref]" Table="[GoalProgAJ]" Column="idOwner" />
                                  </DefinedValue>
                                </DefinedValues>
                                <Object Database="[murmansk2]" Schema="[ref]" Table="[GoalProgAJ]" Index="[GoalProgAJ_PK_ce3]" IndexKind="Clustered" />
                              </IndexScan>
                            </RelOp>
                          </NestedLoops>
                        </RelOp>
                      </Update>
                    </RelOp>
                  </Spool>
                </RelOp>
                <RelOp AvgRowSize="9" EstimateCPU="0.000124589" EstimateIO="0.0549696" EstimateRebinds="0" EstimateRewinds="0" EstimateRows="62.2946" LogicalOp="Delete" NodeId="10" Parallel="false" PhysicalOp="Clustered Index Delete" EstimatedTotalSubtreeCost="0.0649569">
                  <OutputList />
                  <Update WithUnorderedPrefetch="true" DMLRequestSort="false">
                    <Object Database="[murmansk2]" Schema="[ref]" Table="[DirectExpenditures]" Index="[DirectExpenditures_PK_fc7]" IndexKind="Clustered" />
                    <Object Database="[murmansk2]" Schema="[ref]" Table="[DirectExpenditures]" Index="[_dta_index_DirectExpenditures_9_1297907120__K3_K5_10_22_23_24_9987]" IndexKind="NonClustered" />
                    <RelOp AvgRowSize="23" EstimateCPU="0.000260392" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimateRows="62.2946" LogicalOp="Inner Join" NodeId="12" Parallel="false" PhysicalOp="Nested Loops" EstimatedTotalSubtreeCost="0.00986264">
                      <OutputList>
                        <ColumnReference Database="[murmansk2]" Schema="[ref]" Table="[DirectExpenditures]" Column="id" />
                      </OutputList>
                      <NestedLoops Optimized="false">
                        <OuterReferences>
                          <ColumnReference Database="[murmansk2]" Schema="[doc]" Table="[AllocationJustification]" Column="id" />
                        </OuterReferences>
                        <RelOp AvgRowSize="23" EstimateCPU="1.27146E-05" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimateRows="1" LogicalOp="Eager Spool" NodeId="13" Parallel="false" PhysicalOp="Table Spool" EstimatedTotalSubtreeCost="0.00551099">
                          <OutputList>
                            <ColumnReference Database="[murmansk2]" Schema="[doc]" Table="[AllocationJustification]" Column="id" />
                          </OutputList>
                          <Spool PrimaryNodeId="2" />
                        </RelOp>
                        <RelOp AvgRowSize="23" EstimateCPU="0.000225524" EstimateIO="0.00386574" EstimateRebinds="0" EstimateRewinds="0" EstimateRows="62.2946" LogicalOp="Index Seek" NodeId="14" Parallel="false" PhysicalOp="Index Seek" EstimatedTotalSubtreeCost="0.00409126" TableCardinality="148941">
                          <OutputList>
                            <ColumnReference Database="[murmansk2]" Schema="[ref]" Table="[DirectExpenditures]" Column="id" />
                          </OutputList>
                          <IndexScan Ordered="true" ScanDirection="FORWARD" ForcedIndex="false" ForceSeek="false" NoExpandHint="false">
                            <DefinedValues>
                              <DefinedValue>
                                <ColumnReference Database="[murmansk2]" Schema="[ref]" Table="[DirectExpenditures]" Column="id" />
                              </DefinedValue>
                            </DefinedValues>
                            <Object Database="[murmansk2]" Schema="[ref]" Table="[DirectExpenditures]" Index="[_dta_index_DirectExpenditures_9_1297907120__K3_K5_10_22_23_24_9987]" IndexKind="NonClustered" />
                            <SeekPredicates>
                              <SeekPredicateNew>
                                <SeekKeys>
                                  <Prefix ScanType="EQ">
                                    <RangeColumns>
                                      <ColumnReference Database="[murmansk2]" Schema="[ref]" Table="[DirectExpenditures]" Column="idOwner" />
                                    </RangeColumns>
                                    <RangeExpressions>
                                      <ScalarOperator ScalarString="[murmansk2].[doc].[AllocationJustification].[id]">
                                        <Identifier>
                                          <ColumnReference Database="[murmansk2]" Schema="[doc]" Table="[AllocationJustification]" Column="id" />
                                        </Identifier>
                                      </ScalarOperator>
                                    </RangeExpressions>
                                  </Prefix>
                                </SeekKeys>
                              </SeekPredicateNew>
                            </SeekPredicates>
                          </IndexScan>
                        </RelOp>
                      </NestedLoops>
                    </RelOp>
                  </Update>
                </RelOp>
                <RelOp AvgRowSize="9" EstimateCPU="4.90625E-06" EstimateIO="0.01" EstimateRebinds="0" EstimateRewinds="0" EstimateRows="4.90625" LogicalOp="Delete" NodeId="15" Parallel="false" PhysicalOp="Clustered Index Delete" EstimatedTotalSubtreeCost="0.412996">
                  <OutputList />
                  <Update DMLRequestSort="false">
                    <Object Database="[murmansk2]" Schema="[ref]" Table="[PropertyExpenditures]" Index="[PropertyExpenditures_PK_6bf]" IndexKind="Clustered" />
                    <RelOp AvgRowSize="23" EstimateCPU="0.0206241" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimateRows="4.90625" LogicalOp="Inner Join" NodeId="16" Parallel="false" PhysicalOp="Nested Loops" EstimatedTotalSubtreeCost="0.402991">
                      <OutputList>
                        <ColumnReference Database="[murmansk2]" Schema="[ref]" Table="[PropertyExpenditures]" Column="id" />
                      </OutputList>
                      <NestedLoops Optimized="false">
                        <Predicate>
                          <ScalarOperator ScalarString="[murmansk2].[ref].[PropertyExpenditures].[idOwner]=[murmansk2].[doc].[AllocationJustification].[id]">
                            <Compare CompareOp="EQ">
                              <ScalarOperator>
                                <Identifier>
                                  <ColumnReference Database="[murmansk2]" Schema="[ref]" Table="[PropertyExpenditures]" Column="idOwner" />
                                </Identifier>
                              </ScalarOperator>
                              <ScalarOperator>
                                <Identifier>
                                  <ColumnReference Database="[murmansk2]" Schema="[doc]" Table="[AllocationJustification]" Column="id" />
                                </Identifier>
                              </ScalarOperator>
                            </Compare>
                          </ScalarOperator>
                        </Predicate>
                        <RelOp AvgRowSize="23" EstimateCPU="1.27146E-05" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimateRows="1" LogicalOp="Eager Spool" NodeId="17" Parallel="false" PhysicalOp="Table Spool" EstimatedTotalSubtreeCost="0.00551099">
                          <OutputList>
                            <ColumnReference Database="[murmansk2]" Schema="[doc]" Table="[AllocationJustification]" Column="id" />
                          </OutputList>
                          <Spool PrimaryNodeId="2" />
                        </RelOp>
                        <RelOp AvgRowSize="39" EstimateCPU="0.0055844" EstimateIO="0.369792" EstimateRebinds="0" EstimateRewinds="0" EstimateRows="4934" LogicalOp="Clustered Index Scan" NodeId="18" Parallel="false" PhysicalOp="Clustered Index Scan" EstimatedTotalSubtreeCost="0.375376" TableCardinality="4934">
                          <OutputList>
                            <ColumnReference Database="[murmansk2]" Schema="[ref]" Table="[PropertyExpenditures]" Column="id" />
                            <ColumnReference Database="[murmansk2]" Schema="[ref]" Table="[PropertyExpenditures]" Column="idOwner" />
                          </OutputList>
                          <IndexScan Ordered="true" ForcedIndex="false" NoExpandHint="false">
                            <DefinedValues>
                              <DefinedValue>
                                <ColumnReference Database="[murmansk2]" Schema="[ref]" Table="[PropertyExpenditures]" Column="id" />
                              </DefinedValue>
                              <DefinedValue>
                                <ColumnReference Database="[murmansk2]" Schema="[ref]" Table="[PropertyExpenditures]" Column="idOwner" />
                              </DefinedValue>
                            </DefinedValues>
                            <Object Database="[murmansk2]" Schema="[ref]" Table="[PropertyExpenditures]" Index="[PropertyExpenditures_PK_6bf]" IndexKind="Clustered" />
                          </IndexScan>
                        </RelOp>
                      </NestedLoops>
                    </RelOp>
                  </Update>
                </RelOp>
                <RelOp AvgRowSize="9" EstimateCPU="8.44831E-05" EstimateIO="0.014867" EstimateRebinds="0" EstimateRewinds="0" EstimateRows="84.4831" LogicalOp="Delete" NodeId="20" Parallel="false" PhysicalOp="Clustered Index Delete" EstimatedTotalSubtreeCost="2.7984">
                  <OutputList />
                  <Update DMLRequestSort="false">
                    <Object Database="[murmansk2]" Schema="[ref]" Table="[AllocationIndirectCosts]" Index="[AllocationIndirectCosts_PK_144]" IndexKind="Clustered" />
                    <RelOp AvgRowSize="23" EstimateCPU="0.561428" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimateRows="84.4831" LogicalOp="Inner Join" NodeId="21" Parallel="false" PhysicalOp="Nested Loops" EstimatedTotalSubtreeCost="2.78344">
                      <OutputList>
                        <ColumnReference Database="[murmansk2]" Schema="[ref]" Table="[AllocationIndirectCosts]" Column="id" />
                      </OutputList>
                      <NestedLoops Optimized="false">
                        <Predicate>
                          <ScalarOperator ScalarString="[murmansk2].[ref].[AllocationIndirectCosts].[idOwner]=[murmansk2].[doc].[AllocationJustification].[id]">
                            <Compare CompareOp="EQ">
                              <ScalarOperator>
                                <Identifier>
                                  <ColumnReference Database="[murmansk2]" Schema="[ref]" Table="[AllocationIndirectCosts]" Column="idOwner" />
                                </Identifier>
                              </ScalarOperator>
                              <ScalarOperator>
                                <Identifier>
                                  <ColumnReference Database="[murmansk2]" Schema="[doc]" Table="[AllocationJustification]" Column="id" />
                                </Identifier>
                              </ScalarOperator>
                            </Compare>
                          </ScalarOperator>
                        </Predicate>
                        <RelOp AvgRowSize="23" EstimateCPU="1.27146E-05" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimateRows="1" LogicalOp="Eager Spool" NodeId="22" Parallel="false" PhysicalOp="Table Spool" EstimatedTotalSubtreeCost="0.00551099">
                          <OutputList>
                            <ColumnReference Database="[murmansk2]" Schema="[doc]" Table="[AllocationJustification]" Column="id" />
                          </OutputList>
                          <Spool PrimaryNodeId="2" />
                        </RelOp>
                        <RelOp AvgRowSize="39" EstimateCPU="0.147901" EstimateIO="2.02831" EstimateRebinds="0" EstimateRewinds="0" EstimateRows="134313" LogicalOp="Clustered Index Scan" NodeId="23" Parallel="false" PhysicalOp="Clustered Index Scan" EstimatedTotalSubtreeCost="2.17621" TableCardinality="134313">
                          <OutputList>
                            <ColumnReference Database="[murmansk2]" Schema="[ref]" Table="[AllocationIndirectCosts]" Column="id" />
                            <ColumnReference Database="[murmansk2]" Schema="[ref]" Table="[AllocationIndirectCosts]" Column="idOwner" />
                          </OutputList>
                          <IndexScan Ordered="true" ForcedIndex="false" NoExpandHint="false">
                            <DefinedValues>
                              <DefinedValue>
                                <ColumnReference Database="[murmansk2]" Schema="[ref]" Table="[AllocationIndirectCosts]" Column="id" />
                              </DefinedValue>
                              <DefinedValue>
                                <ColumnReference Database="[murmansk2]" Schema="[ref]" Table="[AllocationIndirectCosts]" Column="idOwner" />
                              </DefinedValue>
                            </DefinedValues>
                            <Object Database="[murmansk2]" Schema="[ref]" Table="[AllocationIndirectCosts]" Index="[AllocationIndirectCosts_PK_144]" IndexKind="Clustered" />
                          </IndexScan>
                        </RelOp>
                      </NestedLoops>
                    </RelOp>
                  </Update>
                </RelOp>
                <RelOp AvgRowSize="23" EstimateCPU="5.02533E-05" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimateRows="4.42217" LogicalOp="Eager Spool" NodeId="25" Parallel="false" PhysicalOp="Table Spool" EstimatedTotalSubtreeCost="0.078453">
                  <OutputList>
                    <ColumnReference Database="[murmansk2]" Schema="[ref]" Table="[IndirectServices]" Column="id" />
                  </OutputList>
                  <Spool>
                    <RelOp AvgRowSize="23" EstimateCPU="4.42217E-06" EstimateIO="0.01" EstimateRebinds="0" EstimateRewinds="0" EstimateRows="4.42217" LogicalOp="Delete" NodeId="26" Parallel="false" PhysicalOp="Clustered Index Delete" EstimatedTotalSubtreeCost="0.156705">
                      <OutputList>
                        <ColumnReference Database="[murmansk2]" Schema="[ref]" Table="[IndirectServices]" Column="id" />
                      </OutputList>
                      <Update DMLRequestSort="false">
                        <Object Database="[murmansk2]" Schema="[ref]" Table="[IndirectServices]" Index="[IndirectServices_PK_805]" IndexKind="Clustered" />
                        <RelOp AvgRowSize="23" EstimateCPU="0.0317262" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimateRows="4.42217" LogicalOp="Inner Join" NodeId="27" Parallel="false" PhysicalOp="Nested Loops" EstimatedTotalSubtreeCost="0.146701">
                          <OutputList>
                            <ColumnReference Database="[murmansk2]" Schema="[ref]" Table="[IndirectServices]" Column="id" />
                          </OutputList>
                          <NestedLoops Optimized="false">
                            <Predicate>
                              <ScalarOperator ScalarString="[murmansk2].[ref].[IndirectServices].[idOwner]=[murmansk2].[doc].[AllocationJustification].[id]">
                                <Compare CompareOp="EQ">
                                  <ScalarOperator>
                                    <Identifier>
                                      <ColumnReference Database="[murmansk2]" Schema="[ref]" Table="[IndirectServices]" Column="idOwner" />
                                    </Identifier>
                                  </ScalarOperator>
                                  <ScalarOperator>
                                    <Identifier>
                                      <ColumnReference Database="[murmansk2]" Schema="[doc]" Table="[AllocationJustification]" Column="id" />
                                    </Identifier>
                                  </ScalarOperator>
                                </Compare>
                              </ScalarOperator>
                            </Predicate>
                            <RelOp AvgRowSize="23" EstimateCPU="1.27146E-05" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimateRows="1" LogicalOp="Eager Spool" NodeId="28" Parallel="false" PhysicalOp="Table Spool" EstimatedTotalSubtreeCost="0.00551099">
                              <OutputList>
                                <ColumnReference Database="[murmansk2]" Schema="[doc]" Table="[AllocationJustification]" Column="id" />
                              </OutputList>
                              <Spool PrimaryNodeId="2" />
                            </RelOp>
                            <RelOp AvgRowSize="39" EstimateCPU="0.008506" EstimateIO="0.0986806" EstimateRebinds="0" EstimateRewinds="0" EstimateRows="7590" LogicalOp="Clustered Index Scan" NodeId="29" Parallel="false" PhysicalOp="Clustered Index Scan" EstimatedTotalSubtreeCost="0.107187" TableCardinality="7590">
                              <OutputList>
                                <ColumnReference Database="[murmansk2]" Schema="[ref]" Table="[IndirectServices]" Column="id" />
                                <ColumnReference Database="[murmansk2]" Schema="[ref]" Table="[IndirectServices]" Column="idOwner" />
                              </OutputList>
                              <IndexScan Ordered="true" ForcedIndex="false" NoExpandHint="false">
                                <DefinedValues>
                                  <DefinedValue>
                                    <ColumnReference Database="[murmansk2]" Schema="[ref]" Table="[IndirectServices]" Column="id" />
                                  </DefinedValue>
                                  <DefinedValue>
                                    <ColumnReference Database="[murmansk2]" Schema="[ref]" Table="[IndirectServices]" Column="idOwner" />
                                  </DefinedValue>
                                </DefinedValues>
                                <Object Database="[murmansk2]" Schema="[ref]" Table="[IndirectServices]" Index="[IndirectServices_PK_805]" IndexKind="Clustered" />
                              </IndexScan>
                            </RelOp>
                          </NestedLoops>
                        </RelOp>
                      </Update>
                    </RelOp>
                  </Spool>
                </RelOp>
                <RelOp AvgRowSize="39" EstimateCPU="5.10223E-05" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimateRows="15.021" LogicalOp="Eager Spool" NodeId="31" Parallel="false" PhysicalOp="Table Spool" EstimatedTotalSubtreeCost="0.00954516">
                  <OutputList>
                    <ColumnReference Database="[murmansk2]" Schema="[doc]" Table="[AllocationJustificationRegServicesRegServices]" Column="idAllocationJustification" />
                    <ColumnReference Database="[murmansk2]" Schema="[doc]" Table="[AllocationJustificationRegServicesRegServices]" Column="idRegServices" />
                  </OutputList>
                  <Spool>
                    <RelOp AvgRowSize="39" EstimateCPU="1.5021E-05" EstimateIO="0.01" EstimateRebinds="0" EstimateRewinds="0" EstimateRows="15.021" LogicalOp="Delete" NodeId="32" Parallel="false" PhysicalOp="Clustered Index Delete" EstimatedTotalSubtreeCost="0.0188873">
                      <OutputList>
                        <ColumnReference Database="[murmansk2]" Schema="[doc]" Table="[AllocationJustificationRegServicesRegServices]" Column="idAllocationJustification" />
                        <ColumnReference Database="[murmansk2]" Schema="[doc]" Table="[AllocationJustificationRegServicesRegServices]" Column="idRegServices" />
                      </OutputList>
                      <Update DMLRequestSort="false">
                        <Object Database="[murmansk2]" Schema="[doc]" Table="[AllocationJustificationRegServicesRegServices]" Index="[PK__AllocationJustif__32A65B68]" IndexKind="Clustered" />
                        <RelOp AvgRowSize="39" EstimateCPU="6.27876E-05" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimateRows="15.021" LogicalOp="Inner Join" NodeId="33" Parallel="false" PhysicalOp="Nested Loops" EstimatedTotalSubtreeCost="0.0088723">
                          <OutputList>
                            <ColumnReference Database="[murmansk2]" Schema="[doc]" Table="[AllocationJustificationRegServicesRegServices]" Column="idAllocationJustification" />
                            <ColumnReference Database="[murmansk2]" Schema="[doc]" Table="[AllocationJustificationRegServicesRegServices]" Column="idRegServices" />
                          </OutputList>
                          <NestedLoops Optimized="false">
                            <OuterReferences>
                              <ColumnReference Database="[murmansk2]" Schema="[doc]" Table="[AllocationJustification]" Column="id" />
                            </OuterReferences>
                            <RelOp AvgRowSize="23" EstimateCPU="1.27146E-05" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimateRows="1" LogicalOp="Eager Spool" NodeId="34" Parallel="false" PhysicalOp="Table Spool" EstimatedTotalSubtreeCost="0.00551099">
                              <OutputList>
                                <ColumnReference Database="[murmansk2]" Schema="[doc]" Table="[AllocationJustification]" Column="id" />
                              </OutputList>
                              <Spool PrimaryNodeId="2" />
                            </RelOp>
                            <RelOp AvgRowSize="39" EstimateCPU="0.000173523" EstimateIO="0.003125" EstimateRebinds="0" EstimateRewinds="0" EstimateRows="15.021" LogicalOp="Clustered Index Seek" NodeId="35" Parallel="false" PhysicalOp="Clustered Index Seek" EstimatedTotalSubtreeCost="0.00329852" TableCardinality="38652">
                              <OutputList>
                                <ColumnReference Database="[murmansk2]" Schema="[doc]" Table="[AllocationJustificationRegServicesRegServices]" Column="idAllocationJustification" />
                                <ColumnReference Database="[murmansk2]" Schema="[doc]" Table="[AllocationJustificationRegServicesRegServices]" Column="idRegServices" />
                              </OutputList>
                              <IndexScan Ordered="true" ScanDirection="FORWARD" ForcedIndex="false" ForceSeek="false" NoExpandHint="false">
                                <DefinedValues>
                                  <DefinedValue>
                                    <ColumnReference Database="[murmansk2]" Schema="[doc]" Table="[AllocationJustificationRegServicesRegServices]" Column="idAllocationJustification" />
                                  </DefinedValue>
                                  <DefinedValue>
                                    <ColumnReference Database="[murmansk2]" Schema="[doc]" Table="[AllocationJustificationRegServicesRegServices]" Column="idRegServices" />
                                  </DefinedValue>
                                </DefinedValues>
                                <Object Database="[murmansk2]" Schema="[doc]" Table="[AllocationJustificationRegServicesRegServices]" Index="[PK__AllocationJustif__32A65B68]" IndexKind="Clustered" />
                                <SeekPredicates>
                                  <SeekPredicateNew>
                                    <SeekKeys>
                                      <Prefix ScanType="EQ">
                                        <RangeColumns>
                                          <ColumnReference Database="[murmansk2]" Schema="[doc]" Table="[AllocationJustificationRegServicesRegServices]" Column="idAllocationJustification" />
                                        </RangeColumns>
                                        <RangeExpressions>
                                          <ScalarOperator ScalarString="[murmansk2].[doc].[AllocationJustification].[id]">
                                            <Identifier>
                                              <ColumnReference Database="[murmansk2]" Schema="[doc]" Table="[AllocationJustification]" Column="id" />
                                            </Identifier>
                                          </ScalarOperator>
                                        </RangeExpressions>
                                      </Prefix>
                                    </SeekKeys>
                                  </SeekPredicateNew>
                                </SeekPredicates>
                              </IndexScan>
                            </RelOp>
                          </NestedLoops>
                        </RelOp>
                      </Update>
                    </RelOp>
                  </Spool>
                </RelOp>
                <RelOp AvgRowSize="9" EstimateCPU="1.03207E-06" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimateRows="1.77943" LogicalOp="Assert" NodeId="36" Parallel="false" PhysicalOp="Assert" EstimatedTotalSubtreeCost="0.110759">
                  <OutputList />
                  <Assert StartupExpression="false">
                    <RelOp AvgRowSize="9" EstimateCPU="8.26446E-06" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimateRows="1.77943" LogicalOp="Left Semi Join" NodeId="37" Parallel="false" PhysicalOp="Nested Loops" EstimatedTotalSubtreeCost="0.110758">
                      <OutputList>
                        <ColumnReference Column="Expr1038" />
                      </OutputList>
                      <NestedLoops Optimized="false">
                        <DefinedValues>
                          <DefinedValue>
                            <ColumnReference Column="Expr1038" />
                          </DefinedValue>
                        </DefinedValues>
                        <OuterReferences>
                          <ColumnReference Database="[murmansk2]" Schema="[ref]" Table="[GoalProgAJ]" Column="id" />
                        </OuterReferences>
                        <ProbeColumn>
                          <ColumnReference Column="Expr1038" />
                        </ProbeColumn>
                        <RelOp AvgRowSize="23" EstimateCPU="5.01903E-05" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimateRows="1.97714" LogicalOp="Eager Spool" NodeId="38" Parallel="false" PhysicalOp="Table Spool" EstimatedTotalSubtreeCost="0.0274833">
                          <OutputList>
                            <ColumnReference Database="[murmansk2]" Schema="[ref]" Table="[GoalProgAJ]" Column="id" />
                          </OutputList>
                          <Spool PrimaryNodeId="4" />
                        </RelOp>
                        <RelOp AvgRowSize="23" EstimateCPU="0.0055844" EstimateIO="0.369792" EstimateRebinds="0" EstimateRewinds="0.977143" EstimateRows="1" LogicalOp="Clustered Index Scan" NodeId="39" Parallel="false" PhysicalOp="Clustered Index Scan" EstimatedTotalSubtreeCost="0.0822877" TableCardinality="4934">
                          <OutputList />
                          <IndexScan Ordered="false" ForcedIndex="true" NoExpandHint="false">
                            <DefinedValues />
                            <Object Database="[murmansk2]" Schema="[ref]" Table="[PropertyExpenditures]" Index="[PropertyExpenditures_PK_6bf]" IndexKind="Clustered" />
                            <Predicate>
                              <ScalarOperator ScalarString="[murmansk2].[ref].[PropertyExpenditures].[GoalProgram]=[murmansk2].[ref].[GoalProgAJ].[id]">
                                <Compare CompareOp="EQ">
                                  <ScalarOperator>
                                    <Identifier>
                                      <ColumnReference Database="[murmansk2]" Schema="[ref]" Table="[PropertyExpenditures]" Column="GoalProgram" />
                                    </Identifier>
                                  </ScalarOperator>
                                  <ScalarOperator>
                                    <Identifier>
                                      <ColumnReference Database="[murmansk2]" Schema="[ref]" Table="[GoalProgAJ]" Column="id" />
                                    </Identifier>
                                  </ScalarOperator>
                                </Compare>
                              </ScalarOperator>
                            </Predicate>
                          </IndexScan>
                        </RelOp>
                      </NestedLoops>
                    </RelOp>
                    <Predicate>
                      <ScalarOperator ScalarString="CASE WHEN NOT [Expr1038] IS NULL THEN (0) ELSE NULL END">
                        <IF>
                          <Condition>
                            <ScalarOperator>
                              <Logical Operation="NOT">
                                <ScalarOperator>
                                  <Logical Operation="IS NULL">
                                    <ScalarOperator>
                                      <Identifier>
                                        <ColumnReference Column="Expr1038" />
                                      </Identifier>
                                    </ScalarOperator>
                                  </Logical>
                                </ScalarOperator>
                              </Logical>
                            </ScalarOperator>
                          </Condition>
                          <Then>
                            <ScalarOperator>
                              <Const ConstValue="(0)" />
                            </ScalarOperator>
                          </Then>
                          <Else>
                            <ScalarOperator>
                              <Const ConstValue="NULL" />
                            </ScalarOperator>
                          </Else>
                        </IF>
                      </ScalarOperator>
                    </Predicate>
                  </Assert>
                </RelOp>
                <RelOp AvgRowSize="9" EstimateCPU="2.30837E-06" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimateRows="3.97995" LogicalOp="Assert" NodeId="41" Parallel="false" PhysicalOp="Assert" EstimatedTotalSubtreeCost="0.378643">
                  <OutputList />
                  <Assert StartupExpression="false">
                    <RelOp AvgRowSize="9" EstimateCPU="1.84847E-05" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimateRows="3.97995" LogicalOp="Left Semi Join" NodeId="42" Parallel="false" PhysicalOp="Nested Loops" EstimatedTotalSubtreeCost="0.378641">
                      <OutputList>
                        <ColumnReference Column="Expr1050" />
                      </OutputList>
                      <NestedLoops Optimized="false">
                        <DefinedValues>
                          <DefinedValue>
                            <ColumnReference Column="Expr1050" />
                          </DefinedValue>
                        </DefinedValues>
                        <OuterReferences>
                          <ColumnReference Database="[murmansk2]" Schema="[ref]" Table="[IndirectServices]" Column="id" />
                        </OuterReferences>
                        <ProbeColumn>
                          <ColumnReference Column="Expr1050" />
                        </ProbeColumn>
                        <RelOp AvgRowSize="23" EstimateCPU="5.02533E-05" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimateRows="4.42217" LogicalOp="Eager Spool" NodeId="43" Parallel="false" PhysicalOp="Table Spool" EstimatedTotalSubtreeCost="0.078453">
                          <OutputList>
                            <ColumnReference Database="[murmansk2]" Schema="[ref]" Table="[IndirectServices]" Column="id" />
                          </OutputList>
                          <Spool PrimaryNodeId="25" />
                        </RelOp>
                        <RelOp AvgRowSize="23" EstimateCPU="0.147901" EstimateIO="2.02831" EstimateRebinds="0" EstimateRewinds="3.42217" EstimateRows="2.20853" LogicalOp="Clustered Index Scan" NodeId="44" Parallel="false" PhysicalOp="Clustered Index Scan" EstimatedTotalSubtreeCost="0.271659" TableCardinality="134313">
                          <OutputList />
                          <IndexScan Ordered="false" ForcedIndex="true" NoExpandHint="false">
                            <DefinedValues />
                            <Object Database="[murmansk2]" Schema="[ref]" Table="[AllocationIndirectCosts]" Index="[AllocationIndirectCosts_PK_144]" IndexKind="Clustered" />
                            <Predicate>
                              <ScalarOperator ScalarString="[murmansk2].[ref].[AllocationIndirectCosts].[idIndirectService]=[murmansk2].[ref].[IndirectServices].[id]">
                                <Compare CompareOp="EQ">
                                  <ScalarOperator>
                                    <Identifier>
                                      <ColumnReference Database="[murmansk2]" Schema="[ref]" Table="[AllocationIndirectCosts]" Column="idIndirectService" />
                                    </Identifier>
                                  </ScalarOperator>
                                  <ScalarOperator>
                                    <Identifier>
                                      <ColumnReference Database="[murmansk2]" Schema="[ref]" Table="[IndirectServices]" Column="id" />
                                    </Identifier>
                                  </ScalarOperator>
                                </Compare>
                              </ScalarOperator>
                            </Predicate>
                          </IndexScan>
                        </RelOp>
                      </NestedLoops>
                    </RelOp>
                    <Predicate>
                      <ScalarOperator ScalarString="CASE WHEN NOT [Expr1050] IS NULL THEN (0) ELSE NULL END">
                        <IF>
                          <Condition>
                            <ScalarOperator>
                              <Logical Operation="NOT">
                                <ScalarOperator>
                                  <Logical Operation="IS NULL">
                                    <ScalarOperator>
                                      <Identifier>
                                        <ColumnReference Column="Expr1050" />
                                      </Identifier>
                                    </ScalarOperator>
                                  </Logical>
                                </ScalarOperator>
                              </Logical>
                            </ScalarOperator>
                          </Condition>
                          <Then>
                            <ScalarOperator>
                              <Const ConstValue="(0)" />
                            </ScalarOperator>
                          </Then>
                          <Else>
                            <ScalarOperator>
                              <Const ConstValue="NULL" />
                            </ScalarOperator>
                          </Else>
                        </IF>
                      </ScalarOperator>
                    </Predicate>
                  </Assert>
                </RelOp>
                <RelOp AvgRowSize="9" EstimateCPU="7.84094E-06" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimateRows="13.5189" LogicalOp="Assert" NodeId="46" Parallel="false" PhysicalOp="Assert" EstimatedTotalSubtreeCost="0.0201159">
                  <OutputList />
                  <Assert StartupExpression="false">
                    <RelOp AvgRowSize="9" EstimateCPU="6.27876E-05" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimateRows="13.5189" LogicalOp="Left Semi Join" NodeId="47" Parallel="false" PhysicalOp="Nested Loops" EstimatedTotalSubtreeCost="0.0201081">
                      <OutputList>
                        <ColumnReference Column="Expr1056" />
                      </OutputList>
                      <NestedLoops Optimized="false">
                        <DefinedValues>
                          <DefinedValue>
                            <ColumnReference Column="Expr1056" />
                          </DefinedValue>
                        </DefinedValues>
                        <OuterReferences>
                          <ColumnReference Database="[murmansk2]" Schema="[doc]" Table="[AllocationJustificationRegServicesRegServices]" Column="idAllocationJustification" />
                          <ColumnReference Database="[murmansk2]" Schema="[doc]" Table="[AllocationJustificationRegServicesRegServices]" Column="idRegServices" />
                        </OuterReferences>
                        <ProbeColumn>
                          <ColumnReference Column="Expr1056" />
                        </ProbeColumn>
                        <RelOp AvgRowSize="39" EstimateCPU="5.10223E-05" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimateRows="15.021" LogicalOp="Eager Spool" NodeId="48" Parallel="false" PhysicalOp="Table Spool" EstimatedTotalSubtreeCost="0.00954516">
                          <OutputList>
                            <ColumnReference Database="[murmansk2]" Schema="[doc]" Table="[AllocationJustificationRegServicesRegServices]" Column="idAllocationJustification" />
                            <ColumnReference Database="[murmansk2]" Schema="[doc]" Table="[AllocationJustificationRegServicesRegServices]" Column="idRegServices" />
                          </OutputList>
                          <Spool PrimaryNodeId="31" />
                        </RelOp>
                        <RelOp AvgRowSize="9" EstimateCPU="0.000165926" EstimateIO="0.003125" EstimateRebinds="14.021" EstimateRewinds="0" EstimateRows="1" LogicalOp="Index Seek" NodeId="49" Parallel="false" PhysicalOp="Index Seek" EstimatedTotalSubtreeCost="0.0105001" TableCardinality="148941">
                          <OutputList />
                          <IndexScan Ordered="true" ScanDirection="FORWARD" ForcedIndex="true" ForceSeek="false" NoExpandHint="false">
                            <DefinedValues />
                            <Object Database="[murmansk2]" Schema="[ref]" Table="[DirectExpenditures]" Index="[_dta_index_DirectExpenditures_9_1297907120__K3_K5_10_22_23_24_9987]" IndexKind="NonClustered" />
                            <SeekPredicates>
                              <SeekPredicateNew>
                                <SeekKeys>
                                  <Prefix ScanType="EQ">
                                    <RangeColumns>
                                      <ColumnReference Database="[murmansk2]" Schema="[ref]" Table="[DirectExpenditures]" Column="idOwner" />
                                      <ColumnReference Database="[murmansk2]" Schema="[ref]" Table="[DirectExpenditures]" Column="Service" />
                                    </RangeColumns>
                                    <RangeExpressions>
                                      <ScalarOperator ScalarString="[murmansk2].[doc].[AllocationJustificationRegServicesRegServices].[idAllocationJustification]">
                                        <Identifier>
                                          <ColumnReference Database="[murmansk2]" Schema="[doc]" Table="[AllocationJustificationRegServicesRegServices]" Column="idAllocationJustification" />
                                        </Identifier>
                                      </ScalarOperator>
                                      <ScalarOperator ScalarString="[murmansk2].[doc].[AllocationJustificationRegServicesRegServices].[idRegServices]">
                                        <Identifier>
                                          <ColumnReference Database="[murmansk2]" Schema="[doc]" Table="[AllocationJustificationRegServicesRegServices]" Column="idRegServices" />
                                        </Identifier>
                                      </ScalarOperator>
                                    </RangeExpressions>
                                  </Prefix>
                                </SeekKeys>
                              </SeekPredicateNew>
                            </SeekPredicates>
                          </IndexScan>
                        </RelOp>
                      </NestedLoops>
                    </RelOp>
                    <Predicate>
                      <ScalarOperator ScalarString="CASE WHEN NOT [Expr1056] IS NULL THEN (0) ELSE NULL END">
                        <IF>
                          <Condition>
                            <ScalarOperator>
                              <Logical Operation="NOT">
                                <ScalarOperator>
                                  <Logical Operation="IS NULL">
                                    <ScalarOperator>
                                      <Identifier>
                                        <ColumnReference Column="Expr1056" />
                                      </Identifier>
                                    </ScalarOperator>
                                  </Logical>
                                </ScalarOperator>
                              </Logical>
                            </ScalarOperator>
                          </Condition>
                          <Then>
                            <ScalarOperator>
                              <Const ConstValue="(0)" />
                            </ScalarOperator>
                          </Then>
                          <Else>
                            <ScalarOperator>
                              <Const ConstValue="NULL" />
                            </ScalarOperator>
                          </Else>
                        </IF>
                      </ScalarOperator>
                    </Predicate>
                  </Assert>
                </RelOp>
                <RelOp AvgRowSize="9" EstimateCPU="1.18E-06" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimateRows="1" LogicalOp="Assert" NodeId="51" Parallel="false" PhysicalOp="Assert" EstimatedTotalSubtreeCost="0.248141">
                  <OutputList />
                  <Assert StartupExpression="false">
                    <RelOp AvgRowSize="9" EstimateCPU="4.18E-06" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimateRows="1" LogicalOp="Left Semi Join" NodeId="52" Parallel="false" PhysicalOp="Nested Loops" EstimatedTotalSubtreeCost="0.248139">
                      <OutputList>
                        <ColumnReference Column="Expr1057" />
                        <ColumnReference Column="Expr1058" />
                        <ColumnReference Column="Expr1059" />
                      </OutputList>
                      <NestedLoops Optimized="false">
                        <DefinedValues>
                          <DefinedValue>
                            <ColumnReference Column="Expr1059" />
                          </DefinedValue>
                        </DefinedValues>
                        <OuterReferences>
                          <ColumnReference Database="[murmansk2]" Schema="[doc]" Table="[AllocationJustification]" Column="id" />
                        </OuterReferences>
                        <ProbeColumn>
                          <ColumnReference Column="Expr1059" />
                        </ProbeColumn>
                        <RelOp AvgRowSize="24" EstimateCPU="4.18E-06" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimateRows="1" LogicalOp="Left Semi Join" NodeId="53" Parallel="false" PhysicalOp="Nested Loops" EstimatedTotalSubtreeCost="0.122149">
                          <OutputList>
                            <ColumnReference Database="[murmansk2]" Schema="[doc]" Table="[AllocationJustification]" Column="id" />
                            <ColumnReference Column="Expr1057" />
                            <ColumnReference Column="Expr1058" />
                          </OutputList>
                          <NestedLoops Optimized="false">
                            <DefinedValues>
                              <DefinedValue>
                                <ColumnReference Column="Expr1058" />
                              </DefinedValue>
                            </DefinedValues>
                            <OuterReferences>
                              <ColumnReference Database="[murmansk2]" Schema="[doc]" Table="[AllocationJustification]" Column="id" />
                            </OuterReferences>
                            <ProbeColumn>
                              <ColumnReference Column="Expr1058" />
                            </ProbeColumn>
                            <RelOp AvgRowSize="24" EstimateCPU="4.18E-06" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimateRows="1" LogicalOp="Left Semi Join" NodeId="54" Parallel="false" PhysicalOp="Nested Loops" EstimatedTotalSubtreeCost="0.00879875">
                              <OutputList>
                                <ColumnReference Database="[murmansk2]" Schema="[doc]" Table="[AllocationJustification]" Column="id" />
                                <ColumnReference Column="Expr1057" />
                              </OutputList>
                              <NestedLoops Optimized="false">
                                <DefinedValues>
                                  <DefinedValue>
                                    <ColumnReference Column="Expr1057" />
                                  </DefinedValue>
                                </DefinedValues>
                                <OuterReferences>
                                  <ColumnReference Database="[murmansk2]" Schema="[doc]" Table="[AllocationJustification]" Column="id" />
                                </OuterReferences>
                                <ProbeColumn>
                                  <ColumnReference Column="Expr1057" />
                                </ProbeColumn>
                                <RelOp AvgRowSize="23" EstimateCPU="1.27146E-05" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimateRows="1" LogicalOp="Eager Spool" NodeId="55" Parallel="false" PhysicalOp="Table Spool" EstimatedTotalSubtreeCost="0.00551099">
                                  <OutputList>
                                    <ColumnReference Database="[murmansk2]" Schema="[doc]" Table="[AllocationJustification]" Column="id" />
                                  </OutputList>
                                  <Spool PrimaryNodeId="2" />
                                </RelOp>
                                <RelOp AvgRowSize="23" EstimateCPU="0.0001581" EstimateIO="0.003125" EstimateRebinds="0" EstimateRewinds="0" EstimateRows="1" LogicalOp="Clustered Index Scan" NodeId="56" Parallel="false" PhysicalOp="Clustered Index Scan" EstimatedTotalSubtreeCost="0.0032831" TableCardinality="0">
                                  <OutputList />
                                  <IndexScan Ordered="false" ForcedIndex="true" NoExpandHint="false">
                                    <DefinedValues />
                                    <Object Database="[murmansk2]" Schema="[ref]" Table="[CAJ_Docs]" Index="[CAJ_Docs_PK_7c6]" IndexKind="Clustered" />
                                    <Predicate>
                                      <ScalarOperator ScalarString="[murmansk2].[ref].[CAJ_Docs].[idDoc]=[murmansk2].[doc].[AllocationJustification].[id]">
                                        <Compare CompareOp="EQ">
                                          <ScalarOperator>
                                            <Identifier>
                                              <ColumnReference Database="[murmansk2]" Schema="[ref]" Table="[CAJ_Docs]" Column="idDoc" />
                                            </Identifier>
                                          </ScalarOperator>
                                          <ScalarOperator>
                                            <Identifier>
                                              <ColumnReference Database="[murmansk2]" Schema="[doc]" Table="[AllocationJustification]" Column="id" />
                                            </Identifier>
                                          </ScalarOperator>
                                        </Compare>
                                      </ScalarOperator>
                                    </Predicate>
                                  </IndexScan>
                                </RelOp>
                              </NestedLoops>
                            </RelOp>
                            <RelOp AvgRowSize="23" EstimateCPU="0.0339512" EstimateIO="2.01942" EstimateRebinds="0" EstimateRewinds="0" EstimateRows="1" LogicalOp="Clustered Index Scan" NodeId="57" Parallel="false" PhysicalOp="Clustered Index Scan" EstimatedTotalSubtreeCost="0.11256" TableCardinality="30722">
                              <OutputList />
                              <IndexScan Ordered="false" ForcedIndex="true" NoExpandHint="false">
                                <DefinedValues />
                                <Object Database="[murmansk2]" Schema="[ref]" Table="[IndirectExpenditures]" Index="[IndirectExpenditures_PK_2f9]" IndexKind="Clustered" />
                                <Predicate>
                                  <ScalarOperator ScalarString="[murmansk2].[ref].[IndirectExpenditures].[idOwner]=[murmansk2].[doc].[AllocationJustification].[id]">
                                    <Compare CompareOp="EQ">
                                      <ScalarOperator>
                                        <Identifier>
                                          <ColumnReference Database="[murmansk2]" Schema="[ref]" Table="[IndirectExpenditures]" Column="idOwner" />
                                        </Identifier>
                                      </ScalarOperator>
                                      <ScalarOperator>
                                        <Identifier>
                                          <ColumnReference Database="[murmansk2]" Schema="[doc]" Table="[AllocationJustification]" Column="id" />
                                        </Identifier>
                                      </ScalarOperator>
                                    </Compare>
                                  </ScalarOperator>
                                </Predicate>
                              </IndexScan>
                            </RelOp>
                          </NestedLoops>
                        </RelOp>
                        <RelOp AvgRowSize="23" EstimateCPU="0.0030709" EstimateIO="0.121644" EstimateRebinds="0" EstimateRewinds="0" EstimateRows="1" LogicalOp="Clustered Index Scan" NodeId="58" Parallel="false" PhysicalOp="Clustered Index Scan" EstimatedTotalSubtreeCost="0.124714" TableCardinality="2649">
                          <OutputList />
                          <IndexScan Ordered="false" ForcedIndex="true" NoExpandHint="false">
                            <DefinedValues />
                            <Object Database="[murmansk2]" Schema="[doc]" Table="[AllocationJustification]" Index="[AllocationJustification_PK_583]" IndexKind="Clustered" />
                            <Predicate>
                              <ScalarOperator ScalarString="[murmansk2].[doc].[AllocationJustification].[ParentDoc]=[murmansk2].[doc].[AllocationJustification].[id]">
                                <Compare CompareOp="EQ">
                                  <ScalarOperator>
                                    <Identifier>
                                      <ColumnReference Database="[murmansk2]" Schema="[doc]" Table="[AllocationJustification]" Column="ParentDoc" />
                                    </Identifier>
                                  </ScalarOperator>
                                  <ScalarOperator>
                                    <Identifier>
                                      <ColumnReference Database="[murmansk2]" Schema="[doc]" Table="[AllocationJustification]" Column="id" />
                                    </Identifier>
                                  </ScalarOperator>
                                </Compare>
                              </ScalarOperator>
                            </Predicate>
                          </IndexScan>
                        </RelOp>
                      </NestedLoops>
                    </RelOp>
                    <Predicate>
                      <ScalarOperator ScalarString="CASE WHEN NOT [Expr1057] IS NULL THEN (0) ELSE CASE WHEN NOT [Expr1058] IS NULL THEN (1) ELSE CASE WHEN NOT [Expr1059] IS NULL THEN (2) ELSE NULL END END END">
                        <IF>
                          <Condition>
                            <ScalarOperator>
                              <Logical Operation="NOT">
                                <ScalarOperator>
                                  <Logical Operation="IS NULL">
                                    <ScalarOperator>
                                      <Identifier>
                                        <ColumnReference Column="Expr1057" />
                                      </Identifier>
                                    </ScalarOperator>
                                  </Logical>
                                </ScalarOperator>
                              </Logical>
                            </ScalarOperator>
                          </Condition>
                          <Then>
                            <ScalarOperator>
                              <Const ConstValue="(0)" />
                            </ScalarOperator>
                          </Then>
                          <Else>
                            <ScalarOperator>
                              <IF>
                                <Condition>
                                  <ScalarOperator>
                                    <Logical Operation="NOT">
                                      <ScalarOperator>
                                        <Logical Operation="IS NULL">
                                          <ScalarOperator>
                                            <Identifier>
                                              <ColumnReference Column="Expr1058" />
                                            </Identifier>
                                          </ScalarOperator>
                                        </Logical>
                                      </ScalarOperator>
                                    </Logical>
                                  </ScalarOperator>
                                </Condition>
                                <Then>
                                  <ScalarOperator>
                                    <Const ConstValue="(1)" />
                                  </ScalarOperator>
                                </Then>
                                <Else>
                                  <ScalarOperator>
                                    <IF>
                                      <Condition>
                                        <ScalarOperator>
                                          <Logical Operation="NOT">
                                            <ScalarOperator>
                                              <Logical Operation="IS NULL">
                                                <ScalarOperator>
                                                  <Identifier>
                                                    <ColumnReference Column="Expr1059" />
                                                  </Identifier>
                                                </ScalarOperator>
                                              </Logical>
                                            </ScalarOperator>
                                          </Logical>
                                        </ScalarOperator>
                                      </Condition>
                                      <Then>
                                        <ScalarOperator>
                                          <Const ConstValue="(2)" />
                                        </ScalarOperator>
                                      </Then>
                                      <Else>
                                        <ScalarOperator>
                                          <Const ConstValue="NULL" />
                                        </ScalarOperator>
                                      </Else>
                                    </IF>
                                  </ScalarOperator>
                                </Else>
                              </IF>
                            </ScalarOperator>
                          </Else>
                        </IF>
                      </ScalarOperator>
                    </Predicate>
                  </Assert>
                </RelOp>
              </Sequence>
            </RelOp>
            <ParameterList>
              <ColumnReference Column="@1" ParameterCompiledValue="''" />
            </ParameterList>
          </QueryPlan>
        </StmtSimple>
      </Statements>
    </Batch>
  </BatchSequence>
</ShowPlanXML>


Сообщение было отредактировано: 7 мар 12, 18:05
7 мар 12, 18:02    [12211868]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по дедлоку  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Matroskin
план на удаление
На будущее - такие портянки надо в аттач пихать.
7 мар 12, 18:06    [12211888]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по дедлоку  [new]
Matroskin
Member

Откуда: Жатай->Подольск
Сообщений: 137
Гавриленко Сергей Алексеевич,

Подождите, Вы хотите сказать что при удалении лочится запись в AllocationJustification с идентификатором 5, допустим

В это же время другим потоком вставляется запись в подчиненную таблицу от нового документа и идентификатором 7, и для проверки целостности, из-за отсутствия индекса на ParentDoc идет скан по таблице и упирается в запись с идентификатором 5

???
7 мар 12, 18:13    [12211935]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по дедлоку  [new]
Matroskin
Member

Откуда: Жатай->Подольск
Сообщений: 137
Matroskin
Гавриленко Сергей Алексеевич,

Подождите, Вы хотите сказать что при удалении лочится запись в AllocationJustification с идентификатором 5, допустим

В это же время другим потоком вставляется запись в подчиненную таблицу от нового документа и идентификатором 7, и для проверки целостности, из-за отсутствия индекса на ParentDoc идет скан по таблице и упирается в запись с идентификатором 5

???


Какой то бред написал ...
7 мар 12, 18:22    [12211991]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по дедлоку  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Matroskin
Гавриленко Сергей Алексеевич,

Подождите, Вы хотите сказать что при удалении лочится запись в AllocationJustification с идентификатором 5, допустим

В это же время другим потоком вставляется запись в подчиненную таблицу от нового документа и идентификатором 7, и для проверки целостности, из-за отсутствия индекса на ParentDoc идет скан по таблице и упирается в запись с идентификатором 5

???
А у вас в удаляющей транзакции только один стейтмент на удаление, или еще что есть?

Понятно, почему удаляющий процесс лезет в AllocationJustification и натыкается там на заблокированную вставляющим процессом запись: нет индекса по форинкею и полный скан. Не понятно, почему вставляющий лезет в AllocationJustification и натыкается там на запись заблокированную удаляющим. Это может быть только, если они пересекаются по id (вставляющий лезет проверять наличие записи, на которую он ссылается), но вы говоорите, что это не так.

В общем, индекс по ParentDoc маст хев. Если после этого дедлок не уйдет, надо копать дальше.
7 мар 12, 18:28    [12212019]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по дедлоку  [new]
Matroskin
Member

Откуда: Жатай->Подольск
Сообщений: 137
Гавриленко Сергей Алексеевич
Matroskin
Гавриленко Сергей Алексеевич,

Подождите, Вы хотите сказать что при удалении лочится запись в AllocationJustification с идентификатором 5, допустим

В это же время другим потоком вставляется запись в подчиненную таблицу от нового документа и идентификатором 7, и для проверки целостности, из-за отсутствия индекса на ParentDoc идет скан по таблице и упирается в запись с идентификатором 5

???
А у вас в удаляющей транзакции только один стейтмент на удаление, или еще что есть?

Понятно, почему удаляющий процесс лезет в AllocationJustification и натыкается там на заблокированную вставляющим процессом запись: нет индекса по форинкею и полный скан. Не понятно, почему вставляющий лезет в AllocationJustification и натыкается там на запись заблокированную удаляющим. Это может быть только, если они пересекаются по id (вставляющий лезет проверять наличие записи, на которую он ссылается), но вы говоорите, что это не так.

В общем, индекс по ParentDoc маст хев. Если после этого дедлок не уйдет, надо копать дальше.


Удаление единственное, остальное UPDATE и INSERT.

Попробую еще раз шагам, может чего пропустил:
1. удаляется запись с идентификатором 2
2. есть запись с идентификатором 5 из которой делается клон у которой делается изменение полей, поле ParentDoc не меняется
3. вставляется запись с идентификатором 6, которая ссылается на запись с идентификатором 5, т.е. ParentDoc=5

Ссылка вставляемой на удаляемую не возможна.
Ссылка удаляемой на саму себя тоже не возможна.
По идее пересечений не должно быть.
7 мар 12, 18:43    [12212066]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по дедлоку  [new]
Matroskin
Member

Откуда: Жатай->Подольск
Сообщений: 137
Matroskin
Гавриленко Сергей Алексеевич
пропущено...
А у вас в удаляющей транзакции только один стейтмент на удаление, или еще что есть?

Понятно, почему удаляющий процесс лезет в AllocationJustification и натыкается там на заблокированную вставляющим процессом запись: нет индекса по форинкею и полный скан. Не понятно, почему вставляющий лезет в AllocationJustification и натыкается там на запись заблокированную удаляющим. Это может быть только, если они пересекаются по id (вставляющий лезет проверять наличие записи, на которую он ссылается), но вы говоорите, что это не так.

В общем, индекс по ParentDoc маст хев. Если после этого дедлок не уйдет, надо копать дальше.


Удаление единственное, остальное UPDATE и INSERT.

Попробую еще раз шагам, может чего пропустил:
1. удаляется запись с идентификатором 2
2. есть запись с идентификатором 5 из которой делается клон у которой делается изменение полей, поле ParentDoc не меняется
3. вставляется запись с идентификатором 6, которая ссылается на запись с идентификатором 5, т.е. ParentDoc=5

Ссылка вставляемой на удаляемую не возможна.
Ссылка удаляемой на саму себя тоже не возможна.
По идее пересечений не должно быть.


п.1 и п.2-3 выполняются разными клиентами, причем пересечение происходит при вставке в зависимую таблицу, в которой ссылка есть только на новую запись с идентификатором 6.

Такое впечатление что при удалении происходит скан по таблице, причем каким то образом в этот набор предположительно попадает вновь вставляемая запись. Но вот только зачем для проверки целостности просить "Х" блокировку???
7 мар 12, 18:56    [12212111]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по дедлоку  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Matroskin
Но вот только зачем для проверки целостности просить "Х" блокировку???
"X" никто не просит. Все просят "S" и на этот "X" натыкаются.
7 мар 12, 18:58    [12212116]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по дедлоку  [new]
Matroskin
Member

Откуда: Жатай->Подольск
Сообщений: 137
Гавриленко Сергей Алексеевич,

Индекс добавил.

Как можно самому воспроизвести такую блокировку? У меня она лезет при нескольких активных клиентах, выполняющих одинаковые операции, а сейчас таких в наличии нет.
7 мар 12, 19:09    [12212176]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по дедлоку  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Matroskin
Как можно самому воспроизвести такую блокировку? У меня она лезет при нескольких активных клиентах, выполняющих одинаковые операции, а сейчас таких в наличии нет.
Наблюдайте, собирайте графы. Мы сначала какое-то время собираем, потом фиксаем скопом.
7 мар 12, 19:12    [12212187]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по дедлоку  [new]
Matroskin
Member

Откуда: Жатай->Подольск
Сообщений: 137
Гавриленко Сергей Алексеевич,

У меня к сожалению нет такой возможности. Такие локи я ловлю только при нагрузочном тестировании. На рабочей базе не могу посмотреть, поскольку у меня нет доступа.

что нибудь типа
begin tran
delete from doc.AllocationJustificatiuon where id=''

begin tran
insert into AllocationJustificationRegServicesRegServices ...

предположительно даст же такую же блокировку ?
7 мар 12, 19:17    [12212205]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить