wgrantlifeless: Around?02:49
lifelesswgrant: ^02:59
wgrantWas wondering if you could try https://pastebin.canonical.com/59988/ on qastaging. It takes >100ms in OOPS, but 10ms when run in psql on DF.03:01
wgrantI wonder if person descriptions are big.03:01
wgrantMonday's OK too :)03:01
wgrantlifeless: ^^03:02
lifeless218.988ms on wildcherry03:03
lifeless100ms in explain analyze03:04
lifelessbut still ~200 when rerun as a normal query03:04
lifeless Total runtime: 4.484 ms03:04
lifeless(23 rows)03:04
lifelessTime: 78.842 ms03:04
lifelessnote the startup vs exec difference - we've seen this before03:04
wgrantPlanning overhead?03:04
lifelessIIRC it was stats access stuff03:05
wgrantWe ran into this when we increased the stat sizes.03:05
lifelessshould be a UNION ALL03:06
wgrantNo, it shouldn't exist at all :)03:06
lifelessyeah, 77ms to do the explain03:07
lifeless(not explain analyze - just explain)03:07
wgrant(this is person.administrated_teams, as called by the structural subscriptions JS to populate a form field on most structural subscription context pages)03:08
lifelesswhat is this checking (my brain is to whacked to reverse engineer the meaning)03:08
lifelessso, its checking tp + membership to find the admins ?03:08
lifelessthe second clause looks odd to me03:09
lifelessah, owned by any team the person is in03:09
wgrantIt's checking for membership in an admin or an owner03:09
lifelessso first clause is 'in the team as an admin' and the second is '...03:10
lifelessthe sort shouldn't be there03:11
wgrantIt wants a sorted list.03:12
wgrantThe issue is probably more that the query shouldn't be there.03:12
wgrantBecause I suspect that form is used on <0.1% of requests03:12
lifelessah, for subscribe a team ?03:13
lifelesssure, I buy that too03:13
wgrantAnd of the times that form is used, about 1% are probably for teams.03:13
wgrantAnd of those, about 20% are probably not misguided :)03:13
lifelessits the first clause that is an issue - the one with tm03:14
lifeless188K rows, so its now exactly huge03:14
wgrantShould be an index scan down TP, into a 200-row read from TM, filtering down to a few rows, which then are read from person03:16
lifelessit runs in 2.6ms03:17
lifelessit plans in 70->140ms03:17
lifeless Nested Loop  (cost=0.00..753.27 rows=2 width=633)03:17
lifeless   ->  Nested Loop  (cost=0.00..748.78 rows=2 width=4)03:17
lifeless         ->  Index Scan using teamparticipation_person_idx on teamparticipation  (cost=0.00..147.56 rows=114 width=4)03:17
wgrantThat's a bit of worry03:18
lifeless               Index Cond: (person = 21997)03:18
lifeless         ->  Index Scan using membership_person_key on teammembership  (cost=0.00..5.26 rows=1 width=8)03:18
wgrantAs it touches like 4 tables.03:18
lifeless               Index Cond: (teammembership.person = teamparticipation.team)03:18
lifeless               Filter: (teammembership.status = 3)03:18
lifeless   ->  Index Scan using person_pkey on person  (cost=0.00..2.23 rows=1 width=633)03:18
lifeless         Index Cond: (person.id = teammembership.team)03:18
lifeless         Filter: (person.merged IS NULL)03:18
lifeless(10 rows)03:18
wgrantRight, that's what I would have done :)03:18
lifelessI want 'explain explain'03:19
wgrantAlso, I want to talk to you next week about weaning SSO.03:19
wgrantIf you have time.03:20
lifelessthat would be wuverly03:20
lifelessgotta get it on solids first03:20
wgrantI got it mostly working on the way back from Budapest, but there are availability and performance concerns.03:21
lifelessso lets talk early in the week03:21
lifelessget me across the parameters03:21
lifelessand I will either talk with, or setup a conf with, the sso folk03:22
lifelessdepending on $stuff, $timing etc03:22
lifelessde nada :)03:25
wgrantlifeless: Can you see any reason that person validity checks should require a search for a preferredemail, rather than having a constraint that account_status == ACTIVE => there is a preferredemail?05:01
wgrantTrying to kill off validpersoncache and all these stupid repeated emailaddress.status == 4 queries.05:01
lifelessdo we change account_status -> inactive if the last email address gets invalidated ?06:01
lifelesswgrant: I suspect the question needs to be put to the list; or we need to do some re-analysis; I don't have an easy answer.06:01
wgrantlifeless: The only thing that can now cause the last email to be invalidated is deactivation/suspension.06:06
wgrantlifeless: And those two only do it because the lack of a preferredemail is how we determine that a person is invalid.06:06
lifelesswgrant: I think we'd want some safeguard to ensure consistent data06:15
lifelessbut I see no reason why we shouldn't trust the status field if we do that06:15
wgrant"having a constraint that account_status == ACTIVE => there is a preferredemail"06:15
lifelesssomething like that yes06:15
lifelessa preferred validated mail06:15
lifelessblah, youknowwhatImean06:16
wgrantpreferred => validated, but yeah06:16
=== almaisan` is now known as almaisan-away
=== almaisan-away is now known as al-maisan
=== al-maisan is now known as almaisan-away
nigelbStevenK: watched cricket? :D12:08
StevenKnigelb: No. But I saw the result.12:23
nigelb:D :D12:30
=== jelmer_ is now known as jelmer
lifeless(ht spm: http://blog.markwshead.com/1148/design-problem/)23:08
wgrantYay, sinzui did most of my QA23:13
lifelessnot what I expected https://launchpad.net/lca23:17
wallyworld_lifeless: there's a branch of python-oops-amqp ready to be merged into trunk make release 0.0.6 (i haven't done the merge yet). but i don't have pypi permissions to create a release. is that something you can do?23:45
StevenKwallyworld_: Can haz some QA?23:46
wallyworld_sure, just getting a couple of things done23:46
lifelesswallyworld_: whats your pypi userid ?23:47
wallyworld_lifeless: wallyworld23:48
lifelesswallyworld_: also, you need to actually merge, else trunk shows all the intermediate work.23:48
lifelesswallyworld_: added you as maintainer; should let you do it23:49
wallyworld_lifeless: thank you muchly23:49
lifelessde nada23:49
lifelesswould love a team-plugin for pypi23:49

Generated by irclog2html.py 2.7 by Marius Gedminas - find it at mg.pov.lt!