Приложение Windows Forms нашего пользователя извлекает записи из представления на SQL Server через ADO.NET и веб-службу SOAP, отображая их в сетке данных. У нас было несколько случаев с ~ 25 000 строк, которые работают относительно гладко, но потенциальный клиент должен иметь много раз в одном списке.Имитация запросов больших представлений для целей бенчмаркинга
Чтобы выяснить, насколько хорошо мы масштабируемся прямо сейчас, и как (и насколько далеко) мы можем реально улучшить, я бы хотел реализовать симуляцию: вместо отображения фактических данных SQL Server отправляет вымышленные случайные данные , Клиент и транспортная сторона будут в основном одинаковыми; вид (или, по крайней мере, базовая таблица), конечно, будет работать по-другому. Пользователь указывает количество вымышленных строк (например, 100 000).
На данный момент я просто хочу знать, сколько времени потребуется клиенту для извлечения и обработки данных, и он готов к его отображению.
Что я пытаюсь выяснить, так это: как мне заставить SQL Server отправлять такие данные?
Do I:
- Создайте хранимую процедуру, которая будет работать заранее, чтобы заполнить фактическую таблицу?
- Создайте функцию, на которую я указываю представление, и, таким образом, сервер генерирует данные «вживую»?
- Как-то реплицировать и/или рандомизировать существующие данные?
Первый вариант звучит для меня так, как будто это даст результаты, наиболее близкие к реальному миру. Поскольку данные на самом деле «физически там», запрос SELECT
будет очень похож на один по реальным данным. Тем не менее, он налагает на сервер лишнюю операцию. Поддельные данные также будут скопированы, поскольку они будут жить в одной и той же базе данных - если, конечно, я не удалю данные после каждого теста.
Второй и третий вариант налога на сервер , а работает с фактической симуляцией, что потенциально дает нереалистично медленные результаты.
Кроме того, я не уверен, как создавать эти строки, не используя цикл или курсор. Я могу использовать SELECT top <n> random1(), random2(), […] FROM foo
, если foo
действительно имеет <n>
записей, но в противном случае я (очевидно) получаю столько строк, сколько foo
. A GROUP BY newid()
или подобное похоже не подходит к данной игре.
Хороший вопрос. Я перемаркировал свой пост; мы все еще используем 2005 год. – 2008-10-26 21:30:14