Тестирование нагрузки Mysql

Thank you for reading this post, don't forget to subscribe!

Sysbench — ути­ли­та для тести­ро­ва­ния про­из­во­ди­тель­но­сти MySQL (и дру­гих СУБД), а так­же пара­мет­ров опе­ра­ци­он­ной систе­мы. Подоб­ный инстру­мент неза­ме­ним для пред­ва­ри­тель­но­го тести­ро­ва­ния эффек­тив­но­сти систе­мы с (потен­ци­аль­но) высо­кой нагруз­кой. Sysbench поз­во­ля­ет оце­нить про­из­во­ди­тель­ность сер­ве­ра СУБД и опе­ра­ци­он­ной систе­мы в раз­лич­ных усло­ви­ях при раз­лич­ной нагрузке.

Особенности sysbench

Из пре­иму­ществ это­го про­дук­та сле­ду­ет отме­тить его про­сто­ту, гиб­кость, а также:

  • Крос­сплат­фор­мен­ность
  • Муль­ти­по­точ­ность
  • Набор тестов для пара­мет­ров уров­ня ОС (память, фай­ло­вая систе­ма, про­цес­сор и т.п.)

Дру­ги­ми сло­ва­ми эта ути­ли­та нуж­на для реше­ния сле­ду­ю­щих задач:

  • Тести­ро­ва­ние пара­мет­ры ОС (даже без уста­нов­ки СУБД) для пред­ва­ри­тель­ной их оцен­ки и после­ду­ю­щей настройке
  • Про­вер­ка про­из­во­ди­тель­но­сти СУБД с раз­лич­ной кон­фи­гу­ра­ци­ей и нагрузкой

Установка

Эта попу­ляр­ная ути­ли­та при­сут­ству­ет в паке­тах мно­гих дис­три­бу­ти­вов, поэтому:

Или соби­ра­ем из исходников:

После это­го ути­ли­та гото­ва к работе.

Обзор функциональности

Син­так­сис вызо­ва утилиты:

Коман­ды, кото­рые мож­но исполь­зо­вать в тестах:

  • prepare — под­го­тов­ка теста (созда­ние таб­лиц, встав­ка дан­ных и т.п.) если актуально
  • run — выпол­не­ние теста
  • cleanup — очист­ка дан­ных (после эта­па подготовки)
  • help — выво­дит допол­ни­тель­ные пара­мет­ры теста

Пара­метр "--test" зада­ет имя теста, кото­рый сле­ду­ет выпол­нять. Sysbench вклю­ча­ет в себя несколь­ко тестов:

cpu

Этот тест про­ве­рит про­из­во­ди­тель­ность про­цес­со­ров, исполь­зуя вычис­ле­ния с 64-раз­ряд­ны­ми чис­ла­ми. Например:

memory

Этот тест слу­жит для изме­ре­ния про­из­во­ди­тель­но­сти после­до­ва­тель­ных опе­ра­ций чтения/записи в опе­ра­тив­ную память.

fileio

Этот тест исполь­зу­ет­ся для симу­ля­ции раз­но­об­раз­ной нагруз­ки на фай­ло­вую под­си­сте­му. При под­го­тов­ке теста созда­ет­ся опре­де­лен­ное коли­че­ство фай­лов (ука­зан­но­го раз­ме­ра). Затем, при выпол­не­нии теста, над эти­ми фай­ла­ми про­ис­хо­дят опе­ра­ции чтения/записи в несколь­ко потоков.

threads

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

oltp (Online transaction processing)

Этот тест слу­жит для оцен­ки про­из­во­ди­тель­но­сти СУБД, о нем подроб­нее дальше:

OLTP тестирование — производительность MySQL

Этот тест про­во­дит­ся в несколь­ко эта­пов. На эта­пе prepare созда­ет­ся тесто­вая таб­ли­ца и запол­ня­ет­ся дан­ны­ми (в ука­зан­ных коли­че­ствах). Например:

Эта опе­ра­ция создаст innoDB таб­ли­цу на 10000 запи­сей. По умол­ча­нию таб­ли­ца созда­ет­ся в базе дан­ных sbtest (не забудь­те создать эту БД либо ука­зать другую).

Далее выпол­ня­ют­ся тесты:

Эта коман­да выпол­нит тест с 8 кли­ен­та­ми (мак­си­маль­ное коли­че­ство запро­сов — 500) на таб­ли­це, кото­рая была созда­на на преды­ду­щем эта­пе. После окон­ча­ния теста не забудь­те выпол­нить коман­ду cleanup. После выпол­не­ния Вы уви­ди­те подроб­ные резуль­та­ты тести­ро­ва­ния. Далее — живой пример.

Пример

Посмот­рим на про­из­во­ди­тель­ность innoDB таб­ли­цы с раз­ны­ми зна­че­ни­я­ми кон­фи­гу­ра­ци­он­ных пара­мет­ров (про­ве­дем экс­пе­ри­мент со сбро­сом лога). Для нача­ла под­го­то­вим innoDB таб­ли­цу (50 тыс. записей):

.

Вклю­чим сброс лога на диск после каж­дой тран­зак­ции (исполь­зу­ем стан­дарт­ный метод сбро­са лога):

Выпол­ним тест:

И уви­дим сле­ду­ю­щие результаты:

Заметь­те, что про­пуск­ная спо­соб­ность опе­ра­ций чтения/записи око­ло 5 тыс в секун­ду. Теперь изме­ним пара­мет­ры сбро­са лога:

и про­ве­рим результаты:

Убеж­да­ем­ся, что во вто­ром слу­чае про­пуск­ная спо­соб­ность СУБД вдвое выше, чем в пер­вом (о пара­мет­рах подроб­нее в ста­тье Опти­маль­ная настрой­ка Mysql сервера).