При попытке локального тестирования приложения (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
При попытке локального тестирования приложения (Java, Spring boot, спящий режим, сервер SQl в качестве базы данных) я замечаю значительную взаимоблокировку, приложение и база данных работают на моем компьютере во время теста. Никакой тупиковой ситуации в промежуточной или производственной среде не происходит (однако мой компьютер гораздо мощнее, чем серверы и база данных, работающая в контейнере на моем компьютере). Я тестирую определенную часть приложение, которое выполняет пакетный импорт, в основном оно использует строки из таблицы, которые представляют события в контракте и товарах (контракт имеет несколько элементов), и импортирует их в две таблицы: «контракт» и «элемент», сохраняя их в конечном состоянии . События обрабатываются несколькими потоками, но поток обрабатывает только события, относящиеся к одному контракту, поэтому разные потоки не взаимодействуют с одними и теми же строками в контракте и элементе. таблица: Кажется, существует определенная часть кода (относящаяся к типу контракта), которая вызывает взаимоблокировку, я собрал отчет о взаимоблокировке с сервера sql и трассировку приложения с транзакцией log и ведение журнала в спящем режиме, но я не знаком с взаимоблокировкой, и мне трудно понять, как узнать, что на самом деле происходит. Соответствующие таблицы DDL :< /p> [code]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 [/code] Отчет о взаимоблокировке сервера sql: [code]
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
План выполнения запросов, отображаемых в отчете о взаимоблокировках: https://www.brentozar.com/pastetheplan/?id=SkazSLS1kg и https://www. .brentozar.com/pastetheplan/?id=SJOZvIHJJg Я загрузил журналы приложений с транзакциями и SQL здесь: https://drive.google.com/file/d/1K4Lt4XwdSr7fgRJi98N82HT8u61X2DJZ/ view?usp=drive_link Мне нужен совет о том, что я могу улучшить в приложении, чтобы уменьшить количество взаимоблокировок.
При попытке локального тестирования приложения (Java, Spring boot, спящий режим, сервер SQl в качестве базы данных) я замечаю значительную взаимоблокировку, приложение и база данных работают на моем компьютере во время теста. Никакой тупиковой...
Я написал сценарий для управления стандартными вводами и выводами для шахматного движка. По сути, я открываю программу с помощью subprocess.popen и манипулирую вводом и выводом, используя threading.Thread для каждого.
Однако, если создается...
Я работаю над вопросом о домашнем задании (конец этого PDF):
Код:
В главе32, домашнее задание 8, он использует глобальный замок для предотвращения тупика. Кодовый вектор-avoid-hold и wait.c ниже:
void vector_add(vector_t *v_dst, vector_t *v_src)...
Я работаю с API REST Server Server Server DevOps (локальный сервер TFS/Azure DevOps) из приложения C# с использованием httpclient с использованием usedefaultcredentials = true .
Когда я запускаю приложение локально на моем разработке, вызов API...