Здесь очень много историй про хороших и плохих бухгалтеров, монтажников, программистов, админов, юзеров и начальников. А мне достался главный инженер… Если честно, после каждой планёрки хочется взять тетрадку и записать его перлы и безумные идеи. И этот случай явно займёт достойное место.
Надеюсь, все помнят прикол с мухами на Яндексе первого апреля этого года? С утра пораньше раздаётся звонок с приказом моментально «починить компьютер от вирусов». Бегу через три этажа, вижу на экране рой мух, невозмутимо выбираю мухобойку и ставлю рекорд: десять крылатых за шесть секунд. Сканирование завершено, все угрозы размазаны!
12:00 27.04.2014, IT happens
Я предпочитаю начинать решение проблем в программах с вопроса «а где я ошибся?», так как мой опыт показывает, что в большинстве случаев ошибка именно моя. Но иногда…
Случилось мне заниматься разработкой программного комплекса, один из компонентов которого вертелся в MySQL. При этом всю логику взаимодействия с БД я по возможности перенёс в хранимые процедуры внутри БД. Возникла необходимость оптимизации одной из хранимых процедур, которая при попытке всунуть в БД жалкие 10К строк зависала на два часа. Нужно было найти узкое место этой процедуры. Поиск «бутылочного горлышка» довольно прост: засекаем, сколько миллисекунд уходит на каждый шаг, смотрим, где проблема…
Проблема нашлась гораздо раньше: СУБД категорически отказалась выдавать нам информацию о миллисекундах. Даже под пытками. И даже с Гуглом. При этом информации в интернете было на удивление мало; у меня даже закралось страшное подозрение, которое со временем окрепло, что народ свои базы
Не было информации о том, что ведутся работы по устранению проблемы. Ни слово о том, что в версиях с xx.x.xx проблема решена. Просто признание, что жопа есть.
Произнеся приличествующие случаю слова скорби и смирения, я стал думать, как быть в данной ситуации.
На помощь мне пришёл метод Монте-Карло. В моём случае вероятность изменения значения секунды во время атомарной операции была пропорциональна количеству миллисекунд, на эту операцию затрачиваемых. Тут-то и пригодился ввод из 10К строк.
Не могу сказать, что найденное решение уникально. Но в процессе этой разработки я приобрёл полезный опыт, являющийся синтезом двух крылатых фраз: «жизнь — сука, никому нельзя верить» и «на хитрую задницу найдется хвост с винтом».
Кстати, в результате оптимизации я довольно много узнал о внутренней логике MySQL, встроенных в него инструментах отладки и оптимизации и всерьёз зауважал его разработчиков. Временные таблицы, индексы, JOIN вместо вложенных SELECT — и время внесения 10K строк сократилось с двух часов до трёх минут.
12:12 27.04.2014, IT happens
Обнаружил, что при съёмке видео мобильником в конце каждого ролика слышится отчётливое «гав». Оказалось, я сам настроил телефон так, чтобы в момент выключения съёмки срабатывал виброзвонок. Его звук микрофон и воспринимает как лай. Вот где «собака» зарыта!
12:24 27.04.2014, IT happens
Админю уже чуть более пяти лет. Гетерогенные сети, цифровые АТС, много чем занимался и увлекался, где-то поверхностно, где-то более глубоко. Но каждый раз, сталкиваясь с какой-то проблемой, замечаю, что мысли начинают искать ответы исключительно в каких-то дебрях подсознания. Например, если не работает мышь, понятное дело, что проблема в основном будет заключаться либо в самой хвостатой, либо только в проводе, но мозг первым делом задумается: может быть, полетел USB-контроллер на матери? В общем, таким вот причудливым способом от сложного к простому моя голова ищет решения проблем.