БД (SQL) автоматизированные инструменты нагрузки / нагрузки?

Я хочу измерить производительность и масштабируемость моего приложения БД. Я ищу инструмент, который позволил бы мне запускать множество операторов SQL для моей БД, принимая файл БД и сценария (SQL) в качестве аргументов (+ необходимые детали, например, имя хоста, порт, логин...).

В идеале это должно позволить мне контролировать параметры, такие как количество моделируемых клиентов, продолжительность теста, рандомизировать переменные или выбирать из списка (например, SELECT FROM ... WHERE value = @var, где var читается из командной строки или рандомизируется для каждого выполнения), Я бы хотел, чтобы результаты теста были сохранены в виде файла CSV или XML, который я могу проанализировать и построить их. И, конечно же, с точки зрения цен, я предпочитаю "бесплатный" или "демо":-)

Удивительно (по крайней мере для меня), хотя существует множество таких инструментов для нагрузочного тестирования веб-приложений, я не смог найти ни одного для тестирования БД!? Те, которые я видел, такие как pgbench, используют встроенную БД на основе некоторого сценария TPC, поэтому они помогают проверить конфигурацию СУБД и H/W, но я не могу проверить МОЮ БД! Какие-либо предложения?

В частности, я использую Postgres 8.3 в Linux, хотя я мог бы использовать любой универсальный инструмент DB, который отвечает этим требованиям. H/W имеет 32 ГБ оперативной памяти, а размер основных таблиц и индексов составляет ~120 ГБ. Следовательно, может быть соотношение времени отклика 1:10 между холодным и теплым кэшем (ввод-вывод против оперативной памяти). Реально я ожидаю, что запросы будут распределены равномерно, поэтому для меня важно проверить запросы к различным частям БД.

Не стесняйтесь также связаться со мной по электронной почте. Спасибо!

- Шауль Дар (info@shauldar.com)

5 ответов

Решение

JMeter от Apache может работать с различными типами серверов. Я использую его для нагрузочных тестов против веб-приложений, другие в команде используют его для вызовов БД. Его можно настроить разными способами, чтобы получить необходимую нагрузку. Он может быть запущен в режиме консоли и даже кластеризован с использованием разных клиентов, чтобы минимизировать издержки клиента (и, таким образом, фальсифицировать результаты).

Это Java-приложение и на первый взгляд немного сложное. Но все же мы любим это.:-)

k6.io может проводить стресс-тестирование нескольких реляционных баз данных с расширением xk6-sql .

Для справки, тестовый сценарий может выглядеть примерно так:

      import sql from 'k6/x/sql';

const db = sql.open("sqlite3", "./test.db");

export function setup() {
  db.exec(`CREATE TABLE IF NOT EXISTS keyvalues (
           id integer PRIMARY KEY AUTOINCREMENT,
           key varchar NOT NULL,
           value varchar);`);
}

export function teardown() {
  db.close();
}

export default function () {
  db.exec("INSERT INTO keyvalues (key, value) VALUES('plugin-name', 'k6-plugin-sql');");

  let results = sql.query(db, "SELECT * FROM keyvalues;");
  for (const row of results) {
    console.log(`key: ${row.key}, value: ${row.value}`);
  }
}

Подробнее читайте в этом кратком руководстве .

SQL Load Generator - еще один такой инструмент:

http://sqlloadgenerator.codeplex.com/

Мне это нравится, но у него пока нет возможности сохранить настройки теста.

Вы проверяли Bristlecone с открытым исходным кодом от Continuent? Я не пользуюсь им, но он работает для Postgres и, похоже, способен выполнить то, что вам нужно. (извините, как новый пользователь, я не могу дать вам прямую ссылку на страницу инструмента, но Google доставит вас туда;o])

Мы так и не нашли адекватного решения для стресс-тестирования нашей базы данных DB2 на мэйнфреймах, поэтому мы в итоге развернули свою собственную. На самом деле он состоит из банка из 30 компьютеров под управлением Linux с установленной DB2 Connect.

29 из блоков запускают скрипт, который просто ожидает появления начального файла при монтировании NFS, а затем начинает выполнять фиксированные запросы на основе данных. Тот факт, что эти запросы (и данные в базе данных) являются фиксированными, означает, что мы можем легко сравнить с предыдущими успешными запусками.

30-й блок выполняет два сценария подряд (второй такой же, как и все остальные блоки). Затем первая пустая строка заполняет таблицы базы данных нашими известными данными, а затем создает начальный файл, чтобы позволить всем другим машинам (и себе) продолжить работу.

Это все сделано с bash и DB2 Connect так легко обслуживается (и бесплатен).

У нас также есть другой вариант выполнения случайных запросов на основе анализа производственной информации, собранной за многие месяцы. Сложнее проверить выходные данные по известным успешным базовым показателям, но в этом случае мы ищем только функциональные проблемы и проблемы с производительностью (поэтому мы проверяем ошибки и запросы, которые занимают слишком много времени).

В настоящее время мы изучаем, можем ли мы объединить все эти физические серверы в виртуальные машины как на мэйнфрейме с zLinux (который будет использовать HyperSockets с общей памятью для TCP/IP, в основном устраняя сетевые задержки), так и на платформах Intel с VMWare, чтобы освободить часть этого оборудования.

Это вариант, который вы должны изучить, если вы не возражаете против небольшой работы заранее, поскольку она дает вам большой контроль над трассой.

Другие вопросы по тегам