Мне нужно связать server1 с server2.
Server1 должен получить некоторые записи с Server2
, когда мы запускаем program.exe, заставит server1 получить server2
Когда я дал netstat -an | find "server2" I Видно, что некоторые TCP-порты дублируются
TCP server1:6788 server2:2122 ESTABLISHED
TCP server1:6788 server2:1920 ESTABLISHED
TCP server1:6788 server2:1718 ESTABLISHED
TCP server1:6788 server2:1516 ESTABLISHED
TCP server1:6788 server2:1314 ESTABLISHED
TCP server1:6788 server2:1112 ESTABLISHED
TCP server1:6788 server2:8910 ESTABLISHED
TCP server1:6788 server2:5678 ESTABLISHED
TCP server1:6789 server2:1234 ESTABLISHED
"program.exe" получает до 200 МБ ОЗУ и зависает, для него будет открыто от 8 до 40 портов для Server2.
Я получаю сообщение об ошибке
Transaction (Process ID 65) was deadlocked on lock resources with another process and has
been chosen as the deadlock victim. Rerun the transaction.
com.microsoft.sqlserver.jdbc.SQLServerException: Transaction (Process ID 65) was deadlocked
on lock resources with another process and has been chosen as the deadlock victim.
Rerun the transaction.
В чем должна быть причина?
Это из-за меньшего количества Memmory или дублированных TCP-портов?
Транзакция (идентификатор процесса 65) была заблокирована на ресурсах блокировки
... Также первые 6 слов сообщения об ошибке. Скорее всего, это состояние гонки race condition в доступе к базе данных Вашей программы, которое приводит к deadlock. Также это может быть черствый замок в базе данных; это трудно определить. Запросы, которые блокируют что-либо, должны быть сгруппированы в транзакции или, по крайней мере, установить таймаут.
Edit: Я думал, что все понятно, но, видимо, нет. Проблема в том, как программа обращается к БД, она НЕ имеет никакого отношения к TCP соединениям (по крайней мере, не напрямую), это красная селедка
.