Моя трассировка профилировщика показывает, что exec sp_reset_connection
вызывается между каждым вызовом sql или вызовом процедуры. Есть причины , но могу ли я предотвратить его вызов, если я уверен, что это лишнее, для повышения производительности?
UPDATE: Причина, по которой я предполагаю, что это может улучшить производительность, двояка:
- SQL Server не нуждается в состоянии подключения reset. Я думаю, что это будет относительно незначительное улучшение.
- Уменьшенная латентность сети, потому что клиенту не нужно отправлять
exec sp_reset_connection
, ждать ответа, а затем отправлять любой SQL-код, который он действительно хочет выполнить.
Второе преимущество - это то, что меня интересует, потому что в моей архитектуре клиенты иногда находятся на некотором расстоянии от базы данных. Если для каждой sql-партии или rpc требуется двойное округление, это удваивает влияние любой латентности сети. Устранение таких двойных вызовов может потенциально повысить производительность.
Да, есть много других вещей, которые я мог бы сделать, чтобы улучшить производительность, например, перепроектировать приложение, и я большой поклонник решения основной причины проблем, но в этом случае я просто хочу знать, возможно ли это для предотвращения вызова sp_reset_connection. Затем я могу проверить, есть ли какие-либо улучшения производительности и правильно оценить риски, не вызвав этого.
Это вызывает другой вопрос: действительно ли сетевое общение с sp_reset_connection происходит, как описано выше? Т.е. клиент отправляет exec sp_reset_connection
, ждет ответа, а затем отправляет реальный sql? Или все это входит в один кусок?