Does anyone have experience setting QUALCOLS 2   According to the
documentation, this should speed up multi-user processing since it locks
rows instead of pages so that it doesn't impede other users.   (Does anyone
know if this would eliminate most of the "waiting" messages - in locked
queue or for resources?).  I did run into one problem with this setting
which is detailed below.  Are there any other things to consider when using
this setting?


I set Qualcols 2 and ran one of my apps.  Some parts ran considerably slower
than when Qualcols was set to 10.  I traced the program and found where it
seemed to be bogging down.  It was during an update of a relatively small
(1000 row) table.

To further test this, I did some tests to measure the time it took for an
update with Qualcols set to 2 vs 10.

I had a 1000 row table with NO indexes.  I selected data from the table and
then updated the table.  I measured the time to do this to 1/1000th of a
second.  In this test, there was only 1 row that fit the WHERE clause.

SEL col1 from Table1 where col2 = 91228

UPDATE Table1 SET col1 = 1 where col2 = 91228

Qualcols       SEL          UPDATE
------------      --------------    -------------
   10            0.000 sec     0.031 sec        (average times for several
runs)

     2            0.000 sec     0.650 sec

I then created an index on col2 and the update time dropped to 0.00 sec for
Both Qualcols 2 and 10

Even on a relatively small table (1000 rows), it took almost 21 times longer
for the update when Qualcols was set to 2 vs 10 and NO index on the table.
That difference disappeared when the table was indexed and you specified the
indexed col in the where clause.

It would appear that, with proper indexing, I can use Qualcols 2 in my app.
If this setting really does speed up multi-user processing, my clients would
be happy.  I am looking through my code to see if there are other similar
indexing problems as I stated above.

I also have STATICDB ON and FASTLOCK ON.

ps.  I measure the time to 1/1000 sec by SET TIME FOR 'HH:MM:SS.SSS' ;SET V
vSTime = .#TIME;   run the code to be timed  ;SET V vETime = .#TIME;SET V
vDiff = ((.vETime-.vSTime)/1000);WRI 'Run time:',.vDiff,'sec'

Frank Radice
[EMAIL PROTECTED]

     

Reply via email to