ユーザーのアクティビティを追跡するための非常に単純なテーブルがあります。その構造は次のとおりです。
userId appId lastActivity
PRIMARY(userId, appId)
ユーザーが特定のアプリケーション内でアクティブであるかどうかを表で追跡できます。ユーザーごとに 1 分に 1 回更新され、特定のアプリケーション内でオンラインになっているユーザーの数をカウントするために頻繁に読み取られます。
最近、更新の実行に時間がかかることに気付きました。
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 を使用します。
私の質問
まったく問題はありませんか?
私の設計に問題はありますか?
この特定の状況でパフォーマンスの問題を見つけるには、どこから始めればよいでしょうか?