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