Deadlock не удается излечить - MySQL

Узнай цену своей работы

Формулировка задачи:

Привет всем. Есть проект с высокой нагрузкой (1000 человек онлайн). Проект на php + mysql. В базе данных есть таблица с записями, которая юзается чуть ли не в половине методов. Иногда выбираем из нее, иногда удаляем, обновляем, вставляем и т.д. Для блокировки записей юзается FOR UPDATE, чаще всего большинство запросов в методе идет через транзакции. Т.к. нагрузка не маленькая, в районе 1000 человек чуть ли не ежесекундно работает с этой таблицей. Дедлоки есть как на инзертах, так и на селектах. Чтобы избавиться от этого было решено выборку и блокировку записей из таблицы вытащить в отдельный метод, который сначала выбирал с использованием FOR UPDATE, а потом в спец поле записывал время блокировки, все это в отдельной транзакции. Т.е. схема такая - записи выбрали и проставили им некоторый lock_time, другие уже трогать их не должны, далее спокойно работаем с этими записями. - не спасло. Кто-нибудь может еще что-то посоветовать?

Решение задачи: «Deadlock не удается излечить»

textual
Листинг программы
CREATE TEMPORARY TABLE IF NOT EXISTS tempTable1 AS (SELECT * FROM table1)

Объяснение кода листинга программы

  1. Создание временной таблицы tempTable1 с помощью оператора CREATE TEMPORARY TABLE IF NOT EXISTS.
  2. В скобках указывается запрос SELECT * FROM table1, который копирует все данные из таблицы table1 в новую таблицу tempTable1.
  3. Запрос выполняется с помощью оператора AS.
  4. Проверка на существование таблицы tempTable1 с помощью оператора IF NOT EXISTS. Если таблица не существует, она будет создана.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.286 из 5