Сбор транзакций в минуту с 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 )
В поисках решения
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.
Microsoft SQL Server Studio со сценарием для сбора транзакций в минуту ( TPM )
На следующем рисунке показано, как указать выходной файл для результатов, в которые необходимо войти при использовании Microsoft SQL Studio для запуска сценария сбора TPM.
Microsoft SQL Server Studio указывает выходной файл
Сценарий SQL Server, запущенный для сбора результатов, и рабочая нагрузка HammerDB для генерации активности показывают, что Dell Spotlight на Windows (SoW) отображает производительность на уровне операционной системы WIndows Server 2012 R2, включая ЦП, память, пейджинг и другие действия. Обратите внимание, что в этом примере описан инициатор тестирования системы (STI), который является HammerDB, и тестируемая система (SUT), которая является Microsoft SQL Server на том же сервере.
Dell Spotlight в Windows, показывающий производительность Windows Server
Результаты и постобработка
В качестве части постобработки просто используйте ваш любимый инструмент или сценарий или то, что я часто делаю, это перетаскиваю числа в электронную таблицу Excel и просто создаю новый столбец чисел, который вычисляет и показывает разницу между каждым шагом (см. Ниже). В то время как в Excel , то я сюжет цифры по мере необходимости , которая также может быть сделано с помощью сценария оболочки и других инструментов , таких как Plotting R .
В следующем примере результаты импортируются в Excel (ваш любимый инструмент или скрипт), где я затем добавляю столбец (B), который просто вычисляет разницу между существующим и предыдущим счетчиком. Например, в ячейке B2 = A2-A1, B3 = A3-A2 и т. Д. Для остальных чисел в столбце A. Затем я строю графики чисел в столбце B, чтобы показать скорости транзакций с течением времени, которые затем можно использовать для различных вещи.
Результаты обработаны в Excel и нанесены на график
Обратите внимание, что в приведенных выше результатах, которые могут показаться слишком хорошими, чтобы быть правдой, они являются кэшированными результатами, чтобы показать инструменты и процесс сбора данных в отличие от реальной работы, по крайней мере на данный момент…
Где узнать больше
Вот некоторые дополнительные ссылки, чтобы взглянуть на:
Как протестировать основные принципы
хранения жесткого диска, SSD или всего флэш-массива (AFA).
Сравнительный анализ ввода-вывода 101 сервера и хранилища для Smarties Инструменты тестирования ввода-вывода для сервера и хранилища: Microsoft Diskspd (часть I)
SSD Place (набор флэш-памяти и SSD) ресурсы)
Сравнительный анализ производительности и ресурсов ввода-вывода серверов и хранилищ Ввод-
вывод, ввод-вывод, насколько хорошо вы знаете о хороших или плохих операциях ввода-вывода серверов и хранилищ?
Что все это значит и подведение итогов
Вероятно, существует много способов точной настройки и оптимизации приведенного выше сценария, также может существовать даже какой-то существующий инструмент, подключаемый модуль, дополнительный модуль или параметр конфигурации, который позволяет HammerDB записывать показатели активности транзакций в файл, а не просто показывая на экране. Однако на данный момент это обходной путь, который я нашел, когда мне нужно было собрать данные о производительности транзакций с HammerDB и SQL Server.
Хорошо, сейчас ничего не сказано …
Ура гс