Слишком долго выполняются запросы в Mysql на Magento

horal

Новичок
Добрый день

Есть Magento 1.9 CE

В логе медленных запросов запрос на insert в
sales_flat_quote_item проходит порядка 50 секунд!

База данных стоит на отдельном сервере

Сервер:

VDS
2 по 1536 Mhz
2 Gb RAM

Все это выливается в то, что на 20 пользователях все переход в корзину занимает 1.5-2.5 минуты

Стоит также Nginx как Front-end и Apache на бэке

APC включен

Записей в таблице
sales_flat_quote_item всего лишь 1230

Почему такие тормоза?

mysql conf:


myisam-recover = BACKUP
max_connections = 600
#table_cache = 64
#thread_concurrency = 10
#
tmp_table_size = 128M
max_heap_table_size = 128M
max_binlog_size = 100M
sort_buffer_size = 4M
read_buffer_size = 4M
read_rnd_buffer_size = 2M
myisam_sort_buffer_size = 64M
wait_timeout = 300


# * Query Cache Configuration
#
join_buffer_size = 16M
myisam_sort_buffer_size = 64M
query_cache_limit = 10M
query_cache_size = 260M

innodb_buffer_pool_size = 2048M
innodb_thread_concurrency = 10
innodb_flush_log_at_trx_commit =2
innodb_additional_mem_pool_size =20M
#innodb_log_file_size = 256M
innodb_log_buffer_size = 8M
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
innodb_buffer_pool_size = 2048M
То есть ты поставил под буффер оперативки больше, чем ее есть на самом деле? Думаю сервак закономерно высвопился.

Ну и посмотри, сколько памяти, "диска" у тебя свободно, узкое место по твоему конфигу как бы не найти. Какой запрос тоже непонятно. Искать его в недрах этого шопа неохота
 

horal

Новичок
Понял, поставил 1024

И вот что по диску:

Filesystem Size Used Avail Use% Mounted on
rootfs 2.8G 923M 1.8G 35% /
udev 10M 0 10M 0% /dev
tmpfs 397M 220K 397M 1% /run
/dev/mapper/VG-root 2.8G 923M 1.8G 35% /
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 794M 0 794M 0% /run/shm
/dev/mapper/VG-home 9.4G 150M 8.8G 2% /home
/dev/mapper/VG-tmp 941M 18M 876M 2% /tmp
/dev/mapper/VG-var 6.5G 1.8G 4.4G 29% /var
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
horal, этот параметр на выделенном вервере рекомендуется выставить как 70% от RAM, посмотри на mysql performance blog . com там есть статьи.

Смотри iostat, может что диск забило, а может быть еще что.

Структура у таблицы какая? сколько полей и индексов? Сколько данных ты в нее вставляешь? Может там дэдлок вылез?
 

horal

Новичок
Спасибо, гляну

3-4 индекса там

вот данные:

INSERT INTO `sales_flat_quote_item` (`quote_id`, `created_at`, `updated_at`, `product_id`, `store_id`, `is_virtual`, `sku`, `name`, `applied_rule
_ids`, `free_shipping`, `is_qty_decimal`, `weight`, `qty`, `price`, `base_price`, `discount_percent`, `discount_amount`, `base_discount_amount`,
`tax_percent`, `tax_amount`, `base_tax_amount`, `row_total`, `base_row_total`, `row_weight`, `product_type`, `base_cost`, `price_incl_tax`, `base
_price_incl_tax`, `row_total_incl_tax`, `base_row_total_incl_tax`, `hidden_tax_amount`, `base_hidden_tax_amount`, `weee_tax_disposition`, `weee_t
ax_row_disposition`, `base_weee_tax_disposition`, `base_weee_tax_row_disposition`, `weee_tax_applied`, `weee_tax_applied_amount`, `weee_tax_appli
ed_row_amount`, `base_weee_tax_applied_amount`)

VALUES ('4947', '2014-09-27 14:08:23', '2014-09-27 14:08:23', '492', '1', '0', '477', 'Планшет Hu
awei MediaPad 7 Vogue за 1 699 000 руб. вместо 3 059 000 руб.', NULL, '0', '0', '0', '1', '1699000', '1699000', '0', '0', '0', '0', '0', '0', '16
99000', '1699000', '0', 'dealproduct', NULL, '1699000', '1699000', '1699000', '1699000', '0', '0', '0', '0', '0', '0', 'a:0:{}', '0', '0', '0');

Я не думаю, что все данные нужны - но так написано
 

horal

Новичок
Вот индексы

KEY `IDX_SALES_FLAT_QUOTE_ITEM_PARENT_ITEM_ID` (`parent_item_id`),
KEY `IDX_SALES_FLAT_QUOTE_ITEM_PRODUCT_ID` (`product_id`),
KEY `IDX_SALES_FLAT_QUOTE_ITEM_QUOTE_ID` (`quote_id`),
KEY `IDX_SALES_FLAT_QUOTE_ITEM_STORE_ID` (`store_id`),

Ограничения:

CONSTRAINT `FK_B201DEB5DE51B791AF5C5BF87053C5A7` FOREIGN KEY (`parent_item_id`) REFERENCES `sales_flat_quote_item` (`item_id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `FK_SALES_FLAT_QUOTE_ITEM_PRD_ID_CAT_PRD_ENTT_ENTT_ID` FOREIGN KEY (`product_id`) REFERENCES `catalog_product_entity` (`entity_id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `FK_SALES_FLAT_QUOTE_ITEM_QUOTE_ID_SALES_FLAT_QUOTE_ENTITY_ID` FOREIGN KEY (`quote_id`) REFERENCES `sales_flat_quote` (`entity_id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `FK_SALES_FLAT_QUOTE_ITEM_STORE_ID_CORE_STORE_STORE_ID` FOREIGN KEY (`store_id`) REFERENCES `core_store` (`store_id`) ON DELETE SET NULL ON UPDATE CASCADE
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Ну я как бы не вижу ничего такого экстраординарного и потенциально тормозящего

Запрос с консоли тоже тормозит, или только на сайте?
 

horal

Новичок
Это все счастье тормозит когда пользователей становится порядка 20 штук

Тогда начинает тормозить

Может просто RAM не хватает?
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
c0dex, прости, не могу удержаться :) а у тебя еще много хороших идей?
вообще-то тормоза решаются профилированием, а не перепиской или гаданием на размере памяти

там все что угодно может быть - например, сессия в базе, переполнение кеша на нагрузке, локи на myisam, да что угодно
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
grigori, если честно идей нету, просто подкинул пару идей куда смотреть. Думаю, если бы человек мог сам спрофилировать все - не пришел бы сюда.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Пофик, как-нибудь решит проблему.
 

horal

Новичок
А что вы предлагаете профилировать, если без посещений на сайте в Mysql slow log данные не попадают никакие?

А когда делаю нагрузочное, то тогда Query_time 30 - 45 секунд на insert в таблицу с 4-ми индексами на 1200 записей

Inno db используется - причем тут Myisam
 

confguru

ExAdmin
Команда форума
На самом деле слабенький VPS - скорее всего под буфера MySQL отдается много памяти и машина начинает свопить.
Сколько записей в табличке товаров и их параметров?
Когда я смотрел Magneto он мне напомнил битрикс международного массштаба - где толстые join и выборка всего и вся ради пары строчек.

1) Нужно замерить выделения памяти на этот запрос
2) Нужно заметить время выполнения запроса
3) Проверить через LoadImpact - сделав сценарий кидания в корзину.
 
Сверху