Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: #1213 - Deadlock found when trying to get lock; try restarting transaction

Сообщения:  [1-6] 

 
 автор: Eugene77   (04.04.2012 в 17:22)   письмо автору
 
   для: cheops   (04.04.2012 в 15:13)
 

Ура!
Разобрался!
Просто я тип таблицы неправильно выбрал - MEMORY

Поменял на InnoDB - теперь база летает как пташка (как минимум на 2 порядка быстрей работает)

  Ответить  
 
 автор: Eugene77   (04.04.2012 в 16:32)   письмо автору
 
   для: cheops   (04.04.2012 в 15:56)
 

>Никто больше в этот момент не может работать с таблицей, правильно я понимаю? Так вроде так и должно быть?
Два процесса запущены на одном компьютере.
Каждый из них где-то раз в секунду обращается к базе.
При этом с вероятностью 1 к 50 локирует ряд общих таблиц.

Мне бы хотелось, чтобы при запросе к этим таблицам все желающие просто ждали, когда они освободятся, но выходит не так.
Процессы в основном, работают нормально, хоть и с необъянимыми задержками в десятки секунд, тогда как запросы к таблицам сами по себе длятся сотые, ну максимум, десятые доли секунды,
а я из РМА вообщен ен могу в базу заглянуть!
(Иногда получается, но редко)

  Ответить  
 
 автор: cheops   (04.04.2012 в 15:56)   письмо автору
 
   для: Eugene77   (04.04.2012 в 15:49)
 

Никто больше в этот момент не может работать с таблицей, правильно я понимаю? Так вроде так и должно быть?

  Ответить  
 
 автор: Eugene77   (04.04.2012 в 15:49)   письмо автору
 
   для: cheops   (04.04.2012 в 15:13)
 

Снимаю блокировку сразу как все запросы связанные с этой таблицей закончу.
UNLOCK TABLES;

  Ответить  
 
 автор: cheops   (04.04.2012 в 15:13)   письмо автору
 
   для: Eugene77   (04.04.2012 в 15:05)
 

>а просто LOCK TABLES points WRITE, results WRITE, rangpoints WRITE;
А блокировку потом снимаете?

  Ответить  
 
 автор: Eugene77   (04.04.2012 в 15:05)   письмо автору
 
 

Я первый раз пробую локировать таблицы, поэтому не знаю как подступиться к решению этой проблемы.
Запрос вот так выглядит, на который я получаю ответ скопированный в заголовок темы.
INSERT INTO rangpoints (
            pointNum,
            numTesters,
            smoothness,
            testers,
            parent1,
            parent2,
            parent1frequency,
            parent2frequency
            )SELECT 
            points.num,
            COUNT(DISTINCT results.testerNum ),
            min(results.smoothness) AS smoothness,
            GROUP_CONCAT(DISTINCT results.testerNum SEPARATOR ',') ,
            points.parent1,
            points.parent2,
            count(points.parent1),         
            count(points.parent2)     
             FROM points, results
             WHERE  
             points.num = results.pointNum 
             AND points.crc IS NOT NULL
             
             GROUP BY points.num
             
            HAVING 
             smoothness > 0 AND
             
             ORDER BY  RAND()
             
             LIMIT 1000

Таблица типа MEMORY, но выборка в неё из InnoDB, впрочем, я не пишу "start transaction",
а просто LOCK TABLES points WRITE, results WRITE, rangpoints WRITE;

Это таой запрос у меня периодически из PHP посылается, а я попробовал его без лока из PMA,
в результате получил ответ (название темы)

  Ответить  

Сообщения:  [1-6] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования