Delphi 2 and Informix : sloooooooow !!!!!

Delphi 2 and Informix : sloooooooow !!!!!

Post by Michel CUR » Thu, 06 Feb 1997 04:00:00



Hi ,

I have problems with Delphi 2.01 C/S and Informix(SE version 5)
using SQL Links 3.5 and I-Connect 7.2 : queries with params are
very very slow

1) with Query1 do
     begin
      Close;
      SQL.Clear;
      SQL.Add('select * from malade where num_malade = "127472" ');
      SQL.Open;
     end;
  answer : immediatly
2) num_malade := '127472';// num_malade is the primary key
   with Query1 do
     begin
      Close;
      SQL.Clear;
      SQL.Add('select * from malade where num_malade = :num_malade ');
      Params[0].AsString  := num_malade;
                      ou  := '127472';
      SQL.Open;
     end;
  answer : after 2 or 3 minutes !!!

This problem does not exit with Delphi-1 using SQL Links 16 bits and
Informix-Net (16 bits) and exactly the same program.

Thanks for help
Merci pour toute aide

michel .

--------------------------------------------
Dr. Michel CURE
Dpartement d'Information Mdicale
ASSOCIATION HOSPITALIERE DU BASSIN DE LONGWY
54350 Mont-Saint-Martin (FRANCE)

 
 
 

Delphi 2 and Informix : sloooooooow !!!!!

Post by BESSO » Thu, 06 Feb 1997 04:00:00




> Hi ,

> I have problems with Delphi 2.01 C/S and Informix(SE version 5)
> using SQL Links 3.5 and I-Connect 7.2 : queries with params are
> very very slow

> 1) with Query1 do
>      begin
>       Close;
>       SQL.Clear;
>       SQL.Add('select * from malade where num_malade = "127472" ');
>       SQL.Open;
>      end;
>   answer : immediatly
> 2) num_malade := '127472';// num_malade is the primary key
>    with Query1 do
>      begin
>       Close;
>       SQL.Clear;
>       SQL.Add('select * from malade where num_malade = :num_malade ');
>       Params[0].AsString  := num_malade;
>                       ou  := '127472';
>       SQL.Open;
>      end;
>   answer : after 2 or 3 minutes !!!

> This problem does not exit with Delphi-1 using SQL Links 16 bits and
> Informix-Net (16 bits) and exactly the same program.

> Thanks for help
> Merci pour toute aide

> michel .

> --------------------------------------------
> Dr. Michel CURE
> Dpartement d'Information Mdicale
> ASSOCIATION HOSPITALIERE DU BASSIN DE LONGWY
> 54350 Mont-Saint-Martin (FRANCE)

> *********************************************

Bonjour Monsieur,

Je suis un utilisateur nouveau de Delphi, et j'ai commence par l'approche
de Delphi16. Concernant votre type de probleme sachez que pour augmenter
les performances d'une requete parametree vous devriez requerir a la
methode Prepare. (voir le Guide du developpeur d'applications de bases de
donnees dont je vais vous donner quelques lignes qui pourront, je l'espere,
vous aider)

La methode Prepare envoie une requete parametree au moteur de base de
donnees pour que celui-ci l'analyse et l'optimise. Il est vivement
conseille de preparer la requete car cela augmente les performances des
requetes dynamiques qui seront executees plus d'une fois.

OBSERVATIONS
1.Si une requete  a ete executee, une application doit appeler Close avant
d'appeler Prepare a nouveau.
2.Generalement, une application doit appeler Prepare une fois, par exemple
dans un evenement OnCreate de la fiche, puis initialiser les parametres
avec la propriete Params et finalement appeler Open ou ExecSQL pour
executer la requete.
2.A chaque fois que la requete doit etre executee avec differentes valeurs
de parametres, une application doit appeler Close, initialiser les valeurs
des parametres, puis executer la requete avec Open ou ExecSQL.

REMARQUES
La preparation d'une requete consomme quelques ressources de base de
donnees. C'est donc une bonne habitude de depreparer une requete lorsqu'on
ne l'utilise plus. La methode Unprepare deprepare une requete.
Lorsque vous changez le texte d'une requete au moment de l'execution,
Delphi ferme et deprepare automatiquement une requete.

ESSAYEZ ca              ;-)
1.Preparez la requete dans l'evenement OnCreate de la fiche

procedure TForm1.FormCreate(Sender: TObject);
begin
        Query1.Prepare;
end;
2.Definissez les parametres en reponse a un evenement. Par exemple dans
l'evenement OnClick d'un "Button1" puis utilisez le contenu d'Edit1.Text
comme parametre de substitution:

procedure TForm1.Button1Click(Sender: TObject);
begin
        Query1.Close;
        Query1.Params[0].AsString := Edit1.Text;
        Query1.Open;
end;

PS      Il ne vous reste peut-etre qu'a changer en fonction de vos besoins.
Good luck !!!

 
 
 

Delphi 2 and Informix : sloooooooow !!!!!

Post by Jurgen Coetsier » Fri, 07 Feb 1997 04:00:00


Quote:> PS      Il ne vous reste peut-etre qu'a changer en fonction de vos besoins.
> Good luck !!!

Please remember that French isn't the only language used in the world.
There are others out there (quite remarkeable isn't it) who don't speak
french and that might be interested in your solution. So next time,
speak English.
You wouldn't want me to speak dutch: Je zou er toch geen bal van
begrijpen.

Merci bien de comprendre!!!

--
Jurgen Coetsiers    |Tel: + 32 2 773 28 44         _/_/_/ _/_/_/ _/_/_/
Technical Consultant|Fax: + 32 2 762 73 59            _/ _/     _/  _/
Computer Associates |priv.: Waverstraat 2A           _/ _/     _/  _/
Woluwedal 34, bus 13|       B-9310 Moorsel          _/ _/     _/  _/
1200 Brussels       |     + 32 53 70 35 04         _/ _/     _/  _/

(Opinion expressed here are mine only)

 
 
 

Delphi 2 and Informix : sloooooooow !!!!!

Post by Danny Hei » Fri, 07 Feb 1997 04:00:00


You can regard this as a "bug" in Informix 5 caused by the following fact :

If the Informix 5 query parser receives a string value to compare with a
numerical field in a where clause, it will convert that string value (although
it is a constant) to a number before comparing on every row that is processed.
This conversion seems to be "somewhat" inefficient. You can try it out in
"dbaccess" too.

The Informix 7 parser is not so dumb and will convert the string value to a
number only once.

It seems that the 16 bit version of Delphi is smart enough to convert your
string parameter to a number before passing it on to I-Net.

At least that is what I think it is.

Danny Heijl.
---


AT WORK :      | HOME :
---------------------------------
Danny Heijl    |
CEVI VZW       | Danny Heijl
Bisdomplein 3  | Winterstraat 4
9000 Gent      | 9000 Gent
Belgium        | Belgium
---------------------------------

 
 
 

1. Level 0 Archive Sloooooooow

I'm looking for ideas on where to look for the source of my performance
problem with tbtape.  I have two HP9000/700's with OnLine 5.03 UC1 and
am running a level 0 archive on both of them today.  The slower model 750
with 3 Gbytes of data and a heavy system load finished after 4 hrs, 50 mins.

The "faster" 735 with 2 Gbytes of data and a lighter system load is still
going after 8+ hours and according to the output of tbtape is only "12
percent done."  

The two systems are pretty equivalent with HP Raids (set for "0,1"),
and DAT tape drives.  Informix tape block size from tbstat -c on both is:

        TAPEBLK         64              # Archive tape block size (Kbytes)

I'm running GLANCE which shows tbtape CPU util at an average of 1% with
about 10 - 15 disc I/O's per second.  The CPU is usually only 30% busy.

Surely, it could plod along a little faster than this.  Any ideas?

-Ken Miles
Vancouver Division

2. Plz help newbie pick right package

3. Delphi...Delphi....Delphi - New Delphi Site

4. connecting with PC databases

5. Delphi:Paradox vs Delphi:SQL Anywhere vs Delphi:FoxPro via Apollo

6. Newbie: What's needed to get started

7. Problems with compiling of DBBrowser demo (Delphi 1.0) in Delphi 2.0 and Delphi 3

8. One for the experts!