Я создаю систему, которая должна обрабатывать все данные о товарах из базы данных (сейчас тестирую 200 000 товаров + данные распределены по нескольким таблицам).
Я использую NHibernate для выполнения всех запросов.
Я создал собственный запрос, который может получить все связанные данные для списка ProductId за один раз (пытаясь найти наилучший разрез, в котором я запрашиваю данные наиболее эффективно).
Сейчас я борюсь с тем фактом, что выполнение некоторых запросов занимает до 5 минут, а в лучшем случае 2 секунды. (помните, что это один и тот же запрос для одного и того же количества идентификаторов продуктов). Это тестовый прогон, в котором я получаю 200 полных продуктов в каждом цикле. Журнал показывает (на мой взгляд) довольно случайное время запроса:
Извлечение 200 товаров из базы данных заняло: 00:00:01,9370364 секунды.
Извлечение 200 товаров из базы данных заняло: 00:01:06,8207146 секунд.
Извлечение 200 товаров из базы данных заняло: 00:00:58,5194938 секунд. .
Извлечение 200 товаров из базы данных заняло: 00:00:03,5447583 секунды.
Извлечение 200 товаров из базы данных заняло: 00:02:01,6096919 секунд.
Извлечение 200 товаров из базы данных заняло: 00: 00:03,2856333 секунды.
Извлечение 200 товаров из базы данных заняло: 00:02:04,8108302 секунды.
Извлечение 200 товаров из базы данных заняло: 00:00:03,4525576 секунд.
Извлечение 200 товаров из базы данных заняло: 00:01:04,4530670 секунд.
Выше это просто вырезка, поэтому, пожалуйста, не пытайтесь найти в ней шаблон, потому что он случайный. Иногда он выполняет 10 запросов подряд с приемлемым временем запроса, а иногда — только каждый второй запрос. В конце концов время истекло.
Кажется, это время запроса в базе данных - я также прикрепил профилировщик sql, который показывает такое же долгое время запроса.
Я больше ничего не делаю во время выполнения кода. Я установил уровень изоляции ReadCommitted — установка его ниже, похоже, не влияет на время запроса.
Я предполагаю, что вопрос в том, что я должен искать, чтобы изменить производительность? Я использую 64-битную версию SQL Server Enterprise 2012.
Я не большой поклонник изменения запроса или схемы базы данных, поскольку это, похоже, не связано?
Любые предложения приветствуются.
С наилучшими пожеланиями
Мортен