У мускуля есть одна интересная особенность, которая с трудом осознаётся людьми, профессионально работающими с серверами баз данных. А именно, что в 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;
}

 

Похожие посты