Взаимная блокировка на SQL Server только при локальном запуске базы данныхJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Взаимная блокировка на SQL Server только при локальном запуске базы данных

Сообщение Anonymous »

При попытке локального тестирования приложения (Java, Spring boot, спящий режим, сервер SQl в качестве базы данных) я замечаю значительную взаимоблокировку, приложение и база данных работают на моем компьютере во время теста. Никакой тупиковой ситуации в промежуточной или производственной среде не происходит (однако мой компьютер гораздо мощнее, чем серверы и база данных, работающая в контейнере на моем компьютере).
Я тестирую определенную часть приложение, которое выполняет пакетный импорт, в основном оно использует строки из таблицы, которые представляют события в контракте и товарах (контракт имеет несколько элементов), и импортирует их в две таблицы: «контракт» и «элемент», сохраняя их в конечном состоянии .
События обрабатываются несколькими потоками, но поток обрабатывает только события, относящиеся к одному контракту, поэтому разные потоки не взаимодействуют с одними и теми же строками в контракте и элементе. таблица:
Кажется, существует определенная часть кода (относящаяся к типу контракта), которая вызывает взаимоблокировку, я собрал отчет о взаимоблокировке с сервера sql и трассировку приложения с транзакцией log и ведение журнала в спящем режиме, но я не знаком с взаимоблокировкой, и мне трудно понять, как узнать, что на самом деле происходит.
Соответствующие таблицы DDL :< /p>

Код: Выделить всё

use INVOICE
go

create table dbo.contract
(
reference             varchar(16)   not null
primary key,
client_code           varchar(64)   not null,
created_date          date          not null,
agency_reference      varchar(32),
channel               varchar(32),
external_code         varchar(64),
new_client            bit default 1 not null,
owner_type            varchar(32),
status                varchar(32),
target_period         varchar(7),
type                  varchar(32),
created_by_isilis     bit default 1 not null,
partial_mobility      bit default 0 not null,
new_iban              varchar(36),
new_bank_account_name varchar(70),
old_iban              varchar(70),
emitter_iban          varchar(70),
owner_name            varchar(110),
signed_date           date,
already_invoiced      bit default 0 not null,
is_dsp2               bit default 0 not null,
dsp2_status           varchar(36)
)
go

create index idx_contract_period_client
on dbo.contract (target_period, client_code)
go

create index idx_contract_period_client_type
on dbo.contract (target_period, client_code, type)
go

use INVOICE
go

create table dbo.item
(
reference           varchar(16)   not null
primary key,
contract_reference  varchar(16)   not null,
name                varchar(256),
created_date        date          not null,
sent_date           date,
status              varchar(32),
target_period       varchar(7),
finalised_by_isilis bit default 0 not null,
physical            bit default 0 not null,
small               bit default 0 not null,
has_email           bit default 0 not null,
ics                 varchar(64),
is_dsp2             bit default 0 not null
)
go

create index ITEM_CONTRACT_REFERENCE
on dbo.item (contract_reference, reference)
go
Отчет о взаимоблокировке сервера sql:

Код: Выделить всё











unknown


unknown



(@P0 nvarchar(4000))select contracten0_.reference as referenc1_1_1_,
contracten0_.agency_reference as agency_r2_1_1_, contracten0_.already_invoiced as
already_3_1_1_, contracten0_.channel as channel4_1_1_, contracten0_.client_code as
client_c5_1_1_, contracten0_.created_by_isilis as created_6_1_1_, contracten0_.created_date
as created_7_1_1_, contracten0_.dsp2_status as dsp8_1_1_, contracten0_.emitter_iban as
emitter_9_1_1_, contracten0_.external_code as externa10_1_1_, contracten0_.is_dsp2 as
is_dsp11_1_1_, contracten0_.new_bank_account_name as new_ban12_1_1_, contracten0_.new_client
as new_cli13_1_1_, contracten0_.new_iban as new_iba14_1_1_, contracten0_.old_iban as
old_iba15_1_1_, contracten0_.owner_name as owner_n16_1_1_, contracten0_.owner_type as
owner_t17_1_1_, contracten0_.partial_mobility as partial18_1_1_, contracten0_.signed_date as
signed_19_1_1_, contracten0_.status as status20_1_1_, contracten0_.target_period as
target_21_1_1_, contracten0_.type as type22_1_1_, items1_.contract_reference as con





unknown


unknown



(@P0 nvarchar(4000),@P1 bit,@P2 nvarchar(4000),@P3 nvarchar(4000),@P4 bit,@P5 date,@P6
nvarchar(4000),@P7 nvarchar(4000),@P8 nvarchar(4000),@P9 bit,@P10 nvarchar(4000),@P11
bit,@P12 nvarchar(4000),@P13 nvarchar(4000),@P14 nvarchar(4000),@P15 nvarchar(4000),@P16
bit,@P17 date,@P18 nvarchar(4000),@P19 nvarchar(4000),@P20 nvarchar(4000),@P21
nvarchar(4000))update contract set agency_reference= @P0 , already_invoiced= @P1 , channel=
@P2 , client_code= @P3 , created_by_isilis= @P4 , created_date= @P5 , dsp2_status= @P6 ,
emitter_iban= @P7 , external_code= @P8 , is_dsp2= @P9 , new_bank_account_name= @P10 ,
new_client= @P11 , new_iban= @P12 , old_iban= @P13 , owner_name= @P14 , owner_type= @P15 ,
partial_mobility= @P16 , signed_date= @P17 , status= @P18 , target_period= @P19 , type= @P20
where reference= @P21





unknown


unknown



(@P0 nvarchar(4000),@P1 bit,@P2 nvarchar(4000),@P3 nvarchar(4000),@P4 bit,@P5 date,@P6
nvarchar(4000),@P7 nvarchar(4000),@P8 nvarchar(4000),@P9 bit,@P10 nvarchar(4000),@P11
bit,@P12 nvarchar(4000),@P13 nvarchar(4000),@P14 nvarchar(4000),@P15 nvarchar(4000),@P16
bit,@P17 date,@P18 nvarchar(4000),@P19 nvarchar(4000),@P20 nvarchar(4000),@P21
nvarchar(4000))update contract set agency_reference= @P0 , already_invoiced= @P1 , channel=
@P2 , client_code= @P3 , created_by_isilis= @P4 , created_date= @P5 , dsp2_status= @P6 ,
emitter_iban= @P7 , external_code= @P8 , is_dsp2= @P9 , new_bank_account_name= @P10 ,
new_client= @P11 , new_iban= @P12 , old_iban= @P13 , owner_name= @P14 , owner_type= @P15 ,
partial_mobility= @P16 , signed_date= @P17 , status= @P18 , target_period= @P19 , type= @P20
where reference= @P21
































План выполнения запросов, отображаемых в отчете о взаимоблокировках: https://www.brentozar.com/pastetheplan/?id=SkazSLS1kg и https://www. .brentozar.com/pastetheplan/?id=SJOZvIHJJg
Я загрузил журналы приложений с транзакциями и SQL здесь: https://drive.google.com/file/d/1K4Lt4X ... 8u61X2DJZ/ view?usp=drive_link
Мне нужен совет о том, что я могу улучшить в приложении, чтобы уменьшить количество взаимоблокировок.

Подробнее здесь: https://stackoverflow.com/questions/790 ... se-locally
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»