[midPoint] Users list is slow with large numbers of users

Pavol Mederly mederly at evolveum.com
Sat Jul 28 16:51:37 CEST 2018


Andrew,

now I see I am going to have a look at it anyhow: 
https://jira.evolveum.com/browse/MID-4776. I will let you know.

Pavol Mederly
Software developer
evolveum.com

On 28.07.2018 10:39, Pavol Mederly wrote:
> Hello Andrew,
>
> how long does it take to display the user list (in GUI) in your case?
>
> I know the query is like you say - and we know it can be optimized - 
> but in reality the SQL command sent to the database should limit the 
> results to first 20 records, so it should be faster than processing 
> SQL query without limits. (Anyway, we can sort this out if needed.)
>
> As for the columns, please have a look at "Custom columns 
> configuration" in 
> https://wiki.evolveum.com/display/midPoint/Admin+GUI+Configuration.
>
> Hope this helps,
>
> Pavol Mederly
> Software developer
> evolveum.com
>
> On 27.07.2018 18:03, Andrew Morgan wrote:
>> We are running midPoint v3.7.2 (we delayed upgrading to v3.8 because 
>> the Google connector is broken).  We recently loaded about 110,000 
>> users in midPoint.  When I click on Users > List Users, midPoint is 
>> waiting for the results of this database query:
>>
>> MariaDB [midpointdev]> explain select ruser0_.oid as col_0_0_, 
>> ruser0_2_.fullObject as col_1_0_, ruser0_2_.stringsCount as col_2_0_, 
>> ruser0_2_.longsCount as col_3_0_, ruser0_2_.datesCount as col_4_0_, 
>> ruser0_2_.referencesCount as col_5_0_, ruser0_2_.polysCount as 
>> col_6_0_, ruser0_2_.booleansCount as col_7_0_ from m_user ruser0_ 
>> inner join m_focus ruser0_1_ on ruser0_.oid=ruser0_1_.oid inner join 
>> m_object ruser0_2_ on ruser0_.oid=ruser0_2_.oid order by 
>> ruser0_2_.name_orig asc;
>> +------+-------------+-----------+--------+---------------+--------------+---------+-------------------------+--------+----------------------------------------------+ 
>>
>> | id   | select_type | table     | type   | possible_keys | 
>> key          | key_len | ref                     | rows   | 
>> Extra                                        |
>> +------+-------------+-----------+--------+---------------+--------------+---------+-------------------------+--------+----------------------------------------------+ 
>>
>> |    1 | SIMPLE      | ruser0_   | index  | PRIMARY       | 
>> uc_user_name | 768     | NULL                    | 100839 | Using 
>> index; Using temporary; Using filesort |
>> |    1 | SIMPLE      | ruser0_1_ | eq_ref | PRIMARY       | 
>> PRIMARY      | 110     | midpointdev.ruser0_.oid |      1 | Using 
>> index                                  |
>> |    1 | SIMPLE      | ruser0_2_ | eq_ref | PRIMARY       | 
>> PRIMARY      | 110     | midpointdev.ruser0_.oid |      1 
>> |                                              |
>> +------+-------------+-----------+--------+---------------+--------------+---------+-------------------------+--------+----------------------------------------------+ 
>>
>>
>> Without the aliases, it is a little easier to read:
>>
>> MariaDB [midpointdev]> explain select m_user.oid, 
>> m_object.fullObject, m_object.stringsCount, m_object.longsCount, 
>> m_object.datesCount, m_object.referencesCount, m_object.polysCount, 
>> m_object.booleansCount from m_user inner join m_focus on 
>> m_user.oid=m_focus.oid inner join m_object on m_user.oid=m_object.oid 
>> order by m_object.name_orig asc;
>> +------+-------------+----------+--------+---------------+--------------+---------+------------------------+--------+----------------------------------------------+ 
>>
>> | id   | select_type | table    | type   | possible_keys | 
>> key          | key_len | ref                    | rows   | 
>> Extra                                        |
>> +------+-------------+----------+--------+---------------+--------------+---------+------------------------+--------+----------------------------------------------+ 
>>
>> |    1 | SIMPLE      | m_user   | index  | PRIMARY       | 
>> uc_user_name | 768     | NULL                   | 100839 | Using 
>> index; Using temporary; Using filesort |
>> |    1 | SIMPLE      | m_focus  | eq_ref | PRIMARY       | 
>> PRIMARY      | 110     | midpointdev.m_user.oid |      1 | Using 
>> index                                  |
>> |    1 | SIMPLE      | m_object | eq_ref | PRIMARY       | 
>> PRIMARY      | 110     | midpointdev.m_user.oid |      1 
>> |                                              |
>> +------+-------------+----------+--------+---------------+--------------+---------+------------------------+--------+----------------------------------------------+ 
>>
>>
>> The result of this query is about 440MB of data.  "111690 rows in set 
>> (22.84 sec)"  (BTW, join on m_focus isn't needed in this query, right?)
>>
>> That is a LOT of data to push around anytime the Users list is 
>> loaded.  We haven't even loaded all of our users yet!  Our total user 
>> population is around 350,000.
>>
>> Is there a way to set some defaults for the User list?  For example, 
>> could I change it to not display anything until a search is 
>> performed?  Ideally, it wouldn't try to fetch m_object.fullObject, at 
>> least until some filter is added.
>>
>> On a somewhat related note, I'd like to change which columns are 
>> displayed in the User list.  For example, I would remove Fullname and 
>> Email and add one of our custom attributes (extension/username).  Is 
>> that possible?
>>
>> Thanks,
>>
>> Andy Morgan
>> Systems Administrator, Identity & Access Management
>> Information Services | Oregon State University
>> 541-737-8877 | is.oregonstate.edu
>> _______________________________________________
>> midPoint mailing list
>> midPoint at lists.evolveum.com
>> http://lists.evolveum.com/mailman/listinfo/midpoint
>
> _______________________________________________
> midPoint mailing list
> midPoint at lists.evolveum.com
> http://lists.evolveum.com/mailman/listinfo/midpoint




More information about the midPoint mailing list