Continut articol

In acest studiu, ne-am propus sa evaluam, folosind un mediu de test comun diferenta de performante in exploatarea bazelor de date, atunci cand acestea folosesc versiunile pe 32 si 64 de biti ale serverului SQL Firebird. 

Mediul de testare

In cadrul studiului am inlocuit in cele doua variante de test doar serverul SQL instalat, efectuand mai intai testul pe versiunea de 32bit apoi, am dezinstalat serverul si am reinstalat pe acelasi sistem versiunea pe 64 de biti.

Serverul Firebird folosit a fost versiunea stabila curenta 2.5.1, aflata in exploatare si in cadrul programelor noastre. Serverul a fost instalat in varianta Superserver (multithreading) in ambele versiuni, 32 si 64 bit, folosind kit-ul de instalare public de pe firebird.org.

Am utilizat in ambele variante de testare aceeasi baza de date, cu o dimensiune a fisierului FDB de 1,93GB, dupa efectuarea operatiilor de back-up si restore (o baza de date cu aproximativ doi ani de activitate dintr-un supermarket real).

Am pastrat de fiecare data acelasi software client pentru operatiile de insert, update si select, ruland pe un sistem PC separat, avand instalat sistemul de operare Windows XP Professional SP3, cu o configuratie mediocra (Intel Core Duo, 2Gb RAM). Comenzile SQL au fost executate printr-o retea Gigabit LAN, pe serverul pe care au fost instalate versiunile 32 si 64 bit Firebird.

Serverul de test este un sistem Intel Xeon E5530, cu 2 procesoare la 2,4Ghz, cu un total de 8×2=16 nuclee si memorie RAM instalata de 50Gb, ruland un sistem de operare Windows 2008 R2 Server Enterprise 64bit. Vezi mai jos o captura dupa Task Manager pe server.

Testele efectuate

Ne-am propus sa punem la treaba cele doua versiuni ale serverului Firebird, folosind un volum de date suficient, in toate cele 3 moduri normale de lucru pentru un server SQL si anume operatii de SELECT, INSERT si UPDATE. Fiecare test, pentru fiecare tip de operatie in parte a fost repetat de 10 ori consecutiv, inregistrand timpii de executie si volumul de date transferat.

Au fost inregistrati defalcat timpii de executie pentru toate cele 3 stagii ale unei operatii SQL si anume: PREPARE, EXECUTE, FETCH. Graficele obtinute s-au realizat insumand cei 3 timpi, ca interval total de timp scurs de la lansarea comenzii pana la primirea integrala a raspunsului de la server. S-a inregistrat de asemenea si volumul de memorie consumata dupa fiecare executare.

In cadrul operatiilor de SELECT au fost citite in medie 16.316.844 inregistrari.

Pentru operatiile de INSERT s-au folosit secvente SQL care au inserat aproximativ 6.500 linii diferite.

Operatiile de UPDATE au fost aplicate pe un numar mediu de 350.820 inregistrari inregistrand simultan si 383.097 citiri.

Rezultatele testului

Rezultatele testelor, efectuate in luna septembrie 2012, de catre colega noastra Andreea Ilie, careia ii multumim frumos pentru meticulozitate, sunt sistematizate in urmatoarele tabele comparative, pe operatii.

Prelucrarea rezultatelor

Pentru o relevanta mai mare si usurinta in interpretare, rezultatele inregistrate au fost prelucrate in urmatoarele grafice comparative.

Se observa la operatiile de citire de inregistrari din baza de date folosind comenzi SELECT, o imbunatatire medie a timpului de intoarcere a rezultatelor de aproximativ 14,58%, in favoarea versiune pe 64 de biti.

Pe langa viteza ceva mai mare de raspuns insa, se observa un comportament extrem de liniar al versiunii Firebird pe 64biti in raport cu cea pe 32. Practic, dupa prima rulare, ocazie cu care cache-ul serverului a fost populat, toate celelalte interogari succesive au primit raspunsul aproximativ in acelasi timp. Prin comparatie, in comportamentul versiunii pe 32 de biti au fost extrem de multe neliniaritati, ceea ce semaleaza un management mult mai slab al memoriei la nivelul serverului, fapt ce a dus la fluctuatii mari ale timpului de raspuns de la o interogare la alta.

In concluzie, ar trebui sa ne asteptam ca in varianta pe 64 de biti Firebird SQL sa furnizeze rezultatele mult mai constant, fara gatuiri de viteza, per ansamblu putin mai rapid decat versiunea pe 32 de biti.

In cazul operatiilor de scriere in baza de date, efectuate cu comenzi de tipul INSERT, versiunea pe Firebird pe 64 de biti a avut un avans mediu mai mic, de 6,34% inaintea versiunii pe 32 de biti. La fel ca in cazul operatiilor de citire si operatiile de scriere au inregistrat fluctuatii relativ mari de viteza de la o executie la alta in cazul versiunii pe 32 de biti, spre deosebire de cea pe 64 de biti care s-a comportat mult mai uniform. Acest fapt indica o gestionarea mai ineficienta a memoriei la versiunea Firebird 32bit in raport cu cea pe 64 de biti.

Deoarece insa, in cazul scrierii de date, operatiunile majoritare sunt cele legate de subsistemul IO – HDD si mai putin de memoria serverului si diferentele inregistrate sunt mai reduse, viteza de raspuns fiind limitata fizic de cea de scriere pe disk. In acest caz diferenta de platforma pe 64 de biti nu mai este atat de relevanta.

Surpriza a venit insa in cazul operatiilor de actualizare a unor inregistrari existente folosind comenzi UPDATE. In cazul acestor operatii ambele versiuni, atat cea pe 64 cat si cea pe 32 de biti s-au comportat identic, atat ca variatie de la o executie la alta cat si ca timp de raspuns efectiv. Am verificat de doua ori rezultatele pentru a fi siguri.

O posibila explicatie poate consta in efectuarea, in cazul acestei operatii a unui numar de citiri aproape egal cu cel de scrieri, fapt care nu a mai permis serverului sa folosesca eficient memoria cache de executie. Astfel incat ambele variante au lucrat practic fara sa optimizeze prea mult si fara sa folosesca resursele de calcul suplimentare in cazul versiunii Firebird SQL 64 bit.

Concluzile finale ale testului

Motivul pentru care am dorit sa efectuam acest test este acela de a analiza oportunitatea migrarii clientilor nostri de pe platformele curente Firebird SQL Server 32bit catre versiunea Firebird SQL Server 64bit si castigul de performanta pentru acestia in urma unui upgrade.

Concluziile noastre sunt destul de pozitive, indicand un evident castig de viteza mai ales in cazul citirilor, adica pentru operatiile executate in 70% din timp intr-o aplicatie clasica de baze de date.

Nici la scrierea de date noi in baza castigul nu este de lepadat, mai ales in cazul operatiilor de sriere de multiple inregistrari in secvente tranzactionale unice.

Actualizarea inregistrarilor existente nu va beneficia insa de un spor de performanta la trecerea pe 64 de biti.

Ce ne-a bucurat insa cel mai mult, este comportamentul extrem de constant in timp al versiunii pe 64 de biti. Acest lucru va aduce cu siguranta un confort sporit in exploatarea programelor conectate la serverul SQL. Vor disparea probabil gatuirile sesizate cateodata in raspunsul serverului curent pe 32 de biti, durata uneori extrem de diferita in care serverul intoarce rezultatul la interogari similare succesive.

In concluzie, vom recomanda calduros versiunea Firebird SQL Server pe 64 de biti tuturor clientilor nostri care exploateaza baze de date mari, folosind servere dedicate, cu un numar ridicat de inregistrari, de tip supermarket, unde la aceeasi baza de date se conecteaza mai multi utilizatori simultan.

Versiunea Firebird SQL Server pe 32 de biti va ramane insa o varianta  demna de toata lauda pentru o mare varietate de utilizari, in instalari locale, pe acelasi sistem cu aplicatia client sau pentru implementari in magazine mici sau mijlocii cu doar cativa utilizatori conectati simultan la baza de date. Isi va face cu siguranta datoria si de acum inainte asa cum a facut-o in cei 10 ani de existenta de la Firebird 1.0 pana astazi.