Статьи

Сбор транзакций в минуту с SQL Server и HammerDB

Тенденции ввода-вывода хранилища

Сбор транзакций в минуту с SQL Server и HammerDB

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

Проблема, проблема, вызов, возможность и необходимость

Задача состоит в том, чтобы собрать производительность приложения, например транзакций в минуту, из рабочей нагрузки с использованием базы данных. Инструмент рабочей нагрузки или эталонного теста (в данном случае HammerDB ) является инициатором тестирования системы (STI), который направляет действие (например, запросы базы данных) в тестируемую систему (SUT). В этом примере SUT — это Microsoft SQL Server, работающий на сервере Windows 2012 R2. Мне нужно собрать и войти в файл для последующего анализа скорости транзакций в минуту, пока STI генерирует конкретную рабочую нагрузку.

Производительность ввода-вывода для серверного хранилища

Понимание проблемы и разработка стратегии

Если вы когда-либо использовали инструменты для создания эталонных тестов или создания рабочих нагрузок, такие как Dell / Quest Benchmark Factory (часть коллекции инструментов Toad ), вы можете быть испорчены тем, как их можно использовать не только для создания рабочей нагрузки, но и для сбора, обработки и представления. и даже сохранять результаты для рабочих нагрузок базы данных, таких как моделирование TPC . В этой ситуации необходимо запустить Совет обработки транзакций (TPC), например рабочие нагрузки, и собрать показатели производительности. Давайте оставим Benchmark Factory для дальнейшего обсуждения и вместо этого сосредоточимся на бесплатном инструменте под названием HammerDB и, более конкретно, на том, как собирать показатели транзакций в минуту из Microsoft SQL Server . В то время как фокусSQL Server , вы можете легко адаптировать подход для MySQL среди других, не говоря уже о том , что среди других инструментов есть такие инструменты, как Sysbench , Aerospike .

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

собирать метрики TPM из SQL Server с помощью hammerdb
Проблема и вызов, способ сбора транзакций в минуту ( TPM )

В поисках решения

HammerDB отображает результаты через графический интерфейс, и, возможно, есть способ или хитрость, чтобы заставить его записывать результаты в файл или каким-либо другим способом, однако после поиска в Интернете обнаружил, что быстрее найти решение. Это решение состояло в том, чтобы решить, как собирать и сообщать о транзакциях в минуту (или вы могли бы сделать за секунду или другой интервал) из Microsoft SQL Server. Решение состояло в том, чтобы найти, какие счетчики производительности и метрики доступны в SQL Server, как их собрать и записать в файл для обработки. Это означает, что необходимо создать файл сценария SQL Server, который запускается в цикле сбора данных в течение заданного промежутка времени с заданным интервалом. Например, раз в минуту в течение нескольких часов.

Принятие мер

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

В следующем примере установите loopcount на некоторое количество минут, для которого нужно собирать образцы. Тем не менее, обратите внимание, что если вы выполняете тест рабочей нагрузки в течение восьми (8) часов с 30-минутным временем разгона, вы можете использовать количество циклов (например, количество минут для сбора) 480 + 30 + 10. 10 минут — для некоторых образцов до рампы и начала рабочей нагрузки, а также для четко выраженного числа тестов в конце испытания. Прибавьте или вычтите как можно больше минут, чтобы собрать их по мере необходимости, однако имейте это в виду, лучше собрать несколько дополнительных минут вместо того, чтобы их не было и не хотелось бы, чтобы вы это сделали.

-- Note and disclaimer:
--
-- Use of this code sample is at your own risk with Server StorageIO and UnlimitedIO LLC
-- assuming no responsibility for its use or consequences. You are free to use this as is
-- for non-commercial scenarios with no warranty implied. However feel free to enhance and
-- share those enhancements with others e.g. pay it forward.
--
DECLARE @cntr_value bigint;
DECLARE @loopcount bigint; # how many minutes to take samples for
set @loopcount = 240
SELECT @cntr_value = cntr_value
 FROM sys.dm_os_performance_counters
 WHERE counter_name = 'transactions/sec'
 AND object_name = 'MSSQL$DBIO:Databases'
 AND instance_name = 'tpcc' ; print @cntr_value;
 WAITFOR DELAY '00:00:01'
--
-- Start loop to collect TPM every minute
--
while @loopcount <> 0
begin
SELECT @cntr_value = cntr_value
 FROM sys.dm_os_performance_counters
 WHERE counter_name = 'transactions/sec'
 AND object_name = 'MSSQL$DBIO:Databases'
 AND instance_name = 'tpcc' ; print @cntr_value;
 WAITFOR DELAY '00:01:00'
 set @loopcount = @loopcount - 1
end
--
-- All done with loop, write out the last value
--
SELECT @cntr_value = cntr_value
 FROM sys.dm_os_performance_counters
 WHERE counter_name = 'transactions/sec'
 AND object_name = 'MSSQL$DBIO:Databases'
 AND instance_name = 'tpcc' ; print @cntr_value;
--
-- End of script
-- 

В приведенном выше примере установлено значение цикла равным 240 для 200-минутного теста с 30-минутным линейным изменением и 10 дополнительных минут выборок. Я использую пару минут, чтобы убедиться, что инициатор тестирования системы (STI), такой как HammerDB , настроен и готов начать выполнение транзакций. Вы также можете поместить это вместе со своими элементами HammerDB в файл сценария для дальнейшей автоматизации, однако я оставлю это упражнение на ваше усмотрение.

Для тех из вас, кто знаком с SQL и SQL Server, вы, вероятно, уже видели некоторые вещи, которые можно улучшить или стилизовать, или просто применить свои собственные предпочтения, и это здорово. Также обратите внимание, что я выбираю только определенную переменную из счетчиков производительности, так как есть много других, которые вы можете легко обнаружить с помощью пары команд SQL (например, выберите и укажите экземпляр базы данных и имя объекта. Также обратите внимание, что ключ обращается к элементы в sys.dm_os_performance_counters вашего экземпляра базы данных SQL Server.

Результаты, достижения

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

785
785
785
785
37142
1259026
2453479
3635138

Реализация решения

Вы можете настроить приведенный выше сценарий для запуска в составе большей оболочки автоматизации или пакетного сценария, однако для простоты я покажу его здесь с помощью Microsoft SQL Server Studio.

SQL Server скрипт для сбора TPM
Microsoft SQL Server Studio со сценарием для сбора транзакций в минуту ( TPM )

На следующем рисунке показано, как указать выходной файл для результатов, в которые необходимо войти при использовании Microsoft SQL Studio для запуска сценария сбора TPM.

Укажите выходной файл tpm для SQL Server
Microsoft SQL Server Studio указывает выходной файл

Сценарий SQL Server, запущенный для сбора результатов, и рабочая нагрузка HammerDB для генерации активности показывают, что Dell Spotlight на Windows (SoW) отображает производительность на уровне операционной системы WIndows Server 2012 R2, включая ЦП, память, пейджинг и другие действия. Обратите внимание, что в этом примере описан инициатор тестирования системы (STI), который является HammerDB, и тестируемая система (SUT), которая является Microsoft SQL Server на том же сервере.

В центре внимания Windows, в то время как SQL Server делает tpc
Dell Spotlight в Windows, показывающий производительность Windows Server

Результаты и постобработка

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

В следующем примере результаты импортируются в Excel (ваш любимый инструмент или скрипт), где я затем добавляю столбец (B), который просто вычисляет разницу между существующим и предыдущим счетчиком. Например, в ячейке B2 = A2-A1, B3 = A3-A2 и т. Д. Для остальных чисел в столбце A. Затем я строю графики чисел в столбце B, чтобы показать скорости транзакций с течением времени, которые затем можно использовать для различных вещи.

Результаты TPM Hammerdb из SQL Server, обработанные в Excel
Результаты обработаны в Excel и нанесены на график

Обратите внимание, что в приведенных выше результатах, которые могут показаться слишком хорошими, чтобы быть правдой, они являются кэшированными результатами, чтобы показать инструменты и процесс сбора данных в отличие от реальной работы, по крайней мере на данный момент…

Где узнать больше

Вот некоторые дополнительные ссылки, чтобы взглянуть на:

Как протестировать основные принципы
хранения жесткого диска, SSD или всего флэш-массива (AFA).
Сравнительный анализ ввода-вывода 101 сервера и хранилища для Smarties Инструменты тестирования ввода-вывода для сервера и хранилища: Microsoft Diskspd (часть I)
SSD Place (набор флэш-памяти и SSD) ресурсы)
Сравнительный анализ производительности и ресурсов ввода-вывода серверов и хранилищ Ввод-
вывод, ввод-вывод, насколько хорошо вы знаете о хороших или плохих операциях ввода-вывода серверов и хранилищ?

Что все это значит и подведение итогов

Вероятно, существует много способов точной настройки и оптимизации приведенного выше сценария, также может существовать даже какой-то существующий инструмент, подключаемый модуль, дополнительный модуль или параметр конфигурации, который позволяет HammerDB записывать показатели активности транзакций в файл, а не просто показывая на экране. Однако на данный момент это обходной путь, который я нашел, когда мне нужно было собрать данные о производительности транзакций с HammerDB и SQL Server.

Хорошо, сейчас ничего не сказано …

Ура гс