我目前正在使用Laravel进行我正在进行的项目,并且我的Web服务器最近在页面加载时开始执行速度非常慢,因此每个页面最多可能需要8秒才能加载。
到目前为止,我已经确定缓慢不是由以下因素引起的:
按照上述步骤,问题只发生在实时环境中,我的开发环境没有任何延迟迹象。
在分析了一些缓存研磨日志后,我发现PDOStatement->execute
调用似乎占用了最大的延迟时间。
然后我启用了long_query_time
登录MySQL以进一步确定问题。我的调查结果显示,我的大多数查询都在快速执行,一秒钟之内;但是,我发现执行的任何site_session
个查询最多需要6秒才能执行。
作为进一步的问题排查步骤,我尝试暂时将sessions
驱动器更改为file
而不是database
;但是,我发现在每次加载页面后仍然执行以下查询:
# Time: 150813 23:37:12
# User@Host: root[root] @ localhost [127.0.0.1]
# Query_time: 3.035622 Lock_time: 0.000022 Rows_sent: 0 Rows_examined: 1
SET timestamp=1439509032;
update `site_sessions` set `payload` = 'YTo1OntzOjY6Il90b2tlbiI7czo0MDoibHk0YVo2MG16c09acTBTSnVnYUlJVTFNM0VrU3B2ekdiRFJyYmRzWiI7czo5OiJfcHJldmlvdXMiO2E6MTp7czozOiJ1cmwiO3M6MjY6Imh0dHA6Ly93d3cuY29ycGxlYWd1ZXMuY29tIjt9czo1OiJmbGFzaCI7YToyOntzOjM6Im9sZCI7YTowOnt9czozOiJuZXciO2E6MDp7fX1zOjM4OiJsb2dpbl84MmU1ZDJjNTZiZGQwODExMzE4ZjBjZjA3OGI3OGJmYyI7czoxOiIxIjtzOjk6Il9zZjJfbWV0YSI7YTozOntzOjE6InUiO2k6MTQzOTUwOTAyODtzOjE6ImMiO2k6MTQzOTQ5Nzc5MjtzOjE6ImwiO3M6MToiMCI7fX0=', `last_activity` = '1439509029' where `id` = 'ba62f70745c5455611c3fe3bf008fa213c22a7f9';
# Time: 150813 23:37:27
# User@Host: root[root] @ localhost [127.0.0.1]
# Query_time: 1.071487 Lock_time: 0.000026 Rows_sent: 0 Rows_examined: 1
SET timestamp=1439509047;
update `site_sessions` set `payload` = 'YTo1OntzOjY6Il90b2tlbiI7czo0MDoiOGhiVVVobTFjTERrU1ZXR25weTdMWHlQRlMzTmtkOWhIZzFSdHQ1QSI7czo5OiJfcHJldmlvdXMiO2E6MTp7czozOiJ1cmwiO3M6MjY6Imh0dHA6Ly93d3cuY29ycGxlYWd1ZXMuY29tIjt9czo1OiJmbGFzaCI7YToyOntzOjM6Im9sZCI7YTowOnt9czozOiJuZXciO2E6MDp7fX1zOjM4OiJsb2dpbl84MmU1ZDJjNTZiZGQwODExMzE4ZjBjZjA3OGI3OGJmYyI7czoxOiIxIjtzOjk6Il9zZjJfbWV0YSI7YTozOntzOjE6InUiO2k6MTQzOTUwOTA0NjtzOjE6ImMiO2k6MTQzOTUwNDQzODtzOjE6ImwiO3M6MToiMCI7fX0=', `last_activity` = '1439509046' where `id` = 'c3e95cf7c317ad340aa28c61bf323e008eaa5ff0';
任何人都可以对这个问题有所了解,或者同样地提供额外的故障排除步骤,以帮助我确定根本原因吗?
非常感谢任何反馈!
修改
以下是TABLE STATUS
信息:
+--------------------------------------------------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------+
| Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time | Update_time | Check_time | Collation | Checksum | Create_options | Comment |
+--------------------------------------------------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------+
| site_sessions | InnoDB | 10 | Compact | 18 | 910 | 16384 | 0 | 16384 | 10485760 | NULL | 2015-07-20 03:40:32 | NULL | NULL | utf8_unicode_ci | NULL | | |
+--------------------------------------------------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------+
我的session.php
文件:
<?php
return [
'driver' => env('SESSION_DRIVER'),
'lifetime' => 320,
'expire_on_close' => true,
'encrypt' => false,
'files' => storage_path().'/framework/sessions',
'connection' => null,
'table' => 'sessions',
'lottery' => [2, 100],
'cookie' => 'clgs_session',
'path' => '/',
'domain' => null,
'secure' => false,
];
(注意:我已在SESSION_DRIVER
中将file
变量指定为.env
,我也尝试在session.php
中手动设置
最后,这是我的site_sessions
表结构:
mysql> SHOW CREATE TABLE site_sessions;
CREATE TABLE `site_sessions` (
`id` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`payload` text COLLATE utf8_unicode_ci NOT NULL,
`last_activity` int(11) NOT NULL,
`user_id` int(10) unsigned DEFAULT NULL,
UNIQUE KEY `sessions_id_unique` (`id`),
KEY `sessions_user_id_index` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
请注意,user_id
字段是为了帮助我确定哪些用户与每个会话相关联,以便获取当前在线的用户列表。我从未遇到过这方面的问题。
我可以执行任何其他故障排除步骤来确定慢查询吗?
由于