Выбивается только более «легкая» транзакция, и сразу же, моментально, как только был обнаружен дедлок. Никакого таймаута там нет.
Такое чувство, что слово «deadlock» народ неправильно понимает — это не тот случай, когда две транзакции, как бараны, стоят и смотрят друг на друга часами.
10 — чтобы было, и чтобы было больше 2, но меньше бесконечности.
Реальное число retries = 2 (со второй попытки все происходит успешно).
Всё, разумеется, анализируется, и в случае появления 10-й попытки перезапустить транзакцию (в логах) будут применяться уже другие меры — к коду, к порядку написания запросов, и т.д.
Читайте MySQL документацию, и не учите меня жить) Там написано, что именно нужно всего лишь повторить запрос. Повторный запрос попадет в другие условия на базе (дедлока уже не будет, конфликтующая транзакция уже либо выполнится, либо захватит локи), поэтому повторный запрос либо выполнится успешно сразу, либо немного посидит на локах.
10 — для перестраховки. Я же не зря логгирую это — и по логам, все дедлоки у меня резолвятся со второй попытки.
Вопрос насчет того, как именно мне передать результат mysqli_query в мою вызывающую функцию, является наименее критичным и наименее важным, на самом деле. Я же не пишу этот код для собеседования в Гугл. Даже регистру букв даже были претензии)
Тот код был чисто для иллюстративных целей.
В-третьих — не вижу никакого преимущества в использовании &$result.
Тогда:
— Внутри функции my_mysqli_query создается локальная переменная $result.
— Ей присваивается значение, выбранное из базы (это могут быть сотни строк)
— этот объект возвращается в вызывающую функцию копирующим конструктором:
$Result = my_mysqli_query($link, $query);
— при этом происходит передача значения через стэк, а локальная переменная $result выхоит из cкоупа и разрушается (вызывается деструктор объекта).
Т.е. происходит лишняя операция создания объекта, копирования и разрушения объекта при каждом вызове my_mysqli_query().
Если конечно внутри PHP не реализованы смарт объекты с поддержкой референсов на их юсадж каунт, о чем я не знаю, поэтому полагаться на эту гипотетическую возможность не хочу. Поэтому сужу по опыту из языка С.
Кстати, если бы эти smart objects они были реализованы — то не существовало/не требовалось бы в PHP оператора передачи переменной по ссылке (&), это было бы лишним.
SPDY модуль собран (не вами) со старой версией OpenSSL, и надо его пересобрать, указав ему на новые исходники OpenSSL.
Именно так я сделал для nginx, для апача все должно быть аналогично.
Пересобрать openssl недостаточно. Надо еще пересобрать nginx с указанием исходников нового openssl, указав опцию --with-openssl, тогда все будет хорошо.
Хакинтош, кстати, с наскоку не заработает. Если мы про последний, Mountain Lion 10.8.3.
Дело в том, что в нем нет ядра, которое запускается на атоме. Разработчики хакинтоша прямо и недвусмысленно об этом говорят, что поддерживать атом не будут, не в этой жизни.
Пруф: tonymacx64.blogspot.ru/2012/10/iatkos-ml-mountain-lion-108-delayed.html#_
Другие образы, не iATKOS, тоже не запустятся, по той же причине. Кстати ошибка Unknown4 of GetVar ровно об этом.
Но выход есть: пару недель назад ядро мака сломали и подточили его — теперь оно работает на атоме: www.osx86.net/view/3726-atom_kernel_10.8.3.html
Над скачать это ядро, заменить его в инсталлере Mountain Lion, потом, после установки, заменить его в установленной версии. И только после этого хаикнтош в VirtualBox запустится на этом нетбуке на Атоме. Проверено — как раз именно этим счас занимаюсь :)
Думаю может статью тут написать про это :)
У меня тоже различий было много: команда fc ze6.fd.old ze6.fd > diff.txt выдает дифф файл на 17кб.
Это нормально, поскольку биос не просто перепакованный, он еще сжат архиватором, поэтому и разница при двоичном сравнении. Если вы делали все правильно, то все получится. Успехов :)
ЗЫ у меня полет нормальный.
Такое чувство, что слово «deadlock» народ неправильно понимает — это не тот случай, когда две транзакции, как бараны, стоят и смотрят друг на друга часами.
Реальное число retries = 2 (со второй попытки все происходит успешно).
Всё, разумеется, анализируется, и в случае появления 10-й попытки перезапустить транзакцию (в логах) будут применяться уже другие меры — к коду, к порядку написания запросов, и т.д.
а у меня база 5.5.44. Забыл сказать.
10 — для перестраховки. Я же не зря логгирую это — и по логам, все дедлоки у меня резолвятся со второй попытки.
Ставьте теперь плюсики)
Тот код был чисто для иллюстративных целей.
Тогда:
— Внутри функции my_mysqli_query создается локальная переменная $result.
— Ей присваивается значение, выбранное из базы (это могут быть сотни строк)
— этот объект возвращается в вызывающую функцию копирующим конструктором:
$Result = my_mysqli_query($link, $query);
— при этом происходит передача значения через стэк, а локальная переменная $result выхоит из cкоупа и разрушается (вызывается деструктор объекта).
Т.е. происходит лишняя операция создания объекта, копирования и разрушения объекта при каждом вызове my_mysqli_query().
Если конечно внутри PHP не реализованы смарт объекты с поддержкой референсов на их юсадж каунт, о чем я не знаю, поэтому полагаться на эту гипотетическую возможность не хочу. Поэтому сужу по опыту из языка С.
Кстати, если бы эти smart objects они были реализованы — то не существовало/не требовалось бы в PHP оператора передачи переменной по ссылке (&), это было бы лишним.
dev.mysql.com/doc/refman/5.5/en/innodb-deadlocks.html
Именно так я сделал для nginx, для апача все должно быть аналогично.
Пересобрать openssl недостаточно. Надо еще пересобрать nginx с указанием исходников нового openssl, указав опцию --with-openssl, тогда все будет хорошо.
Дело в том, что в нем нет ядра, которое запускается на атоме. Разработчики хакинтоша прямо и недвусмысленно об этом говорят, что поддерживать атом не будут, не в этой жизни.
Пруф: tonymacx64.blogspot.ru/2012/10/iatkos-ml-mountain-lion-108-delayed.html#_
Другие образы, не iATKOS, тоже не запустятся, по той же причине. Кстати ошибка Unknown4 of GetVar ровно об этом.
Но выход есть: пару недель назад ядро мака сломали и подточили его — теперь оно работает на атоме:
www.osx86.net/view/3726-atom_kernel_10.8.3.html
Над скачать это ядро, заменить его в инсталлере Mountain Lion, потом, после установки, заменить его в установленной версии. И только после этого хаикнтош в VirtualBox запустится на этом нетбуке на Атоме. Проверено — как раз именно этим счас занимаюсь :)
Думаю может статью тут написать про это :)
www.dropbox.com/sh/5yfhbn2j8a2hxd7/lszgbO1m6j?m
Это нормально, поскольку биос не просто перепакованный, он еще сжат архиватором, поэтому и разница при двоичном сравнении. Если вы делали все правильно, то все получится. Успехов :)
ЗЫ у меня полет нормальный.