#24224: sqlmigrate is slow
-------------------------------------+-------------------------------------
     Reporter:  TorstenRottmann      |                    Owner:  nobody
         Type:                       |                   Status:  new
  Cleanup/optimization               |
    Component:  Migrations           |                  Version:  1.7
     Severity:  Normal               |               Resolution:
     Keywords:  migration slow       |             Triage Stage:
                                     |  Unreviewed
    Has patch:  0                    |      Needs documentation:  0
  Needs tests:  0                    |  Patch needs improvement:  0
Easy pickings:  0                    |                    UI/UX:  0
-------------------------------------+-------------------------------------
Description changed by TorstenRottmann:

Old description:

> When requesting an '''sqlmigrate''' (or when do a '''test''' or
> '''migrate''' also), it takes a very long time to compute the sql for a
> particular app migration. This app has some 78 models and is highly
> interconnected with ForeignKeys (100+).[[BR]]
>
> I ran the '''sqlmigrate''' through the profiler an got these
> results:[[BR]]
>
> {{{
>          74628418 function calls (74229555 primitive calls) in 3653.843
> seconds
>
>    Ordered by: internal time
>
>    ncalls  tottime  percall  cumtime  percall filename:lineno(function)
>         4 3519.805  879.951 3519.805  879.951 {method 'write' of 'file'
> objects}
>    552977   18.609    0.000   29.893    0.000
> __init__.py:292(deconstruct)
>     40096   14.244    0.000   20.051    0.001
> related.py:276(swappable_setting)
>    318698   11.924    0.000   21.114    0.000 __init__.py:1011(__init__)
>    575182    9.569    0.000   12.634    0.000 __init__.py:123(__init__)
>    571729    7.336    0.000   97.027    0.000
> state.py:277(construct_fields)
> 16773896/16722010    6.750    0.000    6.790    0.000 {getattr}
>     85138    2.849    0.000    4.883    0.000 __init__.py:1092(__init__)
> 553122/553106    2.546    0.000    6.503    0.000 {__import__}
> 637429/318719    1.916    0.000    2.146    0.000
> deconstruct.py:15(__new__)
>   3236790    1.912    0.000    1.912    0.000 {method 'startswith' of
> 'unicode' objects}
> 3881367/3881365    1.891    0.000    4.462    0.000 {isinstance}
>   5915601    1.566    0.000    1.841    0.000 options.py:283(_swapped)
>     43868    1.525    0.000    1.525    0.000
> base.py:33(subclass_exception)
>    901715    1.508    0.000    2.571    0.000
> abc.py:128(__instancecheck__)
> 21946/19820    1.486    0.000   24.646    0.001 base.py:61(__new__)
> ...
> }}}
>
> Waiting more than a minute for a test to start is very annoying ...

New description:

 When requesting an '''sqlmigrate''' (or when doing a '''test''' or
 '''migrate''' also), it takes a very long time to compute the sql for a
 particular app migration. This app has some 78 models and is highly
 interconnected with ForeignKeys (100+).[[BR]]

 I ran the '''sqlmigrate''' through the profiler an got these
 results:[[BR]]

 {{{
          74628367 function calls (74229507 primitive calls) in 132.448
 seconds

    Ordered by: internal time

    ncalls  tottime  percall  cumtime  percall filename:lineno(function)
    552977   18.515    0.000   29.690    0.000 __init__.py:292(deconstruct)
     40096   14.144    0.000   19.827    0.000
 related.py:276(swappable_setting)
    318698   11.825    0.000   20.907    0.000 __init__.py:1011(__init__)
    575182    9.425    0.000   12.465    0.000 __init__.py:123(__init__)
    571729    7.252    0.000   96.117    0.000
 state.py:277(construct_fields)
 16773892/16722006    6.668    0.000    6.707    0.000 {getattr}
     85138    2.822    0.000    4.825    0.000 __init__.py:1092(__init__)
 553122/553106    2.799    0.000    6.470    0.000 {__import__}
 637429/318719    1.908    0.000    2.137    0.000
 deconstruct.py:15(__new__)
   3236790    1.900    0.000    1.900    0.000 {method 'startswith' of
 'unicode' objects}
 3881364/3881362    1.884    0.000    4.418    0.000 {isinstance}
   5915601    1.548    0.000    1.812    0.000 options.py:283(_swapped)
     43868    1.507    0.000    1.507    0.000
 base.py:33(subclass_exception)
    901714    1.491    0.000    2.534    0.000
 abc.py:128(__instancecheck__)
 21946/19820    1.472    0.000   24.363    0.001 base.py:61(__new__)
   2395625    1.467    0.000    1.467    0.000 {hasattr}
  11291797    1.448    0.000    1.460    0.000 {method 'get' of 'dict'
 objects}
    298364    1.394    0.000    6.343    0.000
 __init__.py:572(contribute_to_class)
 553078/553076    1.375    0.000    8.543    0.000
 __init__.py:20(import_module)
 ...
 }}}

 Waiting more than a minute for a test to start is very annoying ...

--

--
Ticket URL: <https://code.djangoproject.com/ticket/24224#comment:2>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/073.776e5e88148c7d094a887b583878fd8d%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to