Поделиться через


Трассировка последовательности закрытия сетевого подключения в ядро СУБД

В этой статье приведены примеры сетевой трассировки, которая фиксирует последовательность при закрытии подключения протокола TCP между клиентским приложением и сервером SQL Server ядро СУБД (сервер). Понимание этих шаблонов имеет решающее значение для диагностики сетевого поведения, определения стратегий пула и оптимизации управления подключениями в веб-приложениях или приложениях-службах.

Закрытие типов подключений

В этой статье приведены примеры обычных TCP-подключений и нескольких активных результирующих наборов (MARS). MARS — это функция SQL Server, представленная в SQL Server 2005 (9.x), которая позволяет выполнять несколько команд в соединении без необходимости очистки результатов из первой команды перед выполнением второй команды. Mars достигается с помощью мультиплексирования сеансов (SMUX).

В этом разделе описывается несколько примеров закрытия сетевого подключения.

  • IP-адрес клиента 10.10.10.104
  • IP-адрес сервера 10.10.10.22

Закрытие пакетов

В этом примере показана обычная последовательность закрытия соединения. Обратите внимание на низкие числа кадров и смещения времени. Эта последовательность, скорее всего, является закрытием подключения в пуле. Это должно происходить в течение 30 секунд после начала трассировки, или вы также можете увидеть пакеты с сохранением активности.

Схема закрытия четырехсторонного сеанса TCP.

Frame Offset    Source IP    Dest IP      Description
----- --------- ------------ ------------ ---------------------------------------------------------------------------
   50 4.1529661 10.10.10.104  10.10.10.22 TCP:Flags=...A...F, SrcPort=4657, DstPort=1433, PayloadLen=0, Seq=413460761
   51 4.1529661  10.10.10.22 10.10.10.104 TCP:Flags=...A...., SrcPort=1433, DstPort=4657, PayloadLen=0, Seq=280398321
   52 4.1529661  10.10.10.22 10.10.10.104 TCP:Flags=...A...F, SrcPort=1433, DstPort=4657, PayloadLen=0, Seq=280398321
   54 4.2330441 10.10.10.104  10.10.10.22 TCP:Flags=...A...., SrcPort=4657, DstPort=1433, PayloadLen=0, Seq=413460761

Инструкции Transact-SQL и закрывающие пакеты

В этом примере показано закрытие непулированного подключения после двух инструкций Transact-SQL. Если это подключение было непуленным, вы также можете увидеть пакеты, связанные с отправкой подключения обратно в пул подключений, а не закрывающие пакеты сразу после последнего ответа с сервера. Мы рекомендуем использовать подключения в пуле в любом веб-приложении или приложении службы, чтобы разрешить повторное использование подключения. Пул подключений уменьшает количество подключений к серверу и сокращает затраты и задержку, связанные с новыми подключениями.

Frame Offset    Source IP    Dest IP      Description
----- --------- ------------ ------------ ---------------------------------------------------------------------------
  364 9.1949581 10.10.10.104  10.10.10.22 TDS:SQLBatch, Version = 7.300000, SPID = 0, PacketID = 1, Flags=...AP..., S
  365 9.1949581  10.10.10.22 10.10.10.104 TDS:Response, Version = 7.300000, SPID = 130, PacketID = 1, Flags=...AP...,
  366 9.3043331 10.10.10.104  10.10.10.22 TDS:SQLBatch, Version = 7.300000, SPID = 0, PacketID = 1, Flags=...AP..., S
  367 9.3072631  10.10.10.22 10.10.10.104 TDS:Response, Version = 7.300000, SPID = 130, PacketID = 1, Flags=...AP...,
  375 9.4078491 10.10.10.104  10.10.10.22 TCP:Flags=...A...F, SrcPort=4647, DstPort=1433, PayloadLen=0, Seq=157672648
  376 9.4078491  10.10.10.22 10.10.10.104 TCP:Flags=...A...., SrcPort=1433, DstPort=4647, PayloadLen=0, Seq=192890973
  379 9.4078491  10.10.10.22 10.10.10.104 TCP:Flags=...A...F, SrcPort=1433, DstPort=4647, PayloadLen=0, Seq=192890973
  397 9.5221071 10.10.10.104  10.10.10.22 TCP:Flags=...A...., SrcPort=4647, DstPort=1433, PayloadLen=0, Seq=157672649

Неактивное или пуловое подключение закрываются

Подключение закрывается через 10 секунд после предыдущей проверки работоспособности обмена (см Delta . столбец).

Примечание.

Средство синтаксического анализа ошибочно помечает исходный ACK+FIN пакет (Frame 1881) как пакет с сохранением активности ACK , так как предыдущий пакет сохраняемого хранения. Однако она инициализирует закрытие подключения.

Frame Offset     Delta      Source IP   Dest IP     Description
----- ---------- ---------- ----------- ----------- -----------------------------------------------------------------
 1314 16.3641802  0.0000000 10.10.10.45 10.10.10.51 TCP:[Keep alive]Flags=...A...., SrcPort=51708, DstPort=1433, Payl
 1317 16.3677083  0.0035281 10.10.10.51 10.10.10.45 TCP:[Keep alive ack]Flags=...A...., SrcPort=1433, DstPort=51708, 
 1327 16.4269375  0.0592292 10.10.10.51 10.10.10.45 TCP:[Keep alive]Flags=...A...., SrcPort=1433, DstPort=51708, Payl
 1328 16.4269637  0.0000262 10.10.10.45 10.10.10.51 TCP:[Keep alive ack]Flags=...A...., SrcPort=51708, DstPort=1433, 
 1881 26.7918499 10.3648862 10.10.10.45 10.10.10.51 TCP:[Keep alive ack]Flags=...A...F, SrcPort=51708, DstPort=1433, 
 1886 26.7929474  0.0010975 10.10.10.51 10.10.10.45 TCP:Flags=...A...., SrcPort=1433, DstPort=51708, PayloadLen=0, Se
 1888 26.7929474  0.0000000 10.10.10.51 10.10.10.45 TCP:Flags=...A...F, SrcPort=1433, DstPort=51708, PayloadLen=0, Se
 1890 26.7929947  0.0000473 10.10.10.45 10.10.10.51 TCP:Flags=...A...., SrcPort=51708, DstPort=1433, PayloadLen=0, Se