慢速MySQL表

慢速MySQL表,mysql,Mysql,我目前正试图弄清楚为什么我正在开发的网站(Laravel4.2框架)有时速度非常慢,我认为这与我的数据库设置有关。我一点也不专业,所以我会假设问题出在哪里 当我运行showprocesslist时,我的sessions表中大约有220万条记录,所有耗时最长的查询都与该表相关 下面是一张图片,例如: 表结构 我肯定做错了什么,或者它没有正确索引?我不确定,数据库也不是很好 我们看不到正在执行的完整SQL,因此我们不能推荐适当的索引。但是如果DELETE语句上的唯一谓词位于last\u acti

我目前正试图弄清楚为什么我正在开发的网站(Laravel4.2框架)有时速度非常慢,我认为这与我的数据库设置有关。我一点也不专业,所以我会假设问题出在哪里

当我运行
showprocesslist时,我的
sessions
表中大约有220万条记录,所有耗时最长的查询都与该表相关

下面是一张图片,例如:

表结构


我肯定做错了什么,或者它没有正确索引?我不确定,数据库也不是很好

我们看不到正在执行的完整SQL,因此我们不能推荐适当的索引。但是如果DELETE语句上的唯一谓词位于
last\u activity
列,即

DELETE FROM `sessions` WHERE last_activity <= 'somevalue' ; 
此外,如果该表使用MyISAM存储引擎,则DML语句不能并发执行;DML语句将在等待获取表的独占锁时阻塞。InnoDB存储引擎使用行级锁定,因此一些DML操作可以是并发的。(InnoDB不会消除锁争用,但锁将位于行和索引块上,而不是整个表上。)


还考虑使用不同的存储机制(MySQL数据库除外)来存储和检索Web服务器“会话”的信息。


另外,是否有必要(是否有一些要求)持久化220万个“会话”行?我们是否确实需要所有这些行?如果这些数据中有一些是历史的,而不是特别需要支持当前的Web服务器会话,我们可以考虑将历史数据移到另一个表。

您最好的办法是删除数据库会话并将其存储在像ReIIS之类的东西中。数据库会话根本不适合高通信量—您在会话表上得到的正是这种写入争用。您是否清除过该表并删除“死”会话?
CREATE INDEX sessions_IX1 ON sessions (last_activity);