Разве плохо создавать много временных таблиц mysql одновременно?


8

Мне нужно провести тщательный статистический анализ, чтобы предоставить пользователям некоторые данные. В настоящее время я собираю данные из mysql и обрабатываю их через PHPмассивы. Тем не менее, временные таблицы mysql намного лучше (чрезвычайно эффективнее и быстрее, чем массивы PHP; очевидно, из-за их механизма).

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

Может ли это создать проблемы для сервера MySQL? Или я могу использовать его как альтернативу массивам PHP в многочисленных одновременных запросах?

Ответы:


6

Вы хотите максимально запретить создание временных таблиц: Запретить копирование во временную таблицу (sql)

Они плохо работают в MySQL Replication: как обновляются binlogs для временных таблиц MySQL?

Поскольку временные таблицы являются фактом жизни в мире БД, вам, возможно, придется внести неортодоксальные изменения, чтобы приспособить их существование.

Обычно mysqld имеет привычку размещать таблицы tmp в том /tmpили ином месте, где настроен tmpdir . Это обычно на каком-то плохом ничего не подозревающем диске.

Интересная альтернатива - настроить RAM-диск и перенастроить tmpdir для его использования.

ШАГ 01: Создание точки монтирования для RAM-диска

mkdir /var/tmpfs

ШАГ 02: Добавьте RAM-диск в / etc / fstab (16 ГБ)

echo "none   /var/tmpfs              tmpfs   defaults,size=16g        1 2" >> /etc/fstab

ШАГ 03: Добавьте эту строку в /etc/my.cnf

[mysqld]
tmpdir=/var/tmpfs

ШАГ 04: Включить RAM-диск

Вы можете сделать одно из следующего:

  1. Просто перезагрузите сервер БД
  2. mount -t tmpfs -o size=16g none /var/tmpfs

Прежде чем сделать это, убедитесь, что у вас достаточно оперативной памяти

Попробуйте!


2
Неявные временные таблицы не влияют на репликацию, будь то SBR или RBR. Явные временные таблицы отправляют все DDL по проводам.
Рик Джеймс

4

«Многие временные таблицы mysql» - потенциальные проблемы:

  • table_open_cache (и другие настраиваемые параметры) - Вы можете (но вряд ли) достигнуть некоторого предела
  • Раздувание баранов - Вы можете (но вряд ли) использовать больше баранов. Если это приводит к обмену, это действительно плохо.

Я бы не стал беспокоиться о «многих», если у вас не будет одновременно сотни временных таблиц.

Сколько потоков (SHOW PROCESSLIST; игнорировать 'Sleep') работает одновременно? Даже загруженная система редко имеет более 10 одновременно.

Для неявных временных таблиц, давайте посмотрим на SELECT, которые их вызывают; может быть возможно изменить дизайн запросов, чтобы избежать временных таблиц.

Мне не нравится использовать ram-диск - он отнимает ОЗУ от других возможностей кэширования и рискует достичь жесткого ограничения (размера диска).

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.