Каков наилучший протокол для клиента sql server express 2008 r2 и сервера, работающего на одной машине? - PullRequest
2 голосов
/ 21 июля 2011

Мы используем sql express 2008 r2 для простых отчетов и хранения данных. Данные записываются обычно со скоростью от 600 до 3000 записей в минуту. (один клиент, одно соединение, один и тот же компьютер). Нам нужен оптимальный протокол выполнения. (хорошая производительность без потери памяти ..) Я читаю статьи в Интернете, и они довольно запутаны, когда дело доходит до выбора между tcp / ip, shared mem и named pipe. Подвести итоги документации MSDN

1) Общая память не имеет настраиваемых свойств. Общая память всегда пробуется первой и не может быть перемещена из верхней позиции списка включенных протоколов в списке свойств клиентских протоколов. Does this mean shared mem is preferred and fastest ?

2) Для сокетов TCP / IP передача данных более рационализирована и требует меньших накладных расходов. Передача данных также может использовать преимущества механизмов повышения производительности сокетов TCP / IP, таких как управление окнами, отложенные подтверждения и т. Д. Хорошо. Но is it faster than shared mem ?

3) Если серверное приложение выполняется локально на компьютере, на котором запущен экземпляр Microsoft® SQL Server ™, вариант локального протокола именованных каналов. Local named pipes runs in kernel mode and is extremely fast. Когда я прочитал это, я не мог больше смущаться и решил выложить свой вопрос в стек.

Итак, Гуру, пожалуйста, помогите мне решить. спасибо

Ответы [ 2 ]

2 голосов
/ 30 октября 2011

Общая память - это самый быстрый протокол, однако, если ваша цель - «производительность», среда, которую вы используете для доступа к базе данных, и способ передачи данных, SQL-запрос, который вы пишете (или используете другой метод), будет иметь гораздо большее влияние на производительность.

Если вы собираетесь попробовать использовать ADO / ADO.NET или другой тяжелый протокол, подобный этому, наибольшая производительность здесь будет потеряна. Если вам нужна экстремальная производительность, вам нужно изучить и научиться взаимодействовать с ядром базы данных на более низком уровне.

См. http://www.devart.com/sdac/ в качестве начала.

1 голос
/ 21 июля 2011

Если следующая цитата из вашего ответа действительно верна, то ваш вопрос уже содержит ответ:

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

Учитывая, что ваш клиент и база данных работают на одном компьютере, это означает, что совместно используемая память будет работать всегда (без радикальных мер).Неважно, какой протокол вы выберете - общая память будет той, которая будет использоваться!: -)

Для чего его производительность полностью зависит от реализации, используемой в SQL Server (я основываю это на своих знаниях о методах связи, а не на глубоких знаниях SQL Server), но на порядке (с точки зрения производительности) почти наверняка выглядит так (сначала быстрее):

  • Общая память (подкрепленная тем фактом, что SQL Server всегда использует это, когда может)
  • Именованные каналы
  • TCP / IP

Я не могу найти цитату, что Shared memory на самом деле на быстрее, чем именованные каналы, но TBH, я не думаю, что это имеет значениетак много - в любом случае связь между клиентом и базой данных на локальной машине будет невероятно эффективной, я сомневаюсь, что вы заметите разницу в производительности.

...