Одновременная запись в MySQL несколькими скриптами

RomanGC

Новичок
Одновременная запись в MySQL несколькими скриптами

Возникла такая проблема: к БД(MySQL) обращаются около 50 потоков скрипта(может и больше), при этом примерно 40% от всей записываемой информации попадает в базу. Для проверки криворукости, параллельно записи в базу, написал запись в файл с абсолютной блокировкой. Результат: в файле 100% информации, в базе 35-40$. Когда запускаю скрипт в один поток, то вся информация записывается в базу без проблем.
В чем может быть причина такой выборочности записи в базу?
PS ИМХО проблема с распределением доступа к базе, но в каком-то самоучителе вычитал, что mysql сама решает этот вопрос и проблем быть не должно.
Кода нет, но каждый поток подключается к базе mysql_connect(), потом выбирается база данных mysql_ select_ db(), производиться запись, после чего соединение с базой закрывается.
Под потоками имею ввиду одинаковые скрипты запускаемые демоном.
 

Gas

может по одной?
Всё очень просто, пишешь ошибки mysql_error() в файл, желательно и его с "абсолютной блокировкой". И смотришь на причину вставки не всех данных в базу.
 

Alexandre

PHPПенсионер
Давай уточним начальные условия:
1) я так понимаю, что твой скрипт инсертит данные в таблицу
2)потоки все - одинаковые...
3) таблица для всех "потоков" - одна (две... три )
4) при паралельном инсерте данных, записывается только 35-40 % данных?
каких данных ? данных одного скрипта, или конкретно данных со всех скриптов, т.е. реально отработано лишь 35-40 % скриптов.
5) сколько одновременно запустили скриптов?
играемся с одновременно запущенными скриптами от 2х - до ...
6) какой тип используемых таблиц.
 

stalesha

Новичок
Возможно при вставке данных блокируются таблицы через LOCK TABLES, возможно в мускуле прописано ограничение на кол-во одновременных потоков.
 

Alexandre

PHPПенсионер
Возможно при вставке данных блокируются таблицы через LOCK TABLES, возможно в мускуле прописано ограничение на кол-во одновременных потоков.
таблица лочится, другой поток ждет пока БД не отпустит таблицу. Если таблицы MyISAM - то лочится вся таблица,
если INNODB, то лочится часть таблицы. Если время ожидания слишком большое, то соответственно коннекция отваливается по таймауту. Можно увеличить число максимально открытых коненкций.
 

dimagolov

Новичок
Не верю (с) чтобы что-то писалось в мускл из пхп, это что-то по факту не записывалось, но ошибка не возвращалась. ИМХО автор не обрабатывает и/или не логирует ошибки. как только он начнет это делать сразу будет понятно в чем ошибка и можно будет что-то посоветывать конкретно а не из справочника стеля :)
собственно об этом Gas сразу сказал...
 
Сверху