Inefficient memory usage and speed of SIMILAR TO when handling long text BLOB 
------------------------------------------------------------------------------

                 Key: CORE-3773
                 URL: http://tracker.firebirdsql.org/browse/CORE-3773
             Project: Firebird Core
          Issue Type: Task
    Affects Versions: 2.5.1
            Reporter: Pavel Zotov


Consider the following task: a very long text (blob) have to be compared with 
some pattern via SIMILAR TO.
The pattern can be very simple, even single character.

On my PC with 1 Gb the following test will fail after blob exceeds *EXACTLY*  8 
Mb of length:
----------------------
SQL> show version;
ISQL Version: WI-V2.5.2.26390 Firebird 2.5
Server version:
Firebird/x86/Windows NT (access method), version "WI-V2.5.2.26426 Firebird 2.5"
Firebird/x86/Windows NT (remote server), version "WI-V2.5.2.26426 Firebird 
2.5/XNet (BALAHA)/P12"
Firebird/x86/Windows NT (remote interface), version "WI-V2.5.2.26390 Firebird 
2.5/XNet (BALAHA)/P12"
on disk structure version 11.2
---------------------

recreate table tmpnum(id int);
recreate table tb(id int not null, s blob);
commit;
set term ^;
execute block as
declare n int = 999;
declare n0 int;
declare x blob;
begin
  n0=n;
  while (n>=0) do begin
    insert into tmpnum(id) values(:n);
    n=n-1;
  end
  x=(select list( replace(uuid_to_char(gen_uuid()),'-','') ) from tmpnum t1, 
tmpnum t2 where t1.id*1000+t2.id < 254200 );
  insert into tb values(1, :x);
  delete from tmpnum;
end^
set term ;^
commit;
drop table tmpnum;
commit;
select char_length(s) bLen, cast(char_length(s) as double precision)/1024/1024 
mbLen from tb;
commit;
select iif( s similar to '%'||cast(left(s,1) as varchar(1))||'%', 1, 0) 
is_matched from tb; rollback;

If I replace 'magic number' 254200 with 254201 the following error will be:

  IS_MATCHED
============
Statement failed, SQLSTATE = HY001
unable to allocate memory from operating system
After line 34 in file filblob

But I have about 700 Mb free memory.

----------------------------------------------------------------------------------------------------------------------------------------------------------
When I run the same test on linux-server with 48 Gb RAM then this limit is much 
greater.
So I have increased the size of blob up to ~315 Mb
I could not etsablish the limit like it was in my PC becase segfault occured 
and core dumped.

Database file is about 350 Mb:
ls -la t.fdb
-rw-rw---- 1 firebird firebird 374865920 Feb 25 14:21 t.fdb

This is the testcase for LINUX:
---------------------
SQL> show version;
ISQL Version: LI-V2.5.2.26390 Firebird 2.5
Server version:
Firebird/linux AMD64 (access method), version "LI-V2.5.2.26390 Firebird 2.5"
on disk structure version 11.2
---------------------
recreate table tmpnum(id int);
recreate table tb(id int not null, s blob);
commit;
set term ^;
execute block as
declare n int = 9999;
declare n0 int;
declare x blob;
begin

  n0=n;
  while (n>=0) do begin
    insert into tmpnum(id) values(:n);
    n=n-1;
  end
  x=(select list( replace(uuid_to_char(gen_uuid()),'-','') ) from tmpnum t1, 
tmpnum t2 where t1.id*10000+t2.id < 10000000 );

  insert into tb values(1, :x);
  delete from tmpnum;
end^
set term ;^
commit; -- 5min
drop table tmpnum;
commit;
select char_length(s) bLen, cast(char_length(s) as double precision)/1024/1024 
mbLen from tb;
commit;
select iif( s similar to '%'||cast(left(s,1) as varchar(1))||'%', 1, 0) 
is_matched from tb; rollback;

And these line are from `top` utility - please note that memory consumption of 
isq is extremely huge:

top - 14:21:53 up 78 days,  4:56,  3 users,  load average: 1.30, 0.69, 0.42
Tasks: 278 total,   3 running, 275 sleeping,   0 stopped,   0 zombie
Cpu(s): 11.4%us,  5.3%sy,  0.0%ni, 67.9%id, 15.0%wa,  0.0%hi,  0.4%si,  0.0%st
Mem:  49548000k total, 49399092k used,   148908k free,     6304k buffers
Swap: 51367828k total,   602964k used, 50764864k free, 12856724k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 9923 firebird  20   0 40.9g  31g 6056 R 99.2 66.4   3:57.00 isql
   82 root      20   0     0    0    0 S 11.6  0.0   1:06.29 kswapd1

####################################################

[firebird@firebirdG ~]$ top
top - 14:23:11 up 78 days,  4:57,  3 users,  load average: 8.40, 3.19, 1.33
Tasks: 278 total,   2 running, 276 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.8%us, 10.7%sy,  0.0%ni, 64.9%id, 23.0%wa,  0.0%hi,  0.7%si,  0.0%st
Mem:  49548000k total, 49411152k used,   136848k free,     9584k buffers
Swap: 51367828k total,   724968k used, 50642860k free, 13152596k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
   81 root      20   0     0    0    0 D 24.6  0.0   1:02.23 kswapd0
 9923 firebird  20   0 40.9g  31g 6064 D 21.9 66.2   4:19.61 isql

####################################################


top - 14:26:09 up 78 days,  5:00,  3 users,  load average: 7.99, 5.26, 2.46
Tasks: 279 total,   1 running, 278 sleeping,   0 stopped,   0 zombie
Cpu(s):  1.1%us,  6.0%sy,  0.0%ni, 59.4%id, 33.2%wa,  0.0%hi,  0.4%si,  0.0%st
Mem:  49548000k total, 49404064k used,   143936k free,    19320k buffers
Swap: 51367828k total,  2581320k used, 48786508k free, 13678892k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 9923 firebird  20   0 40.9g  30g 5960 D 13.9 65.1   4:38.79 isql
 9276 root      20   0     0    0    0 S 11.9  0.0   1:39.96 vmware-rtc

-------------

PS. I can not understand why SIMILAR_TO continues even when matching is 
establish - please note that in these tests we must to find matching blob to 
the first character of *this* blob.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://tracker.firebirdsql.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

------------------------------------------------------------------------------
Virtualization & Cloud Management Using Capacity Planning
Cloud computing makes use of virtualization - but cloud computing 
also focuses on allowing computing to be delivered as a service.
http://www.accelacomm.com/jaw/sfnl/114/51521223/
Firebird-Devel mailing list, web interface at 
https://lists.sourceforge.net/lists/listinfo/firebird-devel

Reply via email to