Я нахожусь в такой же ситуации сейчас, вот мой подход (с помощью SQL Server 2008):
Создайте отдельную «Числа» таблица с миллионами строк данных образцов. Таблица может иметь случайные строки, идентификаторы GUID, числовые значения и т. Д. Напишите процедуру для вставки данных образца в вашу схему. Используйте модуль (%) столбца чисел для имитации разных идентификаторов пользователей и т. Д.
Создайте еще одну таблицу «NewData», аналогичную первой таблице. Это можно использовать для имитации добавления новых записей.
Создайте таблицу «TestLog», где вы можете записать количество строк, время начала и время окончания тестовых запросов.
Напишите хранимую процедуру, чтобы имитировать рабочий процесс, который вы ожидаете от своего приложения, используя новые или существующие записи по мере необходимости.
Если производительность кажется быстрой, рассмотрите вероятность промаха в кеше! Например, если ваш производственный сервер имеет 32 ГБ оперативной памяти, а ваша таблица, как ожидается, будет 128 ГБ, поиск в случайной строке будет> 75%, вероятно, не будет найден в буферном кеше.
Для имитации этого, вы можете очистить кэш перед выполнением запроса:
DBCC DROPCLEANBUFFERS; (Если Oracle: ALTER SYSTEM FLUSH SHARED POOL)
Вы можете заметить 100-кратное снижение производительности, поскольку индексы и страницы данных теперь должны загружаться с диска.
Запуск SET STATISTICS IO ON; для сбора статистики запросов. Найдите случаи, когда число логических чтений очень велико (> 1000) для запроса. Обычно это знак полного сканирования таблицы.
Используйте стандартные методы, чтобы понять шаблоны доступа к запросам (сканирование и поиск) и настроить производительность.
Включить план фактического выполнения, профилировщик SQL Server
Можете ли вы быть более конкретным относительно каждой точки? Например, анализ базы данных может означать: «Посмотрите на схему. Имеет ли смысл?» –
Я добавил дополнительную информацию, основанную на ваших комментариях. – northpole