Автор Тема: Пересечение запросов mysql  (Прочитано 8482 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Lexus1990

  • Начинающий
  • *
  • Сообщений: 19
  • Рейтинг: 0
    • Просмотр профиля
  • Откуда: Москва
Пересечение запросов mysql
« : 09 августа 2011, 17:08:16 »
Добрый день. Вопрос по поводу mysql. У меня есть много скриптов, на INSERT, DELETE и SELECT которые идет одновременно, и некоторые скрипты идут некорректно, например парсится файл xml и INSERT вставляет не все. Может ли это быть из-за одновременного запроса DELETE в базу? как можно поступить, если процессов очень много и по времени их невозможно разделить, может быть что-то связанное в wiew (только база большая - 15 млн. записей)?

Оффлайн VanDyke

  • Модераторы
  • Ветеран
  • *****
  • Сообщений: 1800
  • Рейтинг: 73
  • Пол: Мужской
  • Network Warrior
    • Просмотр профиля
  • Откуда: Destination network unreachable
Re: Пересечение запросов mysql
« Ответ #1 : 09 августа 2011, 17:12:04 »
Lexus1990, почитай про блокировки. Они разные в движках InnoDB и MyISAM.
В общем случае при начале insert блокируется таблица (exclusive lock), и сделать delete уже нельзя.
Not as ultimate as 42, but pretty close...

Оффлайн Lexus1990

  • Начинающий
  • *
  • Сообщений: 19
  • Рейтинг: 0
    • Просмотр профиля
  • Откуда: Москва
Re: Пересечение запросов mysql
« Ответ #2 : 09 августа 2011, 17:41:27 »
Цитировать
В общем случае при начале insert блокируется таблица
У меня Inno DB - а необорот - при DELETE - блокируется ли таблица?

Оффлайн VanDyke

  • Модераторы
  • Ветеран
  • *****
  • Сообщений: 1800
  • Рейтинг: 73
  • Пол: Мужской
  • Network Warrior
    • Просмотр профиля
  • Откуда: Destination network unreachable
Re: Пересечение запросов mysql
« Ответ #3 : 09 августа 2011, 17:57:27 »
- при DELETE - блокируется ли таблица?
конечно.
Not as ultimate as 42, but pretty close...

Оффлайн Lexus1990

  • Начинающий
  • *
  • Сообщений: 19
  • Рейтинг: 0
    • Просмотр профиля
  • Откуда: Москва
Re: Пересечение запросов mysql
« Ответ #4 : 09 августа 2011, 20:03:45 »
Я так понимаю - единственный вариант - чтобы запросы не пересекались по времени?

Оффлайн VanDyke

  • Модераторы
  • Ветеран
  • *****
  • Сообщений: 1800
  • Рейтинг: 73
  • Пол: Мужской
  • Network Warrior
    • Просмотр профиля
  • Откуда: Destination network unreachable
Re: Пересечение запросов mysql
« Ответ #5 : 09 августа 2011, 20:26:45 »
Lexus1990, единственный вариант чего?
Запрос вполне себе может висеть ждать lock. Наивно ожидать один запрос с эксклюзивной блокировкой на таблицу в определенный момент времени  :)
Not as ultimate as 42, but pretty close...

Оффлайн Lexus1990

  • Начинающий
  • *
  • Сообщений: 19
  • Рейтинг: 0
    • Просмотр профиля
  • Откуда: Москва
Re: Пересечение запросов mysql
« Ответ #6 : 09 августа 2011, 21:16:38 »
Цитировать
Запрос вполне себе может висеть ждать lock. Наивно ожидать один запрос с эксклюзивной блокировкой на таблицу в определенный момент времени 
Не понял - можно поподробнее

Оффлайн VanDyke

  • Модераторы
  • Ветеран
  • *****
  • Сообщений: 1800
  • Рейтинг: 73
  • Пол: Мужской
  • Network Warrior
    • Просмотр профиля
  • Откуда: Destination network unreachable
Re: Пересечение запросов mysql
« Ответ #7 : 09 августа 2011, 21:24:45 »
Не понял - можно поподробнее
Дык особо и нечего поподробнее. Если к mysld открыто два соединения, по одному пришел вначале DELETE а по другому INSERT - INSERT будет висеть в статусе ожидания пока не отработает DELETE. И таких запросов может быть равным параметру max_connections, который по умолчанию 100 (на самом деле в документации max_connections-1 но вроде это не так)
101 запрос получит отлуп что превышено количество соединений.
Not as ultimate as 42, but pretty close...

Оффлайн Lexus1990

  • Начинающий
  • *
  • Сообщений: 19
  • Рейтинг: 0
    • Просмотр профиля
  • Откуда: Москва
Re: Пересечение запросов mysql
« Ответ #8 : 09 августа 2011, 21:28:14 »
Значит если выполняется 10 запросов одновременно - это нормально - они выполнятся? max_connections смотреть в mu.cnf?

Оффлайн VanDyke

  • Модераторы
  • Ветеран
  • *****
  • Сообщений: 1800
  • Рейтинг: 73
  • Пол: Мужской
  • Network Warrior
    • Просмотр профиля
  • Откуда: Destination network unreachable
Re: Пересечение запросов mysql
« Ответ #9 : 09 августа 2011, 21:33:12 »
если выполняется 10 запросов одновременно - это нормально - они выполнятся?
если не закроется соединение то запрос будет ожидать выполнения пока не выполнится.
Not as ultimate as 42, but pretty close...

Оффлайн Lexus1990

  • Начинающий
  • *
  • Сообщений: 19
  • Рейтинг: 0
    • Просмотр профиля
  • Откуда: Москва
Re: Пересечение запросов mysql
« Ответ #10 : 09 августа 2011, 21:37:50 »
ок - спасибо. теперь остается только с бубном попрыгать - ведь это не протестируешь.

Оффлайн VanDyke

  • Модераторы
  • Ветеран
  • *****
  • Сообщений: 1800
  • Рейтинг: 73
  • Пол: Мужской
  • Network Warrior
    • Просмотр профиля
  • Откуда: Destination network unreachable
Re: Пересечение запросов mysql
« Ответ #11 : 09 августа 2011, 21:40:49 »
Lexus1990, почему? Можно запустить INSERT на тысяч этак 100-200 записей и параллельно запустить UPDATE.
В processlist будет четко видно как UPDATE ожидает. Да, SELECT тоже будет ожидать пока UPDATE не отработает, т.к. блокировка эксклюзивная - и на чтение и на запись.
Not as ultimate as 42, but pretty close...

Оффлайн Lexus1990

  • Начинающий
  • *
  • Сообщений: 19
  • Рейтинг: 0
    • Просмотр профиля
  • Откуда: Москва
Re: Пересечение запросов mysql
« Ответ #12 : 09 августа 2011, 22:08:41 »
Цитировать
В processlist будет четко видно как UPDATE ожидает
В смысле в htop если смотреть mysql процесс?
что происходит, если у меня больше, чем 100 запросов - они не ставятся в очередь, а просто не выполняются?

Оффлайн VanDyke

  • Модераторы
  • Ветеран
  • *****
  • Сообщений: 1800
  • Рейтинг: 73
  • Пол: Мужской
  • Network Warrior
    • Просмотр профиля
  • Откуда: Destination network unreachable
Re: Пересечение запросов mysql
« Ответ #13 : 10 августа 2011, 07:22:06 »
В смысле в htop если смотреть mysql процесс?
в смысле show processlist или show full processlist в родном клиенте.
они не ставятся в очередь, а просто не выполняются?
соединение с сервером будет сброшено.
Not as ultimate as 42, but pretty close...

Оффлайн Lexus1990

  • Начинающий
  • *
  • Сообщений: 19
  • Рейтинг: 0
    • Просмотр профиля
  • Откуда: Москва
Re: Пересечение запросов mysql
« Ответ #14 : 10 августа 2011, 09:57:29 »
Цитировать
в смысле show processlist или show full processlist в родном клиенте.
Я делаю все через консоль и через php my admin. Щас установил SQLyog. Момент этот к сожалению никак не поймаешь. Не будешь же целый день сидеть и создавать запросы?
Цитировать
соединение с сервером будет сброшено.
И все 100 запросов не выполнятся?