Apparently not. Following are the logs when doing single request will all 
100 tables defined.

  14877 function calls (14855 primitive calls) in 0.117 seconds

   Ordered by: internal time, call count
   List reduced from 220 to 50 due to restriction <50>

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        8    0.025    0.003    0.025    0.003 
/home/www-data/lambda/gluon/restricted.py:190(compile2)
      102    0.017    0.000    0.031    0.000 
/home/www-data/lambda/gluon/dal.py:8025(__init__)
      596    0.012    0.000    0.015    0.000 
/home/www-data/lambda/gluon/dal.py:9100(__init__)
     1726    0.006    0.000    0.006    0.000 
/home/www-data/lambda/gluon/dal.py:8247(__getitem__)
     2242    0.005    0.000    0.007    0.000 
/home/www-data/lambda/gluon/dal.py:8317(__setattr__)
      520    0.005    0.000    0.015    0.000 
/home/www-data/lambda/gluon/dal.py:6620(sqlhtml_validators)
      101    0.004    0.000    0.063    0.001 
/home/www-data/lambda/gluon/dal.py:7658(lazy_define_table)
     1392    0.004    0.000    0.007    0.000 
/home/www-data/lambda/gluon/dal.py:8339(__iter__)
        1    0.003    0.003    0.091    0.091 
/home/www-data/lambda/applications/chat/models/db.py:1(<module>)
      101    0.003    0.000    0.066    0.001 
/home/www-data/lambda/gluon/dal.py:7628(define_table)
      695    0.003    0.000    0.003    0.000 
/home/www-data/lambda/gluon/dal.py:8288(__setitem__)
      101    0.003    0.000    0.007    0.000 
/home/www-data/lambda/gluon/dal.py:8198(_create_references)
      596    0.002    0.000    0.002    0.000 
/home/www-data/lambda/gluon/dal.py:5060(cleanup)
      151    0.002    0.000    0.002    0.000 
/home/www-data/lambda/gluon/custom_import.py:37(custom_importer)
       89    0.002    0.000    0.003    0.000 
/home/www-data/lambda/gluon/validators.py:450(__init__)
      102    0.002    0.000    0.002    0.000 
/home/www-data/lambda/gluon/dal.py:457(pluralize)
      181    0.001    0.000    0.004    0.000 
/home/www-data/lambda/gluon/languages.py:867(translate)
      160    0.001    0.000    0.007    0.000 
/home/www-data/lambda/gluon/validators.py:77(translate)
       82    0.001    0.000    0.004    0.000 
/home/www-data/lambda/gluon/validators.py:689(__init__)
      184    0.001    0.000    0.001    0.000 
/home/www-data/lambda/gluon/languages.py:338(__init__)
      181    0.001    0.000    0.005    0.000 
/home/www-data/lambda/gluon/languages.py:367(__str__)

Also if you see closely, there might be some slow down due to locking. Look 
at the following line taken from the log I had posted earlier.


       16217 function calls (16199 primitive calls) in 1.558 seconds

   Ordered by: internal time, call count
   List reduced from 188 to 50 due to restriction <50>

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
     1710    0.342    0.000    0.530    0.000 
/home/www-data/lambda/gluon/dal.py:8247(__getitem__)
       14    0.188    0.013    0.188    0.013 
/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py:97(nextset)
      183    0.152    0.001    0.152    0.001 
/usr/lib/python2.7/threading.py:146(acquire)
      366    0.131    0.000    0.132    0.000 
/usr/lib/python2.7/genericpath.py:38(isdir)
      102    0.107    0.001    0.241    0.002 
/home/www-data/lambda/gluon/dal.py:8025(__init__)
      595    0.102    0.000    0.556    0.001 
/home/www-data/lambda/gluon/dal.py:9100(__init__)
     2242    0.086    0.000    0.100    0.000 
/home/www-data/lambda/gluon/dal.py:8317(__setattr__)
      596    0.055    0.000    0.055    0.000 
/home/www-data/lambda/gluon/dal.py:5060(cleanup)
      379    0.052    0.000    0.052    0.000 
/usr/lib/python2.7/posixpath.py:68(join)
        3    0.048    0.016    0.048    0.016 
/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py:277(_do_query)
      101    0.038    0.000    0.681    0.007 
/home/www-data/lambda/gluon/dal.py:7658(lazy_define_table)
      101    0.036    0.000    0.073    0.001 
/home/www-data/lambda/gluon/dal.py:8198(_create_references)
      520    0.035    0.000    0.214    0.000 
/home/www-data/lambda/gluon/dal.py:6620(sqlhtml_validators)
      101    0.035    0.000    0.717    0.007 
/home/www-data/lambda/gluon/dal.py:7628(define_table)
        1    0.029    0.029    1.369    1.369 
/home/www-data/lambda/applications/chat/compiled/models/db.py:1(<module>)
      158    0.024    0.000    0.024    0.000 
/home/www-data/lambda/gluon/validators.py:2564(__init__)
     1384    0.015    0.000    0.138    0.000 
/home/www-data/lambda/gluon/dal.py:8339(__iter__)
      102    0.014    0.000    0.014    0.000 
/home/www-data/lambda/gluon/dal.py:457(pluralize)
      695    0.013    0.000    0.013    0.000 
/home/www-data/lambda/gluon/dal.py:8288(__setitem__)
      414    0.013    0.000    0.013    0.000 
/home/www-data/lambda/gluon/dal.py:7762(__getattr__)
       89    0.012    0.000    0.014    0.000 
/home/www-data/lambda/gluon/validators.py:450(__init__)
        6    0.005    0.001    0.005    0.001 
/usr/lib/python2.7/socket.py:223(meth)



On Monday, November 25, 2013 11:07:52 PM UTC+5:30, Anthony wrote:
>
> With 100 table definitions, even a single request will probably be 
> relatively slow. You might want to see if you can conditionally define your 
> tables depending on the controller/function called (you can set up 
> conditional model files or move the definitions to modules that get 
> imported and run when needed).
>
> Anthony
>
> On Monday, November 25, 2013 12:23:37 PM UTC-5, Saurabh Kumar wrote:
>>
>> The Web2py response slows down when faced with concurrent requests. On 
>> doing some profiling, I found out that this occurs because DAL start 
>> responding slowly. Here is the profile log, that confirms the same:
>>
>> root@replica:/home/www-data/lambda# python c.py  mod-20131125T164445.prof
>>          16217 function calls (16199 primitive calls) in 1.558 seconds
>>
>>    Ordered by: internal time, call count
>>    List reduced from 188 to 50 due to restriction <50>
>>
>>    ncalls  tottime  percall  cumtime  percall filename:lineno(function)
>>      1710    0.342    0.000    0.530    0.000 
>> /home/www-data/lambda/gluon/dal.py:8247(__getitem__)
>>        14    0.188    0.013    0.188    0.013 
>> /usr/lib/python2.7/dist-packages/MySQLdb/cursors.py:97(nextset)
>>       183    0.152    0.001    0.152    0.001 
>> /usr/lib/python2.7/threading.py:146(acquire)
>>       366    0.131    0.000    0.132    0.000 
>> /usr/lib/python2.7/genericpath.py:38(isdir)
>>       102    0.107    0.001    0.241    0.002 
>> /home/www-data/lambda/gluon/dal.py:8025(__init__)
>>       595    0.102    0.000    0.556    0.001 
>> /home/www-data/lambda/gluon/dal.py:9100(__init__)
>>      2242    0.086    0.000    0.100    0.000 
>> /home/www-data/lambda/gluon/dal.py:8317(__setattr__)
>>       596    0.055    0.000    0.055    0.000 
>> /home/www-data/lambda/gluon/dal.py:5060(cleanup)
>>       379    0.052    0.000    0.052    0.000 
>> /usr/lib/python2.7/posixpath.py:68(join)
>>         3    0.048    0.016    0.048    0.016 
>> /usr/lib/python2.7/dist-packages/MySQLdb/cursors.py:277(_do_query)
>>       101    0.038    0.000    0.681    0.007 
>> /home/www-data/lambda/gluon/dal.py:7658(lazy_define_table)
>>       101    0.036    0.000    0.073    0.001 
>> /home/www-data/lambda/gluon/dal.py:8198(_create_references)
>>       520    0.035    0.000    0.214    0.000 
>> /home/www-data/lambda/gluon/dal.py:6620(sqlhtml_validators)
>>       101    0.035    0.000    0.717    0.007 
>> /home/www-data/lambda/gluon/dal.py:7628(define_table)
>>         1    0.029    0.029    1.369    1.369 
>> /home/www-data/lambda/applications/chat/compiled/models/db.py:1(<module>)
>>       158    0.024    0.000    0.024    0.000 
>> /home/www-data/lambda/gluon/validators.py:2564(__init__)
>>      1384    0.015    0.000    0.138    0.000 
>> /home/www-data/lambda/gluon/dal.py:8339(__iter__)
>>       102    0.014    0.000    0.014    0.000 
>> /home/www-data/lambda/gluon/dal.py:457(pluralize)
>>       695    0.013    0.000    0.013    0.000 
>> /home/www-data/lambda/gluon/dal.py:8288(__setitem__)
>>       414    0.013    0.000    0.013    0.000 
>> /home/www-data/lambda/gluon/dal.py:7762(__getattr__)
>>        89    0.012    0.000    0.014    0.000 
>> /home/www-data/lambda/gluon/validators.py:450(__init__)
>>         6    0.005    0.001    0.005    0.001 
>> /usr/lib/python2.7/socket.py:223(meth)
>>
>>
>> To further confirm this, I removed most of the table definitions (~100) 
>> and kept just the auth_user table in db.py. This improved the response time 
>> significantly.
>>
>> Concurrency Level:      25
>> Time taken for tests:   2.150 seconds
>> Complete requests:      50
>> Failed requests:        0
>> Write errors:           0
>> Total transferred:      588512 bytes
>> HTML transferred:       567000 bytes
>> Requests per second:    23.25 [#/sec] (mean)
>> Time per request:       1075.173 [ms] (mean)
>> Time per request:       43.007 [ms] (mean, across all concurrent requests)
>> Transfer rate:          267.27 [Kbytes/sec] received
>>
>> Connection Times (ms)
>>               min  mean[+/-sd] median   max
>> Connect:        1    1   0.1      1       1
>> Processing:   291  901 296.5   1011    1230
>> Waiting:      288  899 296.4   1011    1230
>> Total:        292  902 296.5   1012    1232
>>
>> Percentage of the requests served within a certain time (ms)
>>   50%   1012
>>   66%   1103
>>   75%   1120
>>   80%   1140
>>   90%   1182
>>   95%   1229
>>   98%   1232
>>   99%   1232
>>  100%   1232 (longest request)
>>
>>
>> Earlier benchmark logs looked like
>>
>>
>> Concurrency Level:      25
>> Time taken for tests:   8.882 seconds
>> Complete requests:      50
>> Failed requests:        0
>> Write errors:           0
>> Total transferred:      588190 bytes
>> HTML transferred:       567000 bytes
>> Requests per second:    5.63 [#/sec] (mean)
>> Time per request:       4440.767 [ms] (mean)
>> Time per request:       177.631 [ms] (mean, across all concurrent 
>> requests)
>> Transfer rate:          64.67 [Kbytes/sec] received
>>
>> Connection Times (ms)
>>               min  mean[+/-sd] median   max
>> Connect:        1    1   0.7      1       6
>> Processing:  1883 4011 1211.9   3863    5865
>> Waiting:     1882 4008 1211.6   3856    5861
>> Total:       1884 4012 1211.9   3864    5867
>>
>> Percentage of the requests served within a certain time (ms)
>>   50%   3864
>>   66%   4845
>>   75%   5009
>>   80%   5165
>>   90%   5557
>>   95%   5748
>>   98%   5867
>>   99%   5867
>>  100%   5867 (longest request)
>>  
>> Any clues on what could be the cause of this? 
>>
>>

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to