Hi,
On one of my projects, I'm having processing time trouble to generate or
run migrations even for a single app, this can take up to 3 minutes, after
debugging I found that the function reload_model inside
django.db.migrations.state.py take a lot of time, and this one is called
when evaluating every migrations operation (AddField, AlterField ...)
The question is, I'm I supposed to have something wrong on my models or is
this a common behaviour of Django's migrations?
Here a stats from cProfile for the calls for realod_model method:
353318 function calls (352524 primitive calls) in 2.859 seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.000 0.000 <string>:8(__new__)
1 0.000 0.000 0.000 0.000 AES.py:55(__init__)
1 0.000 0.000 0.000 0.000 AES.py:61(new)
1 0.000 0.000 0.000 0.000 UserDict.py:26(clear)
31 0.001 0.000 0.005 0.000 __init__.py:1005(__init__)
31 0.000 0.000 0.014 0.000 __init__.py:1027(deconstruct)
155 0.005 0.000 0.025 0.000 __init__.py:1080(__init__)
250 0.003 0.000 0.047 0.000 __init__.py:112(__iter__)
138 0.002 0.000 0.020 0.000 __init__.py:1195(__init__)
138 0.002 0.000 0.057 0.000 __init__.py:1246(deconstruct)
138 0.005 0.000 0.039 0.000
__init__.py:1298(contribute_to_class)
693 0.053 0.000 0.087 0.000 __init__.py:137(__init__)
55 0.001 0.000 0.009 0.000 __init__.py:1502(__init__)
55 0.001 0.000 0.026 0.000 __init__.py:1582(deconstruct)
5 0.000 0.000 0.001 0.000 __init__.py:1707(__init__)
5 0.000 0.000 0.002 0.000 __init__.py:1712(deconstruct)
676 0.009 0.000 0.021 0.000 __init__.py:20(import_module)
2 0.000 0.000 0.000 0.000 __init__.py:2033(__init__)
2 0.000 0.000 0.001 0.000 __init__.py:2038(deconstruct)
4 0.000 0.000 0.001 0.000 __init__.py:2118(__init__)
4 0.000 0.000 0.001 0.000 __init__.py:2125(deconstruct)
249 0.007 0.000 0.011 0.000 __init__.py:22(<lambda>)
5 0.000 0.000 0.001 0.000 __init__.py:2310(__init__)
5 0.000 0.000 0.002 0.000 __init__.py:2314(deconstruct)
1 0.000 0.000 0.000 0.000 __init__.py:233(__len__)
2 0.000 0.000 0.000 0.000 __init__.py:245(__bool__)
70 0.001 0.000 0.003 0.000 __init__.py:35(__getattr__)
1 0.000 0.000 0.000 0.000 __init__.py:35(get_option)
35 0.001 0.000 0.008 0.000 __init__.py:352(__init__)
666 0.128 0.000 0.310 0.000 __init__.py:358(deconstruct)
70 0.001 0.000 0.035 0.000 __init__.py:369(deconstruct)
35 0.001 0.000 0.007 0.000 __init__.py:388(__init__)
35 0.000 0.000 0.019 0.001 __init__.py:403(deconstruct)
4 0.000 0.000 0.000 0.000 __init__.py:45(countries)
15 0.000 0.000 0.000 0.000 __init__.py:455(__eq__)
1801 0.014 0.000 0.021 0.000 __init__.py:46(__getattr__)
1761 0.011 0.000 0.019 0.000 __init__.py:461(__lt__)
158 0.001 0.000 0.001 0.000 __init__.py:528(validators)
1 0.000 0.000 0.000 0.000 __init__.py:64(configured)
693 0.007 0.000 0.019 0.000
__init__.py:647(set_attributes_from_name)
693 0.014 0.000 0.166 0.000
__init__.py:655(contribute_to_class)
598 0.002 0.000 0.002 0.000 __init__.py:666(get_attname)
598 0.007 0.000 0.009 0.000
__init__.py:669(get_attname_column)
95 0.001 0.000 0.001 0.000
__init__.py:674(get_cache_name)
249 0.002 0.000 0.022 0.000 __init__.py:83(ugettext)
693 0.006 0.000 0.034 0.000 __init__.py:854(_get_choices)
72 0.002 0.000 0.015 0.000 __init__.py:929(__init__)
63 0.001 0.000 0.032 0.001 __init__.py:951(deconstruct)
72 0.001 0.000 0.026 0.000
__init__.py:987(contribute_to_class)
73 0.003 0.000 0.007 0.000 _abcoll.py:526(update)
2271 0.015 0.000 0.015 0.000
_weakrefset.py:70(__contains__)
1432 0.021 0.000 0.040 0.000 abc.py:128(__instancecheck__)
73 0.001 0.000 0.001 0.000 abc.py:148(__subclasscheck__)
73 0.001 0.000 0.001 0.000 base.py:146(<genexpr>)
73 0.001 0.000 0.001 0.000 base.py:155(<genexpr>)
73 0.001 0.000 0.001 0.000 base.py:197(<setcomp>)
990/927 0.018 0.000 0.461 0.000 base.py:321(add_to_class)
73 0.006 0.000 0.117 0.002 base.py:328(_prepare)
757 0.002 0.000 0.002 0.000 base.py:361(<genexpr>)
146 0.013 0.000 0.013 0.000 base.py:44(subclass_exception)
73/64 0.021 0.000 1.762 0.028 base.py:72(__new__)
1 0.000 0.000 0.000 0.000
blockalgo.py:124(_getParameter)
1 0.000 0.000 0.000 0.000 blockalgo.py:136(__init__)
7245 0.175 0.000 0.306 0.000 collections.py:104(values)
73 0.005 0.000 0.014 0.000 collections.py:38(__init__)
146 0.001 0.000 0.001 0.000 collections.py:54(__setitem__)
146 0.001 0.000 0.001 0.000 collections.py:64(__delitem__)
38439 0.132 0.000 0.132 0.000 collections.py:73(__iter__)
1 0.000 0.000 0.000 0.000 conf.py:10(__getattribute__)
7053 0.024 0.000 0.024 0.000
config.py:143(check_models_ready)
2 0.000 0.000 0.000 0.000 config.py:151(get_model)
25524 0.232 0.000 0.535 0.000 config.py:164(get_models)
387 0.003 0.000 0.021 0.000 datastructures.py:486(__new__)
316/158 0.002 0.000 0.003 0.000 deconstruct.py:19(__new__)
75 0.001 0.000 0.001 0.000 dispatcher.py:14(_make_id)
73 0.007 0.000 0.044 0.001 dispatcher.py:166(send)
74 0.000 0.000 0.000 0.000
dispatcher.py:234(_clear_dead_receivers)
73 0.012 0.000 0.022 0.000
dispatcher.py:245(_live_receivers)
1 0.000 0.000 0.000 0.000 dispatcher.py:54(connect)
666 0.004 0.000 0.006 0.000
encoding.py:63(is_protected_type)
948 0.012 0.000 0.048 0.000 encoding.py:72(force_text)
1 0.000 0.000 0.000 0.000 fields.py:104(__init__)
1 0.000 0.000 0.000 0.000 fields.py:144(__init__)
1 0.000 0.000 0.000 0.000
fields.py:158(contribute_to_class)
1 0.000 0.000 0.048 0.048 fields.py:179(deconstruct)
2 0.000 0.000 0.000 0.000 fields.py:19(__init__)
1 0.000 0.000 0.000 0.000 fields.py:23(__init__)
1 0.000 0.000 0.000 0.000 fields.py:36(__init__)
1 0.000 0.000 0.000 0.000 fields.py:60(__init__)
3 0.000 0.000 0.000 0.000 files.py:170(__init__)
3 0.000 0.000 0.000 0.000 files.py:240(__init__)
3 0.000 0.000 0.001 0.000 files.py:284(deconstruct)
3 0.000 0.000 0.000 0.000
files.py:317(contribute_to_class)
1 0.000 0.000 0.000 0.000 files.py:390(__init__)
1 0.000 0.000 0.000 0.000 files.py:416(deconstruct)
1 0.000 0.000 0.000 0.000
files.py:424(contribute_to_class)
24 0.007 0.000 0.013 0.001
functional.py:102(__prepare_class__)
249 0.002 0.000 0.023 0.000 functional.py:139(__text_cast)
270 0.001 0.000 0.001 0.000 functional.py:14(curry)
24 0.000 0.000 0.014 0.001 functional.py:188(__wrapper__)
437/336 0.005 0.000 0.065 0.000 functional.py:56(__get__)
24 0.000 0.000 0.014 0.001 functional.py:89(__init__)
27 0.000 0.000 0.001 0.000 functools.py:56(<lambda>)
249 0.001 0.000 0.001 0.000 gettext.py:217(ugettext)
1 0.000 0.000 0.000 0.000 inspect.py:142(isfunction)
1 0.000 0.000 0.000 0.000 inspect.py:209(iscode)
1 0.000 0.000 0.000 0.000
inspect.py:47(func_accepts_kwargs)
990 0.007 0.000 0.012 0.000 inspect.py:59(isclass)
1 0.000 0.000 0.000 0.000 inspect.py:67(ismethod)
1 0.000 0.000 0.000 0.000 inspect.py:744(getargs)
1 0.000 0.000 0.000 0.000 inspect.py:804(getargspec)
74 0.002 0.000 0.012 0.000 lru_cache.py:160(cache_clear)
161 0.002 0.000 0.003 0.000 lru_cache.py:19(__init__)
282 0.001 0.000 0.001 0.000 lru_cache.py:23(__hash__)
161 0.004 0.000 0.009 0.000 lru_cache.py:26(_make_key)
161 0.005 0.000 0.759 0.005 lru_cache.py:94(wrapper)
73 0.004 0.000 0.019 0.000
manager.py:11(ensure_default_manager)
78 0.002 0.000 0.004 0.000
manager.py:157(contribute_to_class)
78 0.002 0.000 0.002 0.000
manager.py:179(_set_creation_counter)
718 0.002 0.000 0.002 0.000 manager.py:25(<genexpr>)
78 0.000 0.000 0.000 0.000 manager.py:250(__init__)
68 0.000 0.000 0.000 0.000 manager.py:253(__get__)
78 0.001 0.000 0.001 0.000 manager.py:62(__new__)
78 0.001 0.000 0.003 0.000 manager.py:68(__init__)
5 0.000 0.000 0.000 0.000 manager.py:83(deconstruct)
3 0.000 0.000 0.000 0.000 modelfields.py:25(__init__)
3 0.000 0.000 0.000 0.000 modelfields.py:46(__init__)
3 0.000 0.000 0.001 0.000
modelfields.py:68(contribute_to_class)
671 0.012 0.000 0.040 0.000
module_loading.py:15(import_string)
70 0.000 0.000 0.000 0.000
operations.py:194(max_name_length)
73 0.024 0.000 0.072 0.001
options.py:197(contribute_to_class)
73 0.001 0.000 0.006 0.000 options.py:252(_prepare)
693 0.015 0.000 0.099 0.000 options.py:289(add_field)
684 0.003 0.000 0.003 0.000 options.py:319(setup_pk)
34485 0.111 0.000 0.122 0.000 options.py:349(swapped)
73 0.002 0.000 0.034 0.000 options.py:375(fields)
693 0.002 0.000 0.002 0.000 options.py:392(<lambda>)
684 0.002 0.000 0.002 0.000 options.py:393(<lambda>)
684 0.002 0.000 0.003 0.000 options.py:394(<lambda>)
757 0.007 0.000 0.014 0.000 options.py:399(<genexpr>)
146 0.001 0.000 0.002 0.000
options.py:60(normalize_together)
1 0.003 0.003 0.026 0.026
options.py:672(_populate_directed_relation_graph)
285 0.002 0.000 0.004 0.000 options.py:688(<genexpr>)
1 0.000 0.000 0.026 0.026 options.py:707(_relation_tree)
10433 0.430 0.000 0.766 0.000 options.py:711(_expire_cache)
75 0.001 0.000 0.041 0.001 options.py:728(get_fields)
316/148 0.012 0.000 0.053 0.000 options.py:742(_get_fields)
18 0.000 0.000 0.000 0.000 options.py:75(<genexpr>)
3256 0.009 0.000 0.009 0.000 options.py:811(<genexpr>)
387 0.005 0.000 0.027 0.000
options.py:82(make_immutable_fields_list)
314 0.001 0.000 0.001 0.000 options.py:820(<genexpr>)
73 0.004 0.000 0.019 0.000 options.py:92(__init__)
73 0.001 0.000 0.001 0.000 re.py:251(_compile_repl)
73 0.001 0.000 0.002 0.000 re.py:271(_subx)
135 0.001 0.000 0.005 0.000 re.py:277(filter)
2 0.000 0.000 0.000 0.000
registry.py:119(check_apps_ready)
224 0.001 0.000 0.001 0.000
registry.py:126(check_models_ready)
2 0.000 0.000 0.000 0.000
registry.py:140(get_app_config)
121 0.134 0.001 0.742 0.006 registry.py:153(get_models)
2 0.000 0.000 0.000 0.000 registry.py:186(get_model)
73 0.019 0.000 0.069 0.001
registry.py:234(get_containing_app_config)
110 0.002 0.000 0.003 0.000
registry.py:255(get_registered_model)
74 0.055 0.001 1.201 0.016 registry.py:334(clear_cache)
101 0.001 0.000 0.001 0.000 related.py:107(related_model)
9 0.000 0.000 0.000 0.000 related.py:1151(__init__)
9 0.000 0.000 0.000 0.000 related.py:1209(__init__)
104 0.001 0.000 0.001 0.000 related.py:1272(__init__)
104 0.000 0.000 0.000 0.000 related.py:1300(related_model)
95 0.000 0.000 0.000 0.000 related.py:1352(is_hidden)
98 0.001 0.000 0.001 0.000
related.py:1372(get_accessor_name)
12 0.000 0.000 0.000 0.000
related.py:1394(get_cache_name)
95 0.004 0.000 0.005 0.000 related.py:1402(__init__)
95 0.001 0.000 0.001 0.000
related.py:1425(set_field_name)
12 0.000 0.000 0.003 0.000 related.py:1430(__init__)
9 0.000 0.000 0.000 0.000 related.py:1439(__init__)
18 0.000 0.000 0.000 0.000 related.py:1455(is_hidden)
95 0.002 0.000 0.018 0.000 related.py:1487(__init__)
77 0.004 0.000 0.491 0.006 related.py:1559(deconstruct)
95 0.003 0.000 0.056 0.001
related.py:1774(contribute_to_class)
95 0.004 0.000 0.007 0.000
related.py:1778(contribute_to_related_class)
95 0.006 0.000 0.031 0.000 related.py:1803(__init__)
77 0.002 0.000 0.494 0.006 related.py:1875(deconstruct)
95 0.001 0.000 0.001 0.000 related.py:1927(get_attname)
95 0.001 0.000 0.001 0.000
related.py:1930(get_attname_column)
95 0.001 0.000 0.008 0.000
related.py:1965(contribute_to_related_class)
12 0.001 0.000 0.008 0.001 related.py:2033(__init__)
12 0.000 0.000 0.072 0.006 related.py:2037(deconstruct)
9 0.001 0.000 0.162 0.018
related.py:2059(create_many_to_many_intermediary_model)
9 0.000 0.000 0.000 0.000 related.py:2066(set_managed)
9 0.001 0.000 0.002 0.000 related.py:2123(__init__)
9 0.000 0.000 0.058 0.006 related.py:2394(deconstruct)
9 0.000 0.000 0.001 0.000
related.py:2462(_get_m2m_db_table)
9 0.001 0.000 0.165 0.018
related.py:2529(contribute_to_class)
9 0.001 0.000 0.001 0.000
related.py:2567(contribute_to_related_class)
9 0.000 0.000 0.000 0.000
related.py:2585(set_attributes_from_rel)
104 0.005 0.000 0.054 0.001
related.py:293(contribute_to_class)
110 0.005 0.000 0.019 0.000
related.py:30(add_lazy_relation)
101 0.001 0.000 0.013 0.000
related.py:310(resolve_related_class)
86 0.106 0.001 0.509 0.006
related.py:317(swappable_setting)
95 0.001 0.000 0.001 0.000
related.py:341(set_attributes_from_rel)
104 0.001 0.000 0.012 0.000
related.py:354(do_related_class)
12 0.000 0.000 0.000 0.000 related.py:402(__init__)
95 0.001 0.000 0.002 0.000 related.py:526(__init__)
65 0.000 0.000 0.000 0.000 related.py:805(__init__)
73 0.001 0.000 0.007 0.000
related.py:89(do_pending_lookups)
511 0.005 0.000 0.007 0.000
signals.py:20(_resolve_references)
1 0.000 0.000 0.000 0.000 signals.py:33(connect)
135 0.002 0.000 0.004 0.000
sre_parse.py:790(expand_template)
1 0.001 0.001 2.798 2.798 state.py:256(render_multiple)
1 0.000 0.000 0.000 0.000
state.py:26(_get_app_label_and_model_name)
73 0.002 0.000 1.196 0.016 state.py:289(register_model)
73 0.001 0.000 0.002 0.000 state.py:297(unregister_model)
2 0.002 0.001 0.049 0.025
state.py:34(get_related_models_recursive)
75 0.005 0.000 0.047 0.001 state.py:45(_related_models)
730 0.025 0.000 1.017 0.001 state.py:492(construct_fields)
69 0.001 0.000 0.002 0.000
state.py:499(construct_managers)
5 0.000 0.000 0.000 0.000 state.py:502(<lambda>)
64 0.012 0.000 2.797 0.044 state.py:524(render)
155 0.001 0.000 0.002 0.000 state.py:533(<genexpr>)
1 0.001 0.001 2.859 2.859 state.py:97(_reload_model)
2 0.000 0.000 0.000 0.000 subclassing.py:35(__init__)
2 0.000 0.000 0.000 0.000
subclassing.py:56(contribute_to_class)
73 0.002 0.000 0.015 0.000
text.py:455(camel_case_to_spaces)
74 0.003 0.000 0.004 0.000 threading.py:146(acquire)
74 0.001 0.000 0.002 0.000 threading.py:186(release)
74 0.001 0.000 0.003 0.000 threading.py:214(__exit__)
148 0.000 0.000 0.000 0.000 threading.py:63(_note)
249 0.012 0.000 0.018 0.000
trans_real.py:287(do_translate)
249 0.002 0.000 0.020 0.000 trans_real.py:326(ugettext)
70 0.000 0.000 0.001 0.000 utils.py:178(truncate_name)
70 0.001 0.000 0.001 0.000 utils.py:234(__getitem__)
1 0.000 0.000 0.000 0.000 validators.py:119(__init__)
158 0.001 0.000 0.001 0.000 validators.py:275(__init__)
1 0.000 0.000 0.000 0.000
weakref_backports.py:25(__new__)
511 0.003 0.000 0.003 0.000
weakref_backports.py:47(__call__)
15 0.000 0.000 0.000 0.000 writer.py:35(__new__)
15 0.000 0.000 0.000 0.000 writer.py:38(__init__)
1 0.000 0.000 0.000 0.000 {Crypto.Cipher._AES.new}
676 0.010 0.000 0.010 0.000 {__import__}
693 0.010 0.000 0.029 0.000 {_bisect.bisect}
68 0.002 0.000 0.004 0.000 {any}
714 0.012 0.000 0.026 0.000 {built-in method __new__ of
type object at 0x91f8e0}
4 0.000 0.000 0.000 0.000 {callable}
81652 0.280 0.000 0.280 0.000 {delattr}
22415/22120 0.079 0.000 0.081 0.000 {getattr}
5093 0.019 0.000 0.019 0.000 {hasattr}
161 0.001 0.000 0.001 0.000 {hash}
76 0.000 0.000 0.000 0.000 {id}
8617 0.041 0.000 0.082 0.000 {isinstance}
9 0.000 0.000 0.000 0.000 {iter}
705 0.002 0.000 0.002 0.000 {len}
75 0.000 0.000 0.000 0.000 {method '__subclasses__' of
'type' objects}
74 0.000 0.000 0.000 0.000 {method 'acquire' of
'thread.lock' objects}
391 0.001 0.000 0.001 0.000 {method 'add' of 'set'
objects}
2339 0.007 0.000 0.007 0.000 {method 'append' of 'list'
objects}
75 0.003 0.000 0.003 0.000 {method 'clear' of 'dict'
objects}
1 0.000 0.000 0.000 0.000 {method 'copy' of 'dict'
objects}
73 0.001 0.000 0.001 0.000 {method 'copy' of 'dictproxy'
objects}
249 0.001 0.000 0.001 0.000 {method 'decode' of 'str'
objects}
1 0.000 0.000 0.000 0.000 {method 'disable' of
'_lsprof.Profiler' objects}
249 0.002 0.000 0.002 0.000 {method 'encode' of 'unicode'
objects}
28020 0.090 0.000 0.100 0.000 {method 'extend' of 'list'
objects}
1 0.000 0.000 0.000 0.000 {method 'format' of 'unicode'
objects}
13949 0.038 0.000 0.038 0.000 {method 'get' of 'dict'
objects}
135 0.000 0.000 0.000 0.000 {method 'group' of
'_sre.SRE_Match' objects}
693 0.003 0.000 0.003 0.000 {method 'insert' of 'list'
objects}
974 0.005 0.000 0.005 0.000 {method 'items' of 'dict'
objects}
135 0.001 0.000 0.001 0.000 {method 'join' of 'str'
objects}
73 0.003 0.000 0.005 0.000 {method 'join' of 'unicode'
objects}
72 0.000 0.000 0.000 0.000 {method 'keys' of 'dictproxy'
objects}
111 0.000 0.000 0.000 0.000 {method 'lower' of 'str'
objects}
508 0.003 0.000 0.003 0.000 {method 'lower' of 'unicode'
objects}
29 0.000 0.000 0.000 0.000 {method 'mro' of 'type'
objects}
1880 0.006 0.000 0.006 0.000 {method 'pop' of 'dict'
objects}
74 0.000 0.000 0.000 0.000 {method 'release' of
'thread.lock' objects}
9 0.000 0.000 0.000 0.000 {method 'replace' of 'str'
objects}
1341 0.005 0.000 0.005 0.000 {method 'replace' of
'unicode' objects}
5 0.000 0.000 0.000 0.000 {method 'rsplit' of 'str'
objects}
666 0.004 0.000 0.004 0.000 {method 'rsplit' of 'unicode'
objects}
209 0.001 0.000 0.001 0.000 {method 'setdefault' of
'dict' objects}
344 0.003 0.000 0.003 0.000 {method 'split' of 'str'
objects}
63 0.002 0.000 0.002 0.000 {method 'split' of 'unicode'
objects}
302 0.001 0.000 0.001 0.000 {method 'startswith' of 'str'
objects}
8427 0.028 0.000 0.028 0.000 {method 'startswith' of
'unicode' objects}
73 0.000 0.000 0.000 0.000 {method 'strip' of 'unicode'
objects}
73 0.005 0.000 0.012 0.000 {method 'sub' of
'_sre.SRE_Pattern' objects}
4182 0.017 0.000 0.019 0.000 {method 'update' of 'dict'
objects}
2 0.000 0.000 0.000 0.000 {method 'update' of 'set'
objects}
1 0.000 0.000 0.000 0.000 {method 'upper' of 'str'
objects}
1 0.000 0.000 0.000 0.000 {method 'upper' of 'unicode'
objects}
9 0.000 0.000 0.000 0.000 {next}
1 0.000 0.000 0.000 0.000 {range}
982 0.006 0.000 0.006 0.000 {setattr}
226 0.004 0.000 0.015 0.000 {sorted}
148 0.000 0.000 0.000 0.000 {thread.get_ident}
249 0.001 0.000 0.001 0.000 {unicodedata.normalize}
Regards,
Mounir
--
You received this message because you are subscribed to the Google Groups
"Django developers (Contributions to Django itself)" 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].
Visit this group at http://groups.google.com/group/django-developers.
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-developers/fd79211c-3d96-4aa3-886a-4e731204ba8d%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.