2008-08-31 2 views
0

Приложение Windows Forms нашего пользователя извлекает записи из представления на SQL Server через ADO.NET и веб-службу SOAP, отображая их в сетке данных. У нас было несколько случаев с ~ 25 000 строк, которые работают относительно гладко, но потенциальный клиент должен иметь много раз в одном списке.Имитация запросов больших представлений для целей бенчмаркинга

Чтобы выяснить, насколько хорошо мы масштабируемся прямо сейчас, и как (и насколько далеко) мы можем реально улучшить, я бы хотел реализовать симуляцию: вместо отображения фактических данных SQL Server отправляет вымышленные случайные данные , Клиент и транспортная сторона будут в основном одинаковыми; вид (или, по крайней мере, базовая таблица), конечно, будет работать по-другому. Пользователь указывает количество вымышленных строк (например, 100 000).

На данный момент я просто хочу знать, сколько времени потребуется клиенту для извлечения и обработки данных, и он готов к его отображению.

Что я пытаюсь выяснить, так это: как мне заставить SQL Server отправлять такие данные?

Do I:

  1. Создайте хранимую процедуру, которая будет работать заранее, чтобы заполнить фактическую таблицу?
  2. Создайте функцию, на которую я указываю представление, и, таким образом, сервер генерирует данные «вживую»?
  3. Как-то реплицировать и/или рандомизировать существующие данные?

Первый вариант звучит для меня так, как будто это даст результаты, наиболее близкие к реальному миру. Поскольку данные на самом деле «физически там», запрос SELECT будет очень похож на один по реальным данным. Тем не менее, он налагает на сервер лишнюю операцию. Поддельные данные также будут скопированы, поскольку они будут жить в одной и той же базе данных - если, конечно, я не удалю данные после каждого теста.

Второй и третий вариант налога на сервер , а работает с фактической симуляцией, что потенциально дает нереалистично медленные результаты.


Кроме того, я не уверен, как создавать эти строки, не используя цикл или курсор. Я могу использовать SELECT top <n> random1(), random2(), […] FROM foo, если foo действительно имеет <n> записей, но в противном случае я (очевидно) получаю столько строк, сколько foo. A GROUP BY newid() или подобное похоже не подходит к данной игре.

ответ

0

Если вам нужны результаты, на которые вы можете положиться, вам нужно сделать сценарий тестирования максимально реалистичным, что делает вариант 1 безусловно лучшим. Как вы указываете, если вы получаете результаты, которые недостаточно хороши с другими параметрами, вы не будете уверены, что это произошло не из-за различного поведения базы данных.

Как вы создаете данные, в значительной степени будет зависеть от проблемной области. Можете ли вы взять наборы данных у нескольких клиентов и объединить их в один мега-набор данных? Если данные представляют собой временные ряды, то, возможно, их можно дублировать в другом диапазоне.

0

Данные, как правило, похожи на CRM, то есть контакты, проекты и т. Д. Было бы хорошо просто дублировать данные (например, если у меня всего 20 000 строк, я буду их копировать пять раз, чтобы получить мои желаемые 100 000 строки).С другой стороны, слияние будет работать только в том случае, если мы никогда не разворачиваем инструмент бенчмаркинга публично, по очевидным причинам неприкосновенности частной жизни (если, конечно, я не применяю функцию к каждому столбцу, который делает исходные данные непонятными без ремонта? Подобно функции хеширования , только без значительного изменения размера значения).

Для заполнения строки, возможно, что-то, как это будет делать:

WHILE (SELECT count(1) FROM benchmark) < 100000 
    INSERT INTO benchmark 
    SELECT TOP 100000 * FROM actualData 
2

Для данных для таблиц типа тестирования CRM, я настоятельно рекомендую fakenamegenerator.com, вы можете получить 40.000 поддельные имена бесплатно.

1

Вы не упомянули, используете ли вы SQL Server 2008. Если вы используете 2008 и используете сжатие данных, имейте в виду, что случайные данные будут действовать по-разному (медленнее), чем реальные. Случайные данные намного сложнее сжимать.

Квест Жаба для SQL Server и Microsoft Visual Studio Data Dude оба имеют генераторы тестовых данных, которые помещают поддельные «реальные» данные в записи для вас.

+0

Хороший вопрос. Я перемаркировал свой пост; мы все еще используем 2005 год. – 2008-10-26 21:30:14

Смежные вопросы