
Сам процесс получения снимка файловой системы я пока оставляю в стороне, но пытаюсь получить некоторое представление о ZFS в сравнении с UFS в моих условиях. Недавно я публиковал на хабре перевод материала от John David Duncan. Там описано все достаточно вкусно, но надо пробовать самому.
Я попробовал…
Я не ставил перед собой целью организовать доскональное супердостоверное сравнение ZFS и UFS. К сожалению нет у меня на это ни сил, ни времени. Тем паче оттестировать экспонаты, так чтобы это тестирование удовлетворило всех заинтересованных лиц — убсолютно нереально. У каждого свои условия и свои задачи. А лучше опишу вам мои условия, и использую общедоступные тесты. А выводы пусть каждый сделает сам! Единственно, я бы попросил этими выводами поделиться в комментариях.
Итак, тестовая система: dell r610, 2x intel xeon e5520, 8x2gb ecc ddr3 pc1066, hdd 4x146gb 15000rpm Seagate savvio 15k2, 2x бп 717в, perc 6/I 256mb+bbu.
Диски объединены в RAID5+hotspare
FreeBSD 8.0-RELEASE GENERIC amd64
В качестве теста я прогнал sql-bench из пакета MySQL.
Сервер из портов: mysql-5.1.41.
Помимо файловой системы в тестах я менял конфиги mysql, опять же чтобы их мучительно не сочинять и не расписывать в статье я использовал стандартные из /usr/local/share/mysql:
my-small.cnf
my-huge.cnf
my-innodb-heavy-4G.cnf
Название конфига отражено в заголовках таблиц. Кроме того я потестировал свой конфиг, который является в некоторой степени гибридом из my-huge.cnf+my-innodb-heavy-4G.cnf, возможно не самым эффективным… Для конфигурации my-innodb-heavy-4G.cnf я добавил еще один тест UFS с softupdates.
Тестирование MySQL: ZFS vs UFS
В таблице указано количество выполненных тестов в первом столбце, и количество секунд, затраченное на выполнение набора тестов.
Чтобы было удобнее, анализировать данные, я нескольоко извратился — строчку TOTAL поместил в саммый верх таблицы, а ниже расшифровочка для гурманов.
small | huge | innodb | hybrid | |||||||
Операция | итераций | ufs | zfs | ufs | zfs | ufs | ufs+su | zfs | ufs | zfs |
TOTALS | 897029 | 306.00 | 400.00 | 160.00 | 269.00 | 152.00 | 133.00 | 255.00 | 155.00 | 262.00 |
alter_table_add | 100 | 2.00 | 4.00 | 2.00 | 4.00 | 3.00 | 3.00 | 4.00 | 3.00 | 4.00 |
alter_table_drop | 91 | 2.00 | 4.00 | 3.00 | 5.00 | 3.00 | 2.00 | 4.00 | 3.00 | 4.00 |
connect | 10000 | 3.00 | 3.00 | 3.00 | 3.00 | 3.00 | 3.00 | 3.00 | 3.00 | 3.00 |
connect+select_1_row | 10000 | 4.00 | 5.00 | 4.00 | 5.00 | 5.00 | 4.00 | 4.00 | 4.00 | 5.00 |
connect+select_simple | 10000 | 4.00 | 4.00 | 3.00 | 3.00 | 4.00 | 4.00 | 4.00 | 3.00 | 4.00 |
count_distinct | 1000 | 6.00 | 6.00 | 0.00 | 1.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 |
count_distinct_2 | 1000 | 8.00 | 8.00 | 0.00 | 0.00 | 1.00 | 0.00 | 0.00 | 0.00 | 0.00 |
count_distinct_big | 100 | 2.00 | 1.00 | 1.00 | 1.00 | 1.00 | 1.00 | 1.00 | 1.00 | 1.00 |
count_distinct_group | 1000 | 7.00 | 7.00 | 0.00 | 0.00 | 0.00 | 1.00 | 0.00 | 1.00 | 0.00 |
count_distinct_group_on_key | 1000 | 6.00 | 8.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 |
count_distinct_group_on_key_parts | 1000 | 7.00 | 7.00 | 1.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 |
count_distinct_key_prefix | 1000 | 3.00 | 3.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 |
count_group_on_key_parts | 1000 | 8.00 | 9.00 | 0.00 | 0.00 | 0.00 | 0.00 | 1.00 | 0.00 | 1.00 |
count_on_key | 50000 | 58.00 | 66.00 | 3.00 | 4.00 | 3.00 | 3.00 | 3.00 | 5.00 | 4.00 |
create+drop | 10000 | 14.00 | 25.00 | 15.00 | 30.00 | 14.00 | 10.00 | 31.00 | 14.00 | 34.00 |
create_MANY_tables | 10000 | 12.00 | 18.00 | 12.00 | 25.00 | 11.00 | 10.00 | 25.00 | 11.00 | 24.00 |
create_index | 8 | 0.00 | 0.00 | 1.00 | 1.00 | 0.00 | 0.00 | 1.00 | 0.00 | 1.00 |
create_key+drop | 10000 | 16.00 | 68.00 | 16.00 | 87.00 | 16.00 | 16.00 | 11.00 | 17.00 | 90.00 |
create_table | 31 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 |
delete_big | 1 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 |
drop_index | 8 | 1.00 | 1.00 | 0.00 | 0.00 | 0.00 | 1.00 | 1.00 | 1.00 | 1.00 |
drop_table | 28 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 |
drop_table_when_MANY_tables | 10000 | 6.00 | 3.00 | 6.00 | 3.00 | 6.00 | 2.00 | 3.00 | 7.00 | 3.00 |
insert | 50768 | 5.00 | 6.00 | 3.00 | 5.00 | 4.00 | 4.00 | 6.00 | 4.00 | 5.00 |
insert_many_fields | 2000 | 2.00 | 1.00 | 2.00 | 2.00 | 2.00 | 2.00 | 1.00 | 2.00 | 2.00 |
min_max_on_key | 70000 | 8.00 | 10.00 | 4.00 | 6.00 | 4.00 | 5.00 | 4.00 | 5.00 | 6.00 |
select_1_row | 100000 | 8.00 | 8.00 | 10.00 | 10.00 | 7.00 | 8.00 | 8.00 | 8.00 | 9.00 |
select_1_row_cache | 100000 | 7.00 | 8.00 | 4.00 | 4.00 | 3.00 | 2.00 | 2.00 | 2.00 | 2.00 |
select_2_rows | 100000 | 8.00 | 9.00 | 11.00 | 12.00 | 9.00 | 9.00 | 10.00 | 9.00 | 10.00 |
select_big | 70 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 1.00 | 0.00 | 0.00 | 1.00 |
select_big_str | 10000 | 2.00 | 4.00 | 3.00 | 4.00 | 3.00 | 3.00 | 3.00 | 2.00 | 2.00 |
select_cache | 10000 | 24.00 | 24.00 | 1.00 | 1.00 | 0.00 | 0.00 | 0.00 | 0.00 | 1.00 |
select_cache2 | 10000 | 25.00 | 24.00 | 24.00 | 24.00 | 25.00 | 24.00 | 25.00 | 25.00 | 24.00 |
select_column+column | 100000 | 8.00 | 8.00 | 11.00 | 10.00 | 8.00 | 10.00 | 8.00 | 7.00 | 7.00 |
select_distinct | 800 | 1.00 | 2.00 | 1.00 | 0.00 | 1.00 | 1.00 | 0.00 | 1.00 | 0.00 |
select_group | 2800 | 2.00 | 3.00 | 0.00 | 1.00 | 0.00 | 1.00 | 0.00 | 0.00 | 1.00 |
select_group_when_MANY_tables | 10000 | 1.00 | 2.00 | 2.00 | 3.00 | 3.00 | 2.00 | 4.00 | 3.00 | 3.00 |
select_join | 100 | 0.00 | 1.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 1.00 | |
select_key_prefix_join | 100 | 2.00 | 1.00 | 0.00 | 0.00 | 0.00 | 0.00 | 1.00 | 0.00 | 0.00 |
select_many_fields | 2000 | 5.00 | 6.00 | 2.00 | 2.00 | 2.00 | 2.00 | 3.00 | 2.00 | 2.00 |
select_range | 410 | 22.00 | 23.00 | 2.00 | 2.00 | 2.00 | 1.00 | 2.00 | 2.00 | 1.00 |
select_simple | 100000 | 3.00 | 5.00 | 5.00 | 5.00 | 4.00 | 3.00 | 3.00 | 5.00 | 2.00 |
select_simple_cache | 100000 | 3.00 | 4.00 | 4.00 | 4.00 | 4.00 | 2.00 | 3.00 | 4.00 | 3.00 |
select_simple_join | 500 | 0.00 | 0.00 | 0.00 | 1.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 |
wisc_benchmark | 114 | 1.00 | 1.00 | 1.00 | 1.00 | 1.00 | 1.00 | 1.00 | 1.00 | 1.00 |
На этом хотелось бы остановиться, но я там выше просил поделиться вашими выводами в комментариях, наверно бы было не честно закончить без собственных выводов :)
А мой вывод такой — на аппаратном рэйде таки ощущаются накладные расходы ZFS, и я, в своих специфических условиях не ломанусь переходить на ZFS, а таки буду пробовать нужные мне снимки на UFS2. Но у меня где-то есть в загашнике сервачек без рейда и с несколькими SATA-дисками, вероятно там то и раскроется потенциал ZFS.