Ова страница је машински преведена. Прочитајте енглески оригинал. English

IBSurgeon библиотека

Погоршање перформанси Firebird-а: тестови, митови и истина

Alexey Kovyazin, 16. мај 2014.

Можете преузети овај чланак у PDF формату.

Недавно смо у IBSurgeon спровели серију тестова перформанси са Firebird 2.5.2. Firebird 2.5.2 је најпопуларнија верзија Firebird базе података, и њени корисници често имају питања у вези са перформансама Firebird-а.

Једна од најважнијих брига у вези са перформансама базе података је њена деградација. Многи корисници тврде да њихове апликације са базама података имају проблема са перформансама када достигну одређену граничну вредност: то може бити 3Gb, 5Gb, величина RAM меморије, 20Gb, итд. Најпопуларнија тврдња је „величина базе је већа од величине RAM меморије“: када величина Firebird базе достигне величину RAM меморије, наводно постаје веома спора… Да ли је то истина?

Одлучили смо да спроведемо серију тестова да проверимо да ли постоји таква деградација перформанси повезана са растом базе података. Одлучили смо да симулирамо животни век раста базе података са истим оптерећењем на истом хардверу, и за то смо покренули 11 тестова са базама података величине између 9Gb и 30Gb:

Величине Firebird база података у овом тесту

Слика 1. Величине база података за тестове

Тестни хардвер и Firebird конфигурација

Тестни хардвер је имао следеће кључне карактеристике:

CPU AMD-FX8350, RAM 16GB, SATA софтверски RAID1 2x4Tb Seagate дискови, оперативни систем Windows Server 2008R2 (2008R2 је 64-битни).

Као што видите, то је јефтина хардверска конфигурација; може се купити за мање од USD 1000 у овом тренутку (мај 2014), и може се сматрати типичном нижом конфигурацијом - можда, осим великих SATA дискова, али према извештају произвођача, брзина 1Tb и 4Tb SATA дискова је готово иста.

Пошто је циљ теста био да се измере промене перформанси типичног система, користили смо Firebird (64-битни) са SuperServer архитектуром, не Classic, да у потпуности симулирамо ситуацију у малој компанији - они користе оно што је првобитно инсталирано годинама. Као што знате, SuperServer користи само 1 CPU језгро, па би вероватно Classic или SuperClassic (који могу користити сва CPU језгра) могли показати боље резултате у погледу перформанси, али наш циљ није било подешавање перформанси.

Међутим, подесили смо firebird.conf са очигледним изменама које препоручујемо за све Firebird SuperServer инсталације: повећани page buffers на 10000 и temp простор за сортирање.

Све тестне базе података су креиране са величином странице 16384, само ради конзистентности.

Тестирање

Учитавање

Сваки тест је садржао 2 корака: учитавање и симулацију 20 терминала који обављају insert, update и delete операције.

Корак учитавања обавља апликација за учитавање (load.exe), која уноси податке у неколико табела. Као што можете видети на слици 2, подаци се учитавају различитом брзином; креће се од ~35Mb/sec до 1mb/sec.

Брзина учитавања Firebird базе података

Слика 2. Брзина учитавања базе података (црвени графикон)

Ово је повезано са дизајном апликације за учитавање, не са Firebird-ом: учитавач брзо уноси 70% базе података, а затим полако попуњава остатак података, и то се понавља са базама података свих величина. За нас је важно да учитавач обавља исте операције, тако да можемо користити његову просечну брзину за мерење брзине учитавања.

Важно је напоменути да учитавач уноси само податке, а индекси се креирају након што је учитавање завршено.

Погледајмо табелу са резултатима за корак учитавања за 11 база података између 9 и 30Gb:

# величина базе, gb време учитавања, sec SATA брзина учитавања, Mb/sec
1 9,04 2535 3,65166075
2 10,80 3197 3,45924304
3 13,00 4057 3,281242297
4 15,50 4698 3,378458919
5 17,30 5455 3,24751604
6 19,90 6037 3,375451383
7 21,60 6473 3,417024564
8 24,20 7539 3,287014193
9 26,00 7779 3,422547885
10 28,60 8851 3,308823862
11 30,30 9266 3,348499892

Слика 3. Време и брзина учитавања

Или, боље је приказати на графикону на слици 4:

Брзина учитавања Firebird базе података

Слика 4. Резултати теста: брзина учитавања.

Као што видите, графикон је прилично стабилан, а просечна брзина процеса учитавања варира око 3.3-3.4Mb/sec. Такође нема знакова смањења брзине учитавања када величина базе података постане већа од величине RAM меморије (након базе #5, са величином 17.3Gb).

Перформансе

Дакле, време учитавања изгледа прилично обећавајуће, а шта је са стварним резултатима перформанси?

Пре него што пређемо на резултате перформанси, хајде да брзо прегледамо процес симулације.

Симулација покреће 20 нити, и свака од њих насумично извршава неколико пословних операција: креирање нове поруџбине, обрада плаћања, бројање производа на залихама, обрада испоруке поруџбине, итд. (за детаље можете погледати SQL текстове стварних ускладиштених процедура). Као што видите, ово је уобичајени скуп пословних операција апстрактне апликације за инвентар/продају.

Тестна апликација мери број пословних операција у секунди и извештава просечан број. Наравно, овај број је вештачки параметар, али је довољно добар за поређење.

Резултати теста перформанси:

# величина базе, gb перформансе на SATA
1 9,04 494,73
2 10,80 491,94
3 13,00 480,36
4 15,50 469,11
5 17,30 446,42
6 19,90 431,61
7 21,60 426,85
8 24,20 424,5
9 26,00 414,04
10 28,60 409,14
11 30,30 407,97

Слика 5. Табела са резултатима теста перформанси.

Или, боље је погледати резултате у графичком приказу:

Перформансе Firebird базе података SATA

Слика 6. Графикон резултата перформанси

Као што видите, постоји спора деградација перформанси са растом величине базе података - што је база већа, спорије ће радити (на истом хардверу). Такође нема великог пада перформанси када величина базе података постане већа од RAM меморије. Раст базе података са 9Gb на 30Gb доводи до приближно 20% губитка перформанси.

30Gb Firebird базе података су сада свуда око нас, и оне расту и расту током времена. Међутим, шта ће се десити са перформансама базе података када буде још већа? Мислимо - ВЕЋА! Шта ће се десити са перформансама када база података постане ЗАИСТА ВЕЛИКА?

Mr.Big

Да бисмо одговорили на ово питање, одлучили смо да погледамо сам крај тестне табеле и спроведемо тест са 1.7Tb (1813 Gb) базом података, на истом хардверу, са истим подешавањима.

Учитавање

Дакле, креирали смо такву базу података:

Перформансе Firebird базе података 1813Gb (1.7Tb)

Слика 7. Величина базе података - сада са 1813 Gb базом

Учитавање је трајало 566448 секунди - 157 сати, 6.55 дана. То је дуго време, али просечна брзина учитавања је била… 3.28Mb/sec!

# величина базе, gb време учитавања, sec SATA брзина учитавања, Mb/sec
12 1813,969025 566448 3,279214122

Слика 8. Време и брзина учитавања за 1.7Tb Firebird базу података

На графикону то изгледа веома добро: последња тачка (#12). Дакле, Firebird показује веома добре резултате својих алгоритама за уметање.

Брзина учитавања Firebird-а за 1813Gb (1.7Tb)

Слика 9. Брзина учитавања - тачка #12 је за 1.7Tb Firebird базу података

Перформансе Mr.Big-а

Затим смо покренули исти тест перформанси - ред 12 је за 1.7Tb базу података.

# величина базе, gb перформансе на SATA
1 9,04 494,73
2 10,80 491,94
3 13,00 480,36
4 15,50 469,11
5 17,30 446,42
6 19,90 431,61
7 21,60 426,85
8 24,20 424,5
9 26,00 414,04
10 28,60 409,14
11 30,30 407,97
12 1813,969025 169,33

Слика 10. Резултати теста перформанси - ред 12 је за 1.7Tb базу података

I na grafikonu:

![Firebird performanse 1813Gb (1.7Tb)](/images/performance/perf7_performance_with 1800Gb_Firebird_database.png)

Slika 11. Performanse, tačka #12 je za bazu od 1.7Tb

Rezultat potvrđuje da postoji sporo i stabilno opadanje performansi u Firebird-u - dok je veličina baze porasla 60 puta (sa 30Gb na 1813Gb), gubitak performansi je bio 2.4 puta (sa 407 na 169 poena).

Nije česta situacija kada baza (na istom jeftinijem hardveru) poraste sa 30Gb na 1.7tb, ali Firebird će raditi čak i u ovoj situaciji.

Velika baza u detaljima

Da bismo bolje razumeli bazu od 1.7Tb, prikupili smo statistiku baze za Mr.Big bazu i analizirali je u IBAnalyst:

Firebird 1813Gb (1.7Tb) u IBAnalyst

Slika 12. Tabele baze od 1.7Tb u IBAnalyst

Kao što možete videti, postoje 2 velike tabele - ORDER_LINE (~600 Gb) sa 6.3 milijardi zapisa i STOCK (~GB680) sa 2.1 milijarde zapisa.

I, za ove tabele postoje 2 indeksa sa dubinom = 4 - to znači da svaki zahtev čini 4 čitanja stranica indeksa pre stvarnog čitanja podataka. ORDER_LINE_PK indeks ima veličinu od 50Gb.

Firebird indeksi za bazu od 1813Gb (1.7Tb) u IBAnalyst

Slika 13. Indeksi Firebird baze od 1.7Tb

Uprkos ogromnom broju zapisa, statistika baze izgleda dobro, tako da nije iznenađujuće što Firebird pokazuje prilično dobre rezultate čak i za veliku bazu na jeftinijem hardveru.

Testiranje Firebird-a sa SSD diskom

Nakon završetka serije Firebird testova na jeftinijem hardveru, odlučili smo da proverimo kakvi će biti rezultati na drugom kraju tehnologije skladištenja podataka i instalirali smo SSD disk na isti server.

Instalirali smo SSD disk Plextor PX-256M M5 Pro i pokrenuli istu seriju testova (osim baze od 1.7Tb), sa istim podešavanjima. Rezultati su dodati na grafikone sa SATA uređajima, pogledajte ih ispod.

Učitavanje

Kao što možete videti, vreme učitavanja na SSD-u je isto kao na SATA-u. Ovo je očekivani rezultat: brzina sekvencijalnih operacija upisa je skoro ista na SATA i SSD diskovima.

Firebird učitavanje na SSD disku

Slika 14. Učitavanje na SSD i SATA

Performanse

Pogledajte rezultate performansi:

Firebird SQL performanse učitavanja na SSD disku

Slika 15. Performanse na SSD i SATA

Kao što možete videti, performanse sa nasumičnim IO operacijama pokazuju ~8x bolje rezultate za SSD disk. Znali smo iz našeg iskustva sa bazama kupaca da je SSD 30-50% brži sa aplikacijama u stvarnom svetu, ali povećanje od 8x je veoma visoko.

Međutim, ovaj test je veštački i posebno dizajniran da simulira operacije sa visokim opterećenjem OLTP-a, sa mnogo ažuriranja/brisanja, ali bez velikih preuzimanja. Uobičajena aplikacija za baze podataka ne radi u ovom režimu sve vreme. To objašnjava zašto SSD pokazuje tako visoke rezultate u ovom konkretnom slučaju.

Sažetak

Dakle, šta smo naučili iz ovih testova?

Pre svega - performanse Firebird-a nemaju velika opadanja povezana sa nekim ograničenjem veličine. Na istom hardveru performanse će se polako smanjivati sa rastom veličine baze. Takvo opadanje performansi može se kompenzovati podešavanjem konfiguracije Firebird-a ili pametnom nadogradnjom hardvera.

Dobro je mesto da pomenemo da IBSurgeon nudi uslugu optimizacije performansi Firebird-a - koristeći eksperimentalne podatke koje smo prikupili iz ovakvih testova, možemo značajno povećati performanse Firebird i InterBase baza podataka.

Zatim, znali smo da će čak i veoma velike Firebird baze (1.7 terabajta) raditi na jeftinijem hardveru sa značajnim, ali prihvatljivim gubitkom performansi.

I treće, SSD je zaista dobar za OLTP aplikacije. Verovatno je to najjeftiniji način da se nadograde performanse baze u ovom trenutku. Naravno, korišćenje SSD-a neće rešiti probleme sa lošim planovima upita i neefikasnim indeksima, ali može podići performanse uopšte.

Nastaviće se: Više detalja o Firebird bazi od 1.7 terabajta.