- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Маркетинг для шоколадной фабрики. На 34% выше средний чек
Через устранение узких мест
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Всем привет.
Решился немного разобраться с запросами создающие временные таблицы на диске.
вот самый проблемный запрос отвечающий за выборку в категории WP, который зависает при нагрузке на диск, например во время бекапов и переиндексации сфинкса.
SELECT wp_posts.ID FROM wp_posts INNER JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id) INNER JOIN wp_term_taxonomy ON (wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id) WHERE 1=1 AND wp_term_taxonomy.taxonomy = 'category' AND wp_term_taxonomy.term_id IN ('49') ORDER BY wp_posts.post_date DESC LIMIT 115500, 10
Создал раздел var/mysqltmp
в my.cnf в секции [mysqld] прописал tmpdir = /var/mysqltmp
в fstab добавил строку
tmpfs /var/mysqltmp tmpfs rw,gid=27,uid=27,size=1024M,nr_inodes=50k,mode=0700 0 0
mount -a
service mysql restart
и, ничего, таблицы, по прежнему создаются на диске.
Что я делаю не так?
Как проверяли то? Вы же сами создали виртуальный диск, конечно туда и пишется.
таблицы, по прежнему создаются на диске
А где они должны создаваться?
Что я делаю не так?
Делаете всё так, просто не понимаете как оно работает. С точки зрения MySQL таблицы как писались на диск, так и пишутся. Однако по факту, так как переместили временный каталог в RAM, то теперь временные таблиц пишутся в RAM.
Во-первых, как верно заметили, хоть оно и пишет что таблицы на диск пишутся, но фактически ведь пишутся в память, т.е. на физический диск ничего не пишется.
Во-вторых, есть переменные tmp_table_size и max_heap_table_size - нужно их сделать размером больше чем те записываемые таблицы. Прописать в my.cnf и проверить:
show variables like '%_table_size';
И главное... с чего взяли что суть вашей проблемы в самом процессе создания таблиц на диск? Может из-за того что когда диск во время бэкапа тормозит, тормозит чтение из базы во время запроса. Если после переноса tmpdir на tmpfs ничего не улучшилось, то врядли здесь надо искать проблему. По хорошему конечно вся база должна сидеть в памяти целиком и с диском обмениваться лишь иногда.
Да и вообще, уверены что зависание именно от нагрузки на диск во время бэкапа, а не нагрузки на cpu например? Бэкап это ведь и архивирование обычно - страшное дело если сделано абы как, не однопоточно :)
Во-первых, как верно заметили, хоть оно и пишет что таблицы на диск пишутся, но фактически ведь пишутся в память, т.е. на физический диск ничего не пишется.
Во-вторых, есть переменные tmp_table_size и max_heap_table_size - нужно их сделать размером больше чем те записываемые таблицы. Прописать в my.cnf и проверить:
show variables like '%_table_size';
И главное... с чего взяли что суть вашей проблемы в самом процессе создания таблиц на диск? Может из-за того что когда диск во время бэкапа тормозит, тормозит чтение из базы во время запроса. Если после переноса tmpdir на tmpfs ничего не улучшилось, то врядли здесь надо искать проблему. По хорошему конечно вся база должна сидеть в памяти целиком и с диском обмениваться лишь иногда.
Да и вообще, уверены что зависание именно от нагрузки на диск во время бэкапа, а не нагрузки на cpu например? Бэкап это ведь и архивирование обычно - страшное дело если сделано абы как, не однопоточно :)
Пока проблему решил изменив запрос, пришлось залезть в ядро вордпресса в query.php, заменил сортировку по дате wp_posts.post_date на сортировку по wp_term_relationships.object_id для категорий это не критично, тем самым избавился от временных таблиц в этом запросе.