Hi! uname -a Linux mysql1 2.6.16TD322 #8 SMP Thu Jul 27 18:39:45 MSD 2006 i686 unknown unknown GNU/Linux
mysqld -V mysqld Ver 4.1.22-standard-log for pc-linux-gnu on i686 (MySQL Community Edition - Standard (GPL)) Выполнялся такой запрос из под PHP (в нем была допущена ошибка) $Query = "SELECT SQL_SMALL_RESULT DEV.ID,I1.A as A1,I1.B as B1,I1.C as C1,I1.D as D1,I2.A as A2,I2.B as B2,I2.C as C2,I2.D as D2,DEV.ID_ROLE,". "I3.A as A3,I3.B as B3,I3.C as C3,I3.D as D3,I4.A as A4,I4.B as B4,I4.C as C4,I4.D as D4, DEV.SNMPCOMM_C, DEV.SNMPCOMM_M,DEV.LGSNMP,". "DEV.LGSNMP2,DEV.SNMPPORT1,DEV.SNMPPORT2,DEV.LGSSH,MD.NAME_MODEL,DEV.LGDEAD,DEV.LGAUTOCH,DEV.TACACS_KEY_C,DEV.TYPEDEV FROM $TBDEV". " AS DEV FORCE INDEX (ID_IOF)". " LEFT JOIN $TBDEVIP AS I1 ON I1.ID=DEV.ID_IPADDR". " LEFT JOIN $TBDEVIP AS I2 ON I2.ID=DEV.ID_REALIP". " LEFT JOIN $TBDEVIP AS I3 ON I1.ID=DEV.ID_IPADDR". " LEFT JOIN $TBDEVIP AS I4 ON I2.ID=DEV.ID_REALIP". " LEFT JOIN $TBDEVMOD AS MD ON MD.ID=DEV.ID_MODEL". " WHERE DEV.ID_IOF=$SubDiv order by DEV.LGDEAD,DEV.TYPEDEV,I1.A,I1.B,I1.C,I1.D"; Корректный запрос после того как ошибка была исправлена $Query = "SELECT SQL_SMALL_RESULT DEV.ID,I1.A as A1,I1.B as B1,I1.C as C1,I1.D as D1,I2.A as A2,I2.B as B2,I2.C as C2,I2.D as D2,DEV.ID_ROLE,". "I3.A as A3,I3.B as B3,I3.C as C3,I3.D as D3,I4.A as A4,I4.B as B4,I4.C as C4,I4.D as D4, DEV.SNMPCOMM_C, DEV.SNMPCOMM_M,DEV.LGSNMP,". "DEV.LGSNMP2,DEV.SNMPPORT1,DEV.SNMPPORT2,DEV.LGSSH,MD.NAME_MODEL,DEV.LGDEAD,DEV.LGAUTOCH,DEV.TACACS_KEY_C,DEV.TYPEDEV FROM $TBDEV". " AS DEV FORCE INDEX (ID_IOF)". " LEFT JOIN $TBDEVIP AS I1 ON I1.ID=DEV.ID_IPADDR". " LEFT JOIN $TBDEVIP AS I2 ON I2.ID=DEV.ID_REALIP". " LEFT JOIN $TBDEVIP AS I3 ON I3.ID=DEV.ID_IPTUN1". " LEFT JOIN $TBDEVIP AS I4 ON I4.ID=DEV.ID_IPTUN2". " LEFT JOIN $TBDEVMOD AS MD ON MD.ID=DEV.ID_MODEL". " WHERE DEV.ID_IOF=$SubDiv order by DEV.LGDEAD,DEV.TYPEDEV,I1.A,I1.B,I1.C,I1.D"; Если сравнить эти два запроса, то легко можно увидеть, что это обычная ошибка блочного копирования. MySQL должен был бы по идее выдать сообщение о некорректном связывании таблиц, но вместо этого он выдал это: MySQLi Error: (1030) Получена ошибка 28 от обработчика таблиц тоесть системная ошибка нет места на диске. Разбор полетов показал, что при выполнении такого запроса MySQL съедает всю отведенную ему настройками память (смотрелось утилитой top), и очень сильно нагружает процессор. Пояснение к запросу - связывалось три таблицы, в одной устройства, в другой модели устройств, в третьей IP адреса. Поскольку к устройству может быть привязано от одного до 4 IP адресов, таблица IP адресов связывалась 4 раза под разными псевдонимами (и в этой части была допущена ошибка) структура таблиц: $TBDEV CREATE TABLE `all_dev` ( `ID` int(10) unsigned NOT NULL auto_increment `ID_IPADDR` int(11) unsigned NOT NULL default '0', `ID_REALIP` int(11) unsigned NOT NULL default '0', `ID_IPTUN1` int(11) unsigned NOT NULL default '0', `ID_IPTUN2` int(11) unsigned NOT NULL default '0', ............ PRIMARY KEY (`ID`), ........... ) ENGINE=MyISAM AUTO_INCREMENT=2374; $TBDEVIP CREATE TABLE `dev_ipaddr` ( `ID` int(10) unsigned NOT NULL auto_increment, `A` tinyint(3) unsigned NOT NULL default '0', `B` tinyint(3) unsigned NOT NULL default '0', `C` tinyint(3) unsigned NOT NULL default '0', `D` tinyint(3) unsigned NOT NULL default '0', .... PRIMARY KEY (`ID`), KEY `IP` (`A`,`B`,`C`,`D`) ) ENGINE=MyISAM AUTO_INCREMENT=4660; $TBDEVMOD CREATE TABLE `dev_model` ( `ID` int(10) unsigned NOT NULL auto_increment, `NAME_MODEL` varchar(40) NOT NULL default '', ..... PRIMARY KEY (`ID`), ..... ) ENGINE=MyISAM AUTO_INCREMENT=22; -- MySQL General Mailing List For list archives: http://lists.mysql.com/mysql To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]