<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Mon, Jun 15, 2015 at 6:29 AM, Michael Van Canneyt <span dir="ltr"><<a href="mailto:michael@freepascal.org" target="_blank">michael@freepascal.org</a>></span> wrote:<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">
On Sun, 14 Jun 2015, silvioprog wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hello,<br>
<br>
A few weeks ago, I took a look at the TSQLScript (that IMHO is a very nice class!) source, and I noticed that it seems slow for processing big files.<br>
<br>
I did some tests with this class. My SQL file: 90 MB, with CREATE TABLE, CREATE PROCEDURE, CREATE TRIGGER, ALTER TABLE, several INSERT INTO and more. Using the current TSQLScript<br>
implementation, the execution of this file is very slow, and the CPU/memory usage is extremely large(*), but after make some changes in the original TSQLScript source code, adapting it to<br>
use this[1] new class (recently applied in FCL), I got a significant difference, ie, the CPU/memory usage now is amazing less, increasing the performance +-80%. =) The answer to the<br>
significant gain is simple: using a textreader, the TSQLScript class read the SQL (from string, stream or file) by demanding (line by line, and using a low level byte reading too), instead<br>
of loading an entire file to a buffer in a stringlist.<br>
</blockquote>
<br></span>
I think you hit the stringlist performance limit with 90 mb =)<span class=""><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
So, after this explanation, what do you think about TSQLScript using textreader? I can send a patch showing this idea as a real implementation, of course, keeping the 'Script' as a<br>
stringlist, just adding a new property, called 'Source' and declared as 'TTextReader'.<br>
</blockquote>
<br></span>
I think this is a good idea.<span class=""><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
An observation: I suspect it has a small bug at this line[2]: the 'Directive' variable could break the loop skipping for the next line after its assignment. OK, if it is a bug, it is very<br>
easy to fix.<br>
</blockquote>
<br></span>
Please report it in the bugtracker.<span class=""><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
(*) In a specific case on a Linux server, the kernel killed my executable while importing my SQL file, see more details here[3].<br>
[1] <a href="http://bugs.freepascal.org/view.php?id=28075" rel="noreferrer" target="_blank">http://bugs.freepascal.org/view.php?id=28075</a><br>
[2] <a href="https://github.com/graemeg/freepascal/blob/master/packages/fcl-db/src/base/sqlscript.pp#L387" rel="noreferrer" target="_blank">https://github.com/graemeg/freepascal/blob/master/packages/fcl-db/src/base/sqlscript.pp#L387</a><br>
[3] <a href="http://unix.stackexchange.com/questions/136291/will-linux-start-killing-my-processes-without-asking-me-if-memory-gets-short" rel="noreferrer" target="_blank">http://unix.stackexchange.com/questions/136291/will-linux-start-killing-my-processes-without-asking-me-if-memory-gets-short</a><br>
</blockquote>
<br></span>
If you want, you can create a patch and put it in the bugtracker. Anything to improve performance is welcome.<span class="HOEnZb"><font color="#888888"><br>
<br>
Michael.</font></span></blockquote></div><div class="gmail_extra"><br></div><div class="gmail_extra"><br></div>Very nice, I'll do that ASAP. =)</div><div class="gmail_extra"><br></div><div class="gmail_extra">Thank you!<br clear="all"><div><br></div>-- <br><div class="gmail_signature">Silvio Clécio<br>My public projects - <a href="http://github.com/silvioprog" target="_blank">github.com/silvioprog</a></div>
</div></div>