Запрос медленный при первом запуске, но быстрый при последующих вызовах - Subsonic 2.0 - PullRequest
0 голосов
/ 13 ноября 2009

Мы столкнулись с проблемой, когда открываем наше приложение и запускаем дозвуковой выбор. Для выбора данных требуется некоторое время. Любые последующие звонки на тот же выбор выполняются очень быстро. Эквивалентный T-SQL также работает очень быстро. Как будто SubSonic что-то кеширует при первом соединении и повторно использует это при последующих соединениях. Запросы выполняются быстро, пока мы не закроем приложение, а затем не откроем новое, снова первый запуск занимает некоторое время, но все последующие вызовы выполняются быстро.

Есть идеи по этому поводу? Нужно ли обновляться до более новой версии?

Я нигде не мог найти упоминания об этом.

Это приложение для Windows, хотя у нас есть похожая проблема с веб-приложением. Запрос представляет собой простой выбор с внутренним объединением:

Dim status As New subsonicdal.Status("statusCode", "active")
Dim clientPreferencesDataSet As DataSet = New SubSonic.Select(subsonicdal.ClientPreference.ClientIdColumn, subsonicdal.ClientPreferenceType.AssetOrUnitColumn, subsonicdal.ClientPreferenceUsage.UsageTypeColumn) _
                                                                .From(subsonicdal.ClientPreference.Schema) _
                                                                .InnerJoin(subsonicdal.ClientPreferenceType.Schema) _
                                                                .InnerJoin(subsonicdal.ClientPreferenceUsage.Schema) _
                                                                .Where(subsonicdal.ClientPreference.ClientIdColumn).IsEqualTo(clientId) _
                                                                .And(subsonicdal.ClientPreference.StatusidColumn).IsEqualTo(status.Statusid).ExecuteDataSet()

Обычно, если я поставлю точку останова на строку Dim clientPreferencesDataSet As DataSet, выполните строку, которая занимает около 6 секунд. Если я снова разорваюсь на линии, это произойдет немедленно (менее секунды).

ClientPreferences имеет внешние целочисленные ключи для ClientPreferenceUsage & ClientPreferenceType, в ClientPreferences имеется около 70 записей, 8 в ClientPreferenceUsage и 12 в ClientPreferenceType. Это очень простая структура. Если я запускаю SQL, который Subsonic генерирует в Mgt Studio, это немедленно. Я пробовал InnerJoining таблицу Status, используя строки для возвращаемых полей, но нет никакой разницы.

Ответы [ 2 ]

1 голос
/ 13 ноября 2009

SubSonic ничего не кеширует - он просто пытается выполнить любой запрос, который вы ему бросили. Это веб-приложение? Если это так (что вы, вероятно, знаете), поначалу время загрузки очень медленное.

Чем больше деталей вы можете предложить, тем лучше - например, тест, который точно определяет проблему нагрузки, а также структуру вашей БД (если вы можете).

1 голос
/ 13 ноября 2009

На ум приходят две вещи:

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