我有一个非常简单的表格来跟踪用户活动。它的结构如下:
userId appId lastActivity
PRIMARY(userId, appId)
表允许跟踪用户是否在特定应用程序中处于活动状态。它为每个用户每分钟更新一次,并经常阅读以计算特定应用程序中在线用户的数量。
最近我注意到,更新需要一段时间才能执行:
2012-10-01 16:49:10 - WARN --> Heavy query; array (
'caller' => 'updateActivity',
'query' => 'INSERT INTO user_activity VALUES(4953, 1, 1349095750)
ON DUPLICATE KEY UPDATE lastActivity = 1349095750',
'elapsed' => 0.134618,
)
2012-10-01 18:26:06 - WARN --> Heavy query; array (
'caller' => 'updateActivity',
'query' => 'INSERT INTO user_activity VALUES(4533, 1, 1349101566)
ON DUPLICATE KEY UPDATE lastActivity = 1349101566',
'elapsed' => 0.581776,
)
2012-10-01 18:27:16 - WARN --> Heavy query; array (
'caller' => 'updateActivity',
'query' => 'INSERT INTO user_activity VALUES(5590, 1, 1349101636)
ON DUPLICATE KEY UPDATE lastActivity = 1349101636',
'elapsed' => 0.351321,
)
2012-10-01 20:54:32 - WARN --> Heavy query; array (
'caller' => 'updateActivity',
'query' => 'INSERT INTO user_activity VALUES(3726, 1, 1349110472)
ON DUPLICATE KEY UPDATE lastActivity = 1349110472',
'elapsed' => 0.758706,
)
表使用 InnoDB 作为存储引擎。
我的问题
有什么问题吗?
我的设计有问题吗?
在这种特定情况下从哪里开始寻找性能问题?