« Настройка конфига MySQL | Про Knol »
У мускуля есть одна интересная особенность, которая с трудом осознаётся людьми, профессионально работающими с серверами баз данных. А именно, что в 21м веке, в продукте, который используется широкой аудиторией, что-то может глючить настолько сильно, что приводит его в полностью нерабочее состояние. Это я говорю о зависающих процессах. Казалось бы, такого быть не может, потому что не может быть никогда, но оно есть.
Даже мускульные “гуру” советуют в параллель с мускулом запускать скрипт, который бы прибивал усопшие процессы. Представляю себе какой бы поднялся вселенский вой, если что-то подобное наблюдалось в MS SQL.
Бонус: скрипт для прибития долгоиграющих процессов. Написан с использованием моей библиотеки, так что можно рассматривать его как написанный на пхп-псевдокоде, некоторые самоочевидные фукции нужно дописать.
function KillHangedProcesses()
{
$query = “SHOW FULL PROCESSLIST”;
$rws = ‘Id, db, Command, Time, State, Info’;
$rows = SqlRunCols($query, $rws);
foreach ($rows as $row)
{
$tt = GetParamArr($row, ‘Time’, ”);
if (600 > $tt)
continue;
$cm = GetParamArr($row, ‘Command’, ”);
if (‘Query’ != $cm)
continue;
$id = GetParamArr($row, ‘Id’, ”);
$qq = “KILL $id”;
$res = SqlRunResult($qq, 0);
DebugMsg(“KILL|$qq|$res”);
}
}function SqlRunCols($query, $cols)
{
LoadSettings();
$dbh = MySQLConnect();
$result = @mysql_query($query, $dbh);
$row = @mysql_fetch_assoc($result);
$ret = array();
$colz = ParseCommaSeparatedNoEmpty($cols);
while ($row)
{
$arx = array();
foreach ($colz as $colid)
{
$cntx = GetParamArr($row, $colid, ”);
$arx[$colid] = $cntx;
}
$ret[] = $arx;
$row = @mysql_fetch_assoc($result);
}
return $ret;
}
9 Responses
July 28th, 2008 at 23:59:56
// php gravatar() ?>1Тпррр, что значит “если бы” ? Всё зависит от реализации, и My и в MS. Один-эс-семь-двадцать-пять замечательно создаёт такие процессы в MS SQL и кроме как руками хрен их вообще убьёшь. Про восьмёрку не знаю, но догадываюсь.
А при нормальной работе с MySQL и там всё будет нормлаьно =)
————–
ИМХО. Основано на опыте =)
July 29th, 2008 at 09:38:53
// php gravatar() ?>2О, вот это супер, спасибо большое !
July 29th, 2008 at 22:24:30
// php gravatar() ?>3Zhilinsky, под МС я всегда мог найти решение, как сделать чтобы сервер не вешался. А тут самые главные спецы говорят открытым текстом что решения нет и надо прибивать процессы.
По-моему разница сущесвтенная.
August 4th, 2008 at 06:55:20
// php gravatar() ?>4Да, есть такое. Бывает в мускулах висят процессы по > 200 сек. (это что я замечал). Надо будет убивать их.
August 4th, 2008 at 18:26:53
// php gravatar() ?>5Висящие процессы это зло мускула. согласен. Боросться с этим нужно однозначно.
August 10th, 2008 at 00:29:07
// php gravatar() ?>6А подробнее применение можно?
К примеру первая функция как я понял для того чтобы убивать процесы, ее вызывать при каждом запуске скрипта?
Со второй не разобрался..
August 11th, 2008 at 20:06:32
// php gravatar() ?>7Andrew, вторая функция нужна чтобы работала первая.
August 11th, 2008 at 20:10:07
// php gravatar() ?>8Вот код на чистом php:
$link = mysql_connect(“localhost”,”user”,”password”) or die(mysql_error());
$query = “SHOW FULL PROCESSLIST”;
$ath = mysql_query($query, $link);
while($row=mysql_fetch_assoc($ath))
{
$tt = $row['Time'];
if (600 > $tt) continue;
$cm = $row['Command'];
if (‘Query’ != $cm) continue;
$id = $row['Id'];
$s = “KILL $id”;
$ath2 = mysql_query($s, $link);
}
August 11th, 2008 at 21:24:49
// php gravatar() ?>9medar, спасибо!
RSS feed for comments on this post · TrackBack URI
Написать комментарий
Про что писал
Календарь
Куйворды
Архив
Подписка на блог
Статистика подписки
Страницы
Комментарии
Последние посты
Blogroll
Счётчики
Свежие записи
Последние комментарии
Интересное на блоге
Самое комментируемое
SEO блог где палят темы is proudly powered by WordPress - BloggingPro theme modified by alexf