БД (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, чтобы освободить часть этого оборудования.
Это вариант, который вы должны изучить, если вы не возражаете против небольшой работы заранее, поскольку она дает вам большой контроль над трассой.