Main > Databases | Magento | MySQL > Magento 2: Таблица catalog_product_index_eav_temp и другие temp таблицы

Magento 2: Таблица catalog_product_index_eav_temp и другие temp таблицы

12.08.2020 0 comments » Views: 243

Во время реиндекса большой базы интернет магазина на платформе Magento 2 столкнулся с одной очень интересной таблицей catalog_product_index_eav_temp, о ней и будет сегодняшняя заметка..

Предистория

Из-за большого беклога в change log таблице, было решено не ждать Mview реиндекса, а запустить ручной, вот так

Список кодов индексеров и их названий

И процесс реиндекса затянулся. После примерно 1.5 часа ожидания, я решил проверить все ли ок с процессом и заглянул в стек выполнения при помощи strace ( https://man7.org/linux/man-pages/man1/strace.1.html ). Пользоваться не сложно, ищем id процесса, я использую для этого htop и затем запускаем вывод стека выполнения или логируем его в файл. Я предпочитаю последнее. Вся команда выглядит так:

  • -p <PID> = номер процесса
  • -s <SIZE> = кол-во сиволов в строке
  • -o <FILE> = путь к файлу, если хотим перенаправить вывод в файл

Далее ждем 2-3 минуты, прерываем выполнение и смотрим что там записалось. Я увидел там некоторые SELECT и вот примерно такой INSERT

Отлично подумал я, это как раз новая таблица, которая после окончания просто заменит собой старую. Вот я и решил пойти и посмотреть сколько там в этой таблице данных, чтобы понять сколько уже сделанно и сколько еще ждать.

Однако, к моему удивлению, я не нашел такой таблицы в базе. Хмм...

Развязка

Оказалось, что это временная таблица. Такие таблицы создаются командой

и их особенность в  том, что они уникальны внутри одной сессии подключения. Т.е. у моего индексера своя сессия и своя таблица catalog_product_index_eav_temp. Если я подключучсь к базе, то я не увижу ее, более того я могу создать параллельно свою таблицу с таким же именем и работать с ней.

13.1.20.2 CREATE TEMPORARY TABLE Statement
You can use the TEMPORARY keyword when creating a table. A TEMPORARY table is visible only within the current session, and is dropped automatically when the session is closed. This means that two different sessions can use the same temporary table name without conflicting with each other or with an existing non-TEMPORARY table of the same name. (The existing table is hidden until the temporary table is dropped.)

https://dev.mysql.com/doc/refman/8.0/en/create-temporary-table.html

Т.к. таблица создана индексером, я не мог увидеть и подсчитать данные которые уже находятся в ней.

В общем мне оставалось только ждать. К моему счастью, индексер закончил работу всего через 5 минут, после того как я разобрался во всем этом.

 

Author: | Rating: 4/5 | Tags: , ,

Leave a Reply

Your email address will not be published. Required fields are marked *

Allowed HTML-tags: <a>, <code>, <i>, <em>, <strong>, <b>, <u>, <strike>