Мы запускаем веб-страницу на базе ОС Commerce на нашем собственном выделенном сервере. В апреле прошлого года мы были вынуждены обновить сервер. Примерно в этот момент мы начали замечать, что, по-видимому, происходили случайные сбои в работе веб-сайта, когда нашу страницу нельзя было просмотреть с любого компьютера, и единственным решением для этого в то время был жесткий перезапуск нашего сервера. Это случилось около месяца. Эта проблема была решена, но теперь мы столкнулись с другой проблемой. Наш сайт замедляется, казалось бы, наугад. Иногда страница загружается очень быстро, а иногда загрузка занимает до 2 минут. Кажется, для этого не существует шаблона, который мы могли бы выяснить. Веб-сайт www.westerndepot.com. Мы попытались проверить работоспособность нашего сайта с помощью Yslow и аналогичных, но все выполненные нами запросы показывают, что наш сайт оценивается как «A». Похоже, что время ожидания колеблется, а не фактическое время загрузки. Недавняя диагностика Firebug показала время ожидания 23,9 секунды с временем загрузки 24,17 секунды.
Сервер имеет 64 ГБ оперативной памяти, а текущая максимальная используемая оперативная память показывает 10 ГБ. Мы используем SME Server 9.0. Сервер состоит из двух дисков WD Caviar Black объемом 1 ТБ, которые зеркалируются с помощью программного обеспечения Raid под SME 9 с оставшимся 833 ГБ свободного места. Таблица products_to_categories содержит 18375 записей для 13923 товаров, из которых 2427 товаров неактивны. Всего 385 категорий.
Наш конфигурационный файл MySQL выглядит следующим образом:
character-set-server=utf8
collation-server=utf8_general_ci
key_buffer_size=2048M
preload_buffer_size=512M
query_cache_limit=64M
query_cache_size=512M
query_cache_type=1
query_prealloc_size=512M
read_buffer_size=2M
read_rd_buffer_size=4M
sort_buffer_size=2M
thread_cache_size=300
join_buffer_size=256K
table_open_cache=512K
tmp_table_size=256M
max_heap_table_size=256M
slow_query_log=1
max_connections=500
concurrent_insert=2
log_output=FILE
Ниже приведен пример медленного журнала запросов.
# Query_time: 12.277704 Lock_time: 0.000193 Rows_sent: 1 Rows_examined: 39652497
SET timestamp=1427835801;
select count(distinct p.products_id) as total from products p left join manufacturers
m using(manufacturers_id) left join (select * from (select products_id, specials_new_products_price
, expires_date, status from specials where status = 1 order by products_id, specials_new_products_price,
expires_date) as t group by products_id) as s on p.products_id = s.products_id left join
products_to_notes ptn on ptn.products_id = p.products_id join products_description
pd on p.products_id = pd.products_id join (select products_id from
products_to_categories where (categories_id not in (728)) group by products_id) as
p2c on p.products_id = p2c.products_id where p.products_status = '1';
# Query_time: 11.654512 Lock_time: 0.000367 Rows_sent: 240 Rows_examined: 36425129
SET timestamp=1427835812;
select distinct m.manufacturers_name, p.products_model, p.products_image,
p.image_folder, p.image_display, p.products_quantity, p.hide_qty_over,
p.products_bundle, IF(s.status, s.expires_date, NULL) as expires_date,
m.manufacturers_id, p.products_id, pd.products_name, p.products_msrp,
p.products_price, p.products_tax_class_id, IF(s.status,
s.specials_new_products_price, NULL) as specials_new_products_price, IF(s.status,
s.specials_new_products_price, p.products_price) as final_price,
p.sold_in_bundle_only, p.products_type , pd.extra_value_id6 , pd.extra_value_id10
from products p left join manufacturers m using(manufacturers_id) left join
(select * from (select products_id, specials_new_products_price, expires_date,
status from specials where status = 1 order by products_id,
specials_new_products_price, expires_date) as t group by products_id) as s on
p.products_id = s.products_id left join products_to_notes ptn on ptn.products_id =
p.products_id join products_description pd on p.products_id = pd.products_id join
(select products_id from products_to_categories where (categories_id not in (728))
group by products_id) as p2c on p.products_id = p2c.products_id where
p.products_status = '1' order by products_name limit 2160, 240;
Все медленные запросы происходят из «расширенного поиска».
Сайт использует несколько продаж для каждого продукта.
Какие-нибудь мысли? Мы пропустили что-то простое? Любая помощь, указания, мысли или контакты будут с благодарностью.
Вы видели результаты MySQL? explain
команда? Я полагаю, что в таблицах базы данных отсутствуют некоторые индексы.
Увидеть документы для деталей режима.
Других решений пока нет …