Zen Cart слишком много пишет в базу данных.Возможные решения? - PullRequest
1 голос
/ 17 апреля 2011

Я работаю над тем, что использует Zen Cart. Смена сайта из Zen Cart не является обязательной в данный момент. Сайт работает нормально в большинстве случаев, но каждую неделю сайт теряет производительность. Обсуждения с поставщиком сервера показывают, что это почти наверняка вызвано слишком большим количеством записей в базу данных, что приводит к неэффективному использованию ввода-вывода. Сервер базы данных отличается от веб-сервера, но если у сервера базы данных недостаточно доступного ввода-вывода, сайт пострадает (поскольку почти каждая страница на сайте выполняет вызов базы данных). Я ищу решение, чтобы это исправить, и считаю, что нашел, но хотел бы получить отзыв.

A) Определите, могу ли я изменить корзину zen для использования INSERT DELAY вместо INSERT, чтобы страницы не зависали при определенных запросах. Однако Zen Cart - это огромная система, и внесение такого широкомасштабного изменения может привести к отрицательным последствиям (например, операторы DELAY не будут выполняться для таблиц, которые были заблокированы с помощью LOCKED TABLES, или на последующих страницах, которые не отражают должным образом действия, предпринятые пользователь на предыдущих страницах, поскольку они могут загружаться без выполнения предыдущих запросов).

B) Разверните гибридное хостинговое решение, в котором сайт работает в облаке, но база данных работает на сервере с несколькими дисками SAS, чтобы увеличить скорость записи и тем самым быстрее освободить ввод-вывод для последующих запросов. Я хотел бы избежать этого, так как это значительно увеличивает расходы.

Кто-нибудь сталкивался с этой проблемой с Zen-Cart? Что вы думаете об этих исправлениях? Какие исправления вы использовали?

UPDATE: В итоге я использовал Query Cache от Data Diggers, и это очень помогло. Я также узнал, что zencart использует getimagesize () большую часть своего времени загрузки, поэтому я создаю способ получить эти значения из кэша. Большая часть задержки запроса MySQL была вызвана чрезмерными операциями чтения, а не операциями записи. С тех пор, как я внедрил изменения, ситуация значительно улучшилась. Я отмечу ответ ЭйДжея как правильный, так как он действительно ответил на то, что я первоначально спрашивал.

1 Ответ

2 голосов
/ 17 апреля 2011

Внесение широкого изменения, такого как INSERT DELAY вместо INSERT , может быть правильным решением, но не все ваши запросы вызывают проблему. Только несколько (или, может быть, даже только один) ответственны за проблему производительности.

Вы должны попытаться выяснить, какие конкретные запросы / запросы вызывают проблему производительности. Поработайте с вашим хостом, чтобы включить медленное ведение журнала запросов и позволить MySQL сообщить вам, в чем заключается неэффективность. Если ни один из них не запускается медленно, и это просто явная проблема параллелизма, если IFF вы состоите в браке с Zen Cart, тогда вам нужно взглянуть на улучшение своей инфраструктуры. Мне нравится ваше мнение о наличии отдельных веб-серверов и серверов баз данных. Не переусердствуйте, хотя - если они оба работают на одном сервере прямо сейчас, просто найдите второй сервер и переместите вашу базу данных.

Внесите инкрементальных изменений и следите за результатами. Изменение слишком большого количества вещей за один раз затруднит определение причины каких-либо выигрышей (возможно, не потерь) в производительности, которую вы видите.

...