Задавайте вопросы, мы ответим
Вы не зашли.
Пришло письмо из службы поддержки хостинга
"Уведомляю Вас, что работой MySQL-пользователя ... создается повышенная нагрузка на сервер баз данных.
Примеры запросов:
SELECT time, path, country FROM stat WHERE ip
='1402278759' ORDER BY time DESC LIMIT 1;
SELECT time, path, country FROM stat WHERE ip
='1406740873' ORDER BY time DESC LIMIT 1;
Оптимизируйте, пожалуйста, Ваши скрипты, SQL-запросы и дайте
нам знать о результатах. Отметим, что размер Вашей базы
... составляет 80 Мб, что может вызывать
нагрузку из-за большого количества данных
получаемых/передаваемых при запросе (сейчас нагрузка может
достигать до 26%, при допустимой 2,5%)"
У меня вопрос.
В таблице stat 717500 записей. Размер ~77Mb. Туда пишутся данные о каждой просмотренной странице.
Это что много? Или не правильно созданы индексы?
Пока пришлось отключить статистику. А это не очень приятно.
Неактивен
Приведите результаты след команд:
SHOW CREATE TABLE stat;
и
EXPLAN SELECT time, path, country FROM stat WHERE ip
='1402278759' ORDER BY time DESC LIMIT 1;
Неактивен
Возможно требуется создать индекс ALTER TABLE stat ADD KEY(ip,time), но это увеличит объем хранимой информации и замедлит добавление статистики, хотя и ускорит описанные запросы.
Хостинг часто требует оптимизации скриптов и это не всегда оправдано. В любом случае при росте нагрузки Вам придется перейти на VDS и самостоятельно управлять MySQL-сервером.
Неактивен
vasya написал:
Приведите результаты след команд:
SHOW CREATE TABLE stat;
и
EXPLAN SELECT time, path, country FROM stat WHERE ip
='1402278759' ORDER BY time DESC LIMIT 1;
Привожу
SHOW CREATE:
CREATE TABLE `stat` (
`ip` int(11) NOT NULL default '0',
`time` int(11) unsigned NOT NULL default '0',
`diff_time` mediumint(8) unsigned NOT NULL default '0',
`page_id` mediumint(8) unsigned NOT NULL default '0',
`status` smallint(5) unsigned NOT NULL default '200',
`path` varchar(255) NOT NULL default '',
`ref_id` mediumint(8) unsigned NOT NULL default '0',
`ref` tinyint(1) unsigned NOT NULL default '0',
`search_ph` varchar(100) NOT NULL default '',
`agent_id` mediumint(8) unsigned NOT NULL default '0',
`robot` tinyint(1) unsigned NOT NULL default '0',
`country` char(2) NOT NULL default '',
`email` varchar(50) NOT NULL,
KEY `time_difftime` (`time`,`diff_time`),
KEY `diff_time_time` (`diff_time`,`time`),
KEY `time_ip` (`time`,`ip`),
KEY `ip` (`ip`),
KEY `country` (`country`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251
EXPLAIN(не понял, это ли вы просили)
[id] => 1
[select_type] => SIMPLE
[table] => stat
[type] => ref
[possible_keys] => ip
[key] => ip
[key_len] => 4
[ref] => const
[rows] => 20
[Extra] => Using where; Using filesort
Неактивен
rgbeast написал:
Возможно требуется создать индекс ALTER TABLE stat ADD KEY(ip,time), но это увеличит объем хранимой информации и замедлит добавление статистики, хотя и ускорит описанные запросы.
Индекс ip,time есть. См. выше. Хотя может я что-то не так понимаю. С иддексами там явно что-то не так.
rgbeast написал:
Хостинг часто требует оптимизации скриптов и это не всегда оправдано. В любом случае при росте нагрузки Вам придется перейти на VDS и самостоятельно управлять MySQL-сервером.
Статистика проработала всего три месяца, и уже такая нагрузка. Что будет с VDS через год и при увеличении посещаемости, например, в 5 раз? Тут все-таки вопрос в эффективности скрипта и бд.
Неактивен
Есть индекс time,ip. Индекса ip,time нет. Порядок имеет значение.
Неактивен
rgbeast написал:
Есть индекс time,ip. Индекса ip,time нет. Порядок имеет значение.
А что еще его добавить? Это снизит нагрузку на сервер на 20%?
Отредактированно izstora (09.02.2008 12:35:58)
Неактивен
izstora написал:
А что еще его добавить? Это снизит нагрузку на сервер на 20%?
Ничего не могу сказать про проценты, так как это зависит вообще от всех запросов. Про добавление данного ключа написал выше.
Неактивен