Dryákova abeceda - (B)loby
- Écrit par Jan Dryák
Bloby - load/unload datového typu TEXT
Pokud chceme provádět unload/load dat na tabulce, která obsahuje atribut (sloupeček) datového typu blob nebo text, operace se dá urychlit pomocí proměnné prostředí DBBLOBBUF. Nastavením proměnné DBBLOBBUF se při použití příkazu unload/load, například v dbaccess, alokuje pamětový buffer pro přenášené bloby. Bez proměnné DBBLOBBUF je každý blob přenášem pomocí souboru, což je pomalé. Například
export DBBLOBBUF=1024
alokuje 1MB buffer pro blob.
Tento návod, pocházející od Johna Millera z vývojového oddělení Informixu, jsem vyzkoušel, ale nenaměřil jsem žádný rozdíl mezi prostředím s proměnnou a bez a to ani pro unload ani pro load. Tak jsem buď něco udělal špatně nebo věc nefunguje. Zkoušeno na verzi 12.10.FC5.
Test proběhl na tabulce, obsahující 136 668 řádek:
create table lll_test
(
notice_id serial not null ,
notice_body text,
primary key (notice_id)
) ;
Zde je průběh testu:
./test_DBBLOBBUF.sh
unset DBBLOBBUF:
unload to lll_1.unl select * from lll_test;
Tue Sep 12 09:51:48 GMT 2017
Database selected.
136668 row(s) unloaded.
Database closed.
Tue Sep 12 09:51:58 GMT 2017
... doba unloadu = 10s
export DBBLOBBUF=2048
unload to lll_2.unl select * from lll_test;
Tue Sep 12 09:51:58 GMT 2017
Database selected.
136668 row(s) unloaded.
Database closed.
Tue Sep 12 09:52:08 GMT 2017
... doba unloadu = 10s, žádný rozdíl
Database selected.
Table dropped.
Table created.
Database closed.
unset DBBLOBBUF:
load from lll_1.unl insert into lll_test;
Tue Sep 12 09:52:08 GMT 2017
Database selected.
136668 row(s) loaded.
Database closed.
Tue Sep 12 09:52:29 GMT 2017
... doba loadu = 21s
Database selected.
Table dropped.
Table created.
Database closed.
DBBLOBBUF=2048
load from lll_1.unl insert into lll_test;
Tue Sep 12 09:52:30 GMT 2017
Database selected.
136668 row(s) loaded.
Database closed.
Tue Sep 12 09:52:50 GMT 2017
... doba loadu = 20s, opět téměř žádný rozdíl
- Podobne operace se simple blobem lze urychlit jeste dalsim zpusobem. Pomocne soubory se vytvari v adresari urcenem pomoci promenne DBTEMP. Pro zrychleni podobnych operaci je vhodne v systemu vytvorit ramdisk a pomoci promenne DBTEMP nasmerovat vytvareni docasnych souboru na tento ramdisk.
Napriklad na systemu AIX lze tohle provest pomoci prikazu:
mkramdisk 500M
mkfs -V jfs /dev/ramdisk0
mkdir /ramdisk
mount -V jfs -o nointegrity /dev/ramdisk0 /ramdisk
mkdir /ramdisk/informix
chown informix:informix /ramdisk/informix
chmod 777 /ramdisk/informix
Prikazy provedou vytvoreni device pro ramdisk o velikost 500MB, vytvori v tomto device filesystem a tento filesystem pripoji do systemu. Dale se v tomto filesystemu vytvori adresar informix. ktery je pristupny pro uzivatele informix, takze do nej muze zapisovat databazovy server bez problemu.
V prostredi uzivatele pak staci nastavit DBTEMP=/ramdisk/informix a vsechny pomocne soubory se pak budou vytvaret na ramdisku, cimz se provadeni operaci vyrazne zrychli.
Tentop ramdisk ma smysl na tzv velkych operacnich systemech, systemy linuxoveho typu vytvari docasne soubory v pameti, takze pouziti ramdisku neprinese viditene tak zrychleni, jako v pripade AIXu HP-UX nebo Oracle Solaris.
krut
Vous n'êtes pas autorisé à publier des commentaires.