yahoo-eng-team team mailing list archive
-
yahoo-eng-team team
-
Mailing list archive
-
Message #09386
[Bug 1277298] [NEW] Deleting users takes a long time if there are many tokens
Public bug reported:
This is because we still have to filter results of an indexed query that
may return _millions_ of rows:
mysql> EXPLAIN SELECT token.id AS token_id FROM token WHERE token.valid = 1 AND token.expires > '2014-02-05 01:28:07.725059' AND token.user_id = '356d68464dc2478992427864dca4ce6a'\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: token
type: ref
possible_keys: ix_token_expires,ix_token_valid,ix_token_expires_valid
key: ix_token_valid
key_len: 1
ref: const
rows: 697205
Extra: Using where
1 row in set (0.01 sec)
Adding an index on user_id makes this quite a bit faster:
mysql> EXPLAIN SELECT token.id AS token_id FROM token WHERE token.valid = 1 AND token.expires > '2014-02-05 01:28:07.725059' AND token.user_id = '356d68464dc2478992427864dca4ce6a'\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: token
type: ref
possible_keys: ix_token_expires,ix_token_valid,ix_token_expires_valid,ix_user_id
key: ix_user_id
key_len: 195
ref: const
rows: 89
Extra: Using where
1 row in set (0.00 sec)
Note that memory usage still will go very high if a user one is deleting
has a lot of tokens, because the orm will select all of the rows, when
all that it needs is the id. So there are really two bugs. But the
select is slow even if you just select the id.
** Affects: keystone
Importance: Undecided
Status: New
--
You received this bug notification because you are a member of Yahoo!
Engineering Team, which is subscribed to Keystone.
https://bugs.launchpad.net/bugs/1277298
Title:
Deleting users takes a long time if there are many tokens
Status in OpenStack Identity (Keystone):
New
Bug description:
This is because we still have to filter results of an indexed query
that may return _millions_ of rows:
mysql> EXPLAIN SELECT token.id AS token_id FROM token WHERE token.valid = 1 AND token.expires > '2014-02-05 01:28:07.725059' AND token.user_id = '356d68464dc2478992427864dca4ce6a'\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: token
type: ref
possible_keys: ix_token_expires,ix_token_valid,ix_token_expires_valid
key: ix_token_valid
key_len: 1
ref: const
rows: 697205
Extra: Using where
1 row in set (0.01 sec)
Adding an index on user_id makes this quite a bit faster:
mysql> EXPLAIN SELECT token.id AS token_id FROM token WHERE token.valid = 1 AND token.expires > '2014-02-05 01:28:07.725059' AND token.user_id = '356d68464dc2478992427864dca4ce6a'\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: token
type: ref
possible_keys: ix_token_expires,ix_token_valid,ix_token_expires_valid,ix_user_id
key: ix_user_id
key_len: 195
ref: const
rows: 89
Extra: Using where
1 row in set (0.00 sec)
Note that memory usage still will go very high if a user one is
deleting has a lot of tokens, because the orm will select all of the
rows, when all that it needs is the id. So there are really two bugs.
But the select is slow even if you just select the id.
To manage notifications about this bug go to:
https://bugs.launchpad.net/keystone/+bug/1277298/+subscriptions
Follow ups
References