ModelSingleton vs MultiValue
There is a bad performance combination between ModelSingleton and MultiValue.
The singleton is frequently instantiated using '1' as id with the idea that it does not cost anything because values are already in global cache.
The MultiValue used the One2Many field (when available) to benefit from the cache instead of doing a search on each access.
Unfortunately, the combination of both is not optimal because the ModelSingleton uses a new instance each time and the One2Many fields are stored only on the local cache of the instance (not the global). So this generates extra queries after each instantiation to fetch the One2Many.
I think we could fix this by storing a instance for each ModelSingleton in the Transaction cache per context. This cached instance will be reused by ModelSingleton when requesting a new instance. Of course the cache should be cleaned when the singleton is created or deleted.