2010-11-13 3 views
16

Я взламываю приложение MS Access 2003 на сервер SQL Server. На моей машине dev сервер SQL является локальным, поэтому производительность неплохая. Я хочу проверить производительность с помощью удаленного SQL Server, чтобы я мог учитывать последствия сетевой латентности, когда я перепроектирую приложение. Я ожидаю, что некоторые из запросов, которые кажутся быстрыми, будут работать довольно медленно после развертывания на производстве.Как я могу имитировать латентность сети на моей машине разработчика?

Как я могу замедлить (или имитировать скорость удаленного) SQL Server без использования виртуальной машины или переместить SQL на другой компьютер? Есть ли какая-то прокси или утилита Windows, которая сделает это для меня?

+1

Просто напишите свое приложение, чтобы быть эффективным при извлечении данных, то есть никогда не извлекайте больше, чем пользователь, или можете работать одновременно. Это будет эффективно в любой среде, в том числе с задней частью Jet/ACE. В этом нет ничего волшебного. Единственное обстоятельство, в котором вы можете столкнуться с крайними случаями, - это то, что вы планируете работать в открытом Интернете с относительно низкой пропускной способностью там (по сравнению с локальной сетью). В этом случае вы можете сделать больше, но я бы посоветовал не досрочную оптимизацию - сделать ее эффективной, а затем исправить то, что не достаточно быстро. –

+0

@David: Я переношу очень большое существующее приложение MS ACcess. Мне нужно быть стратегическим в том, какие изменения я делаю, нет времени или бюджета для изменения каждого запроса и источника данных. – RedFilter

+0

Я даже не стал предлагать модифицировать все. Если это хорошо спроектированное приложение Access, оно, скорее всего, будет работать очень хорошо. Если это не так, это потребует большой работы. Принцип получения только ограниченного количества записей делает быстрое и эффективное приложение независимо от того, является ли задним концом Jet/ACE или база данных сервера. –

ответ

0

Возможно, вы работаете по неправильному представлению. MS-Access поддерживает так называемые «гетерогенные соединения» (т. Е. Таблицы из множества back-end могут быть включены в один и тот же запрос, например, комбинируя данные из Oracle и SQLServer и Access и таблицы Excel). Чтобы поддерживать эту функцию, Access применяет параметр предложения WHERE у клиента, за исключением ситуаций, когда есть «сквозной» запрос к интеллектуальному серверу. В SQL Server фильтрация происходит в движке, запущенном на сервере, поэтому SQL Server обычно отправляет клиенту гораздо меньшие наборы данных.

Ответ на ваш вопрос также зависит от того, что вы подразумеваете под «удаленным». Если вы используете Access и SQL Server друг против друга в той же сети, SQL Server, работающий на сервере, будет потреблять лишь небольшую часть полосы пропускания, которую делает Access, если файл MDB доступа находится на файловом сервере. (Разумеется, если MDB находится на локальном ПК, пропускная способность сети не потребляется.) Если вы сравниваете доступ в локальной сети и SQL Server через широкополосную связь через облако, вы сравниваете номинальную скорость 100 мбит/с против DSL или полосу пропускания кабеля, то есть против номинала 20 мбит/с для высокоскоростного кабеля, в лучшем случае, пятая часть полосы пропускания, вероятно, намного меньше.

Таким образом, вы должны быть более конкретными в отношении того, что вы пытаетесь сравнить.

Вы сравниваете клиенты Access на локальном ПК, потребляющие MDB доступа, находящиеся на файловом сервере, против какого-либо другого клиента, потребляющего данные с SQL Server, находящегося на другом сервере в той же сети? Продолжаете ли вы использовать Access как клиент? Будут ли ваши запросы проходить через проход?

+0

@ Время: Ваш первый абзац неверен. Предложение 'WHERE' моих непереходных запросов к SQL Server выполняется на SQL Server в тех случаях, когда не используются ключевые слова для доступа. Ваш второй абзац также неверен: для запросов, выполняемых с Access от SQL Server, меньшая пропускная способность потребляется только в том случае, когда на SQL Server могут выполняться предложения 'JOIN' и' WHERE', поскольку нет ключевых слов Access = как «IIF». Если есть ключевые слова для доступа, весь набор данных сбрасывается до Access, чтобы он мог запускать ключевые слова. – RedFilter

+0

Сбрасывается ли полный набор данных, зависит от того, где используются функции, связанные с доступом.В предложении SELECT это не большая проблема, так как на сервере будут выполняться все критерии WHERE и JOIN, а затем функции, обработанные в SELECT только в отфильтрованном наборе результатов. Но если вы используете функции, специфичные для доступа, в предложениях WHERE или JOIN или ORDER BY, вы можете или не можете вытащить всю таблицу - зависит от того, может ли Jet/ACE определить фигуру как выделить некоторые ограничивающие факторы до доступа -специфические функции. –

+0

@ Давид: да, это важный момент. – RedFilter

0

Существует программное приложение для Windows, которое делает это (имитирует низкую пропускную способность, латентность и потери при необходимости). Это не бесплатно. В пробной версии установлен предел эмуляции 30 секунд. Вот домашняя страница этого продукта: http://softperfect.com/products/connectionemulator/

0

@RedFilter: Вы должны указать, какую версию Access вы используете. Этот документ с 2006 года показывает, что история о том, что Access приносит клиенту по всему кабелю, сложнее, чем вопрос о том, содержит ли запрос «Ключи, специфичные для конкретного доступа».

http://msdn.microsoft.com/en-us/library/bb188204(SQL.90).aspx

Но доступ может быть все более и более изощренными об использовании ресурсов сервера с каждой новой версией.

Я буду стоять мой простой совет: если вы хотите, чтобы минимизировать потребление пропускной способности, в то же время с помощью Access в качестве графического интерфейса, сквозная запросов сделать лучше, потому что тогда это ты, а не доступ, который будет контролировать объем данных, которые поступают по проводам.

Я все еще думаю, что ваш первоначальный вопрос/подход ошибочен: если ваш файл MDB доступа был локально расположен в локальной сети (не так ли?), Вам не нужно моделировать эффекты латентности сети. Вам нужно нюхать SQL-предложения Access, а не вводить какой-то произвольный и постоянный фактор «сетевой задержки». Чтобы сравнить GUI доступа с использованием MDB, расположенного на сервере локальной сети, от повышенного графического интерфейса доступа к серверу SQL Server, вам необходимо оценить, какие данные Access сбрасываются через провод к клиенту с внутреннего сервера. Даже «повышенный» доступ может быть зависанием в полосе пропускания, если вы не используете сквозные запросы. Но правильно написанный клиент для базы данных SQL-Server всегда будет намного более экономным с пропускной способностью сети, чем Access, идущий против MDB, расположенного на LAN-сервере, ceteris paribus.

+0

В настоящее время MDB с текущим доступом находится в локальной сети. Я в настоящее время обнюхиваю запросы. Версия Access - это 2003. y nuderstanding - это то, что сквозные запросы доступны только для чтения, и, кроме того, некоторые из моих запросов требуют входных параметров. Мое мнение, что самый быстрый способ определить, какие узкие места должны быть исправлены, - это сделать это эмпирически. – RedFilter

 Смежные вопросы

  • Нет связанных вопросов^_^