|
|
|
| Привет всем!
У меня проблема. Существует Интернет-магазин с MySQL, в таблицах хранится разная инфа о продаваемой музыке, покупках посетителей и т.д. Раньше всё работало нормально, но где-то в последний месяц на сервере периодически стали возникать ошибки при использовании UPDATE / INSERT вида:
INSERT INTO tracks SET artist_id = '2332', singer_id = '248', album_id = '4332', name = 'track N1': Can't lock file (errno: 11)
|
Хотелось бы выяснить, что это за ошибка, причину ошибки и устранить её. Мне кажется, что это может быть связано с ежедневно увеличивающимся числом обращений к базе. Необходимо ли осуществлять блокировку конкретной таблицы (на чтение, запись?) при всех запросах на изменение/добавление данных в эту таблицу? Или здесь дело в другом?
Спасибо за внимание...буду очень признателен за любую оказанную поддержку! | |
|
|
|
|
|
|
|
для: North-E
(22.11.2006 в 16:18)
| | Вы испльзуете оператор LOCK? | |
|
|
|
|
|
|
|
для: cheops
(22.11.2006 в 16:33)
| | Для работы с MySQL используется специальный класс. Функции класса, которая осуществляет операции UPDATE/DELETE, представлена в коде:
function set($table, $fields, $id = false)
{
if ($this->con === false)
$this->connect();
$q = $id !== false ? "UPDATE $table SET " : "INSERT INTO $table SET ";
for ($i = 0; list($name, $value) = each($fields); $i++)
{
if(is_array($value))
continue;
if ($value === false)
$q .= ($i?", ":"")."$name = NULL";
else
$q .= ($i?", ":"")."$name = '".addslashes($value)."'";
}
if ($id !== false)
$q .= " WHERE id = $id";
if (!mysql_query($q, $this->con))
{
echo "$q: ".mysql_error($this->con);
return false;
}
else
if ($id === false)
return mysql_insert_id($this->con);
else
return $id;
}
|
Нигде в пределах класса оператор LOCK не используется, так же как не используется при непосредственном вызове функции set из исполняемого скрипта. | |
|
|
|
|
|
|
|
для: North-E
(22.11.2006 в 16:18)
| | А таблица tracks какого типа? | |
|
|
|
|
|
|
|
для: cheops
(23.11.2006 в 00:41)
| | Все таблицы типа MyISAM. | |
|
|
|