AskTom in Moscow: отчет Дмитрия Белобородова
Содержание
Регистрация и организация
Мероприятие AskTom in Moscow представляло из себя серию мини-докладов Тома Кайта, известного практика-популяризатора продуктов Oracle, пишущего книги и отвечающего на вопросы на сайте AskTom. Семинар проходил 24 февраля 2010 года в гостинице «Ренессанс Москва», в зале «Волга».
Организаторами перед началом семинара была приведена статистика: приехало 333 человека из 150 компаний (количество городов не запомнил, но было много иногородних: Киев, Минск, Сыктывкар, Калуга и т.д.). Девушка-организатор попросила поднять руки людей, приехавших за собственные деньги — их оказалось около трети (!).
Что понравилось:
- содержание докладов: интересно изложены, не являлись агрессивно рекламными, соблюден баланс полезных общих сведений и новой информации;
- при регистрации проблем не возникло;
- качество показанных слайдов и выданных материалов весьма хорошее (единственное, обложка оказалась перевернутой);
- питание было организовано на высоком уровне, количество приборов (3 вилки и 2 ножа разных размеров) привело даже в некоторое замешательство;
- синхронный перевод можно признать удовлетворительным (с поправкой, что переводчики явно не сильны в предметной области).
Что не понравилось:
- маленький размер зала (предполагаю, что с дальних рядов было все плохо видно);
- неудобная архитектура зала: две большие колонны заслоняли экраны.
Далее кратко изложено, что показалось интересным и оказалось записанным в блокнот.
Доклады
How Do You Know What You Know...
- Презентация
Рассказал, приведя примеры, что ошибочно полагаться на свою уверенность, что что-то знаешь:
- «знания» могут быть ошибочны;
- знания могут быть не ошибочны, но устареть.
Привел примеры ошибочности знаний из повседневной жизни (большинство ошибается в причине происхождения названия Канарских островов и Биг-Бена) и применительно к базе данных Oracle:
- конструкции SELECT INTO и FETCH...CLOSE (равнозначны);
- IN vs EXISTS (равнозначны);
- NOT IN vs NOT EXISTS (равнозначны);
- WHERE NVL(:bind, column) = column (не рекомендуется);
- FETCH ARRAY.
Предостерег от сомнительных улучшений:
- разделения хранения данных и индексов (не оказывает сильного влияния);
- пытаться все-все переносить в базу данных неразумно.
Много раз повторил, что поведение и решение, работающее в предыдущих версиях (вообще и Oracle Database в частности), может не работать в новых версиях.
The Best Way
- Презентация
В значительной степени философский доклад, хотя и, естественно, с технической подоплекой.
Ценными показались мысли о том, что «best practices» и пути решения любой задачи («best way») для каждого человека свои из-за разного личного опыта и набора знаний. Даже для одного и того же человека решения могут существенно отличаться в зависимости от контекста, т.е. конкретных условий, ситуации.
Перечислил набор лучших практик от Bryn Llewellyn, запомнившиеся:
- наличие высокого класса образования (не формального, а истинных знаний);
- способность механистической визуализации (насколько я понял, умение визуализировать задачу как в своей голове, так и с помощью внешних средств для общения с другими людьми);
- возможность выразить что угодно на языке программирования (был упомянут именно PL/SQL, мне кажется, что указание конкретного языка не столь важно);
- выбор родителей (видимо, это была шутка, хотя, конечно, фактор весьма важный :).
Далее Кайт в качестве приземленного примера привел SQL-запрос (две таблицы, соединенные идентификатором), показав разные пути более эффективного выполнения запроса в разных условиях (HASH JOIN или индексы). Основной вывод — не все однозначно, не выбирайте прямолинейное решение.
Еще озвучил банальную (но правильную мысль) — изучайте разные языки программирования. Чем больше знаете, тем более удачное решение сможете выбрать. Перечислил свой набор в порядке изучения: Tcl, Ada, C, PL/SQL, Java, C++.
Database Worst Practices
- Презентация
В презентации они выглядели именно в виде «вредных советов», добавляя отрицание, звучат примерно так:
- Обязательно задавайте вопросы и оставляйте комментарии (авторам книг, блогов).
- Используйте binding переменных:
- противодействие SQL-injection;
- снижение нагрузки на процессор из-за постояного разбора каждого запроса на сервере;
- уменьшение загрузки памяти по этой же причине;
- улучшение масштабирования.
- Сообщайте пользователям об ошибках:
- после WHEN OTHERS THEN (если уж воспользовались OTHERS) хотя бы log_error(...);
- в самом приложении выводите сообщения об ошибках.
- Излишнее обобщение (на уровне БД, приложения) — плохо.
- Не упрощайте излишне (перекликается с предыдущим советом).
- Не стремитесь создавать как можно больше экземпляров базы данных на один физический сервер, лучше создавать несколько виртуальных машин («больших 7 шапок из овцы не выкроишь никак»), так как неоптимально и несбалансированно расходуется память.
- Используйте внутреннюю функциональность БД (возможно, вы о ней даже не знаете), не изобретайте, вероятнее всего, худшие решения (имеющиеся возможности БД удовлетворяют 90% потребностей).
- Обязательно тщательно тестируйте:
- более чем одним пользователем (одновременно);
- максимально приблизьтесь к реальным данным (по объемам и наполнению);
- написание «бенчмарков» (тестов с числовыми метриками) не заменяет полноценного тестирования;
- обязательно нагрузочное тестирование.
- Используйте соответствующие типы данных (не приводите все искусственно к VARCHAR).
- Не делайте commit (очень) часто.
- Уделяйте внимание безопасности с самого начала проектирования (в презентации изображена машинка, обернутая цепью, чтобы не украли).
- Общайтесь с DBA (обращение к разработчикам) и разработчиками (обращение к DBA).
Top 10, no 11, new features of Oracle database 11g Release 2
- Презентация
Постараюсь уместить в одну строку каждую новую возможность (очень заинтересовавшиеся могут посмотреть в презентации подробней, ссылка выше):
- возможность параллелизма запросов (новый пакет DBMS_PARALLEL_EXECUTE);
- новая аналитическая функция LISTAGG;
- запуск в каталоге (результаты выполнения shell-скриптов можно использовать в SELECT, забавно);
- новый синтаксис иерархических запросов (ANSI-совместимый, мне показался более элегантным, чем CONNECT BY...START WITH);
- возможность выбрать предыдущие данные (исторически прошлые; типа, машина времени);
- наблюдение за появление файлов в каталоге (генерация события, обработчик);
- Deferred Segment Creation (честно говоря, не понял, что имелось ввиду);
- расширенная поддержка кэширования (оптимальное использование медленных SSD в составе кэша);
- улучшение исполнения запросов в очереди запросов;
- возможность одновременного существования в базе нескольких наборов (пакетов, представлений и т.д.), которые названы версиями. После тестирования нового набора одной командой он делается рабочим.
Why: Why Why is probably the right answer
Смысл названия доклада в том, что при задании вам вопроса рекомендуется задавать уточняющие вопросы (для того, чтобы самому дать ответ):
- как реорганизовать таблицы — зачем именно, оно действительно нужно?
- как создать таблицу в хранимой процедуре — зачем это вообще нужно (в качестве повторяющегося действия это неестественно)?
- как реорганизовать 50Гб базу данных — недостаточно данных, для чего именно?
Далее к Кайту присоединились люди из российского представительства Oracle (Дмитрий Волков и др.) и прочие лица. Наиболее интересным все же оказалось наблюдать за реакцией на вопросы (не всегда технические) и слушать ответы самого Томаса. Запомнились такие вопросы и ответы:
- Будет ли переписано ядро базы данных на Java (с C/C++) — нет, так как
- предъявляются жесткие требования по скорости;
- портабельность под различные платформы у Java ниже, чем у C;
- Чего не любит в PL/SQL (я ожидал услышать, что синтаксис, далекий от ООП):
- злоупотребления использования WHEN OTHERS THEN;
- автономные транзакции (PRAGMA AUTONOMOUS_TRANSACTION), так как их на практике обычно используют только для логгирования;
- триггеры (помещают сложную логику).
- Пользуется ли он исходными кодами базы данных для ответов на вопросы — нет, так как это не имеет смысла (кода много, он запутан, ничем не поможет).
- Пользуется ли он My Oracle Support (бывший Metalink) — нет, так как для доступа к базе знаний есть какое-то приложение для внутреннего пользования.
- Планирует ли использовать Flash на AskTom (на Metalink он появился) — нет, не планирует.
- Какие домашние животные есть у Кайта — 2 кота (всей семьи), морская свинка (дочери) и 2 лягушки (живут на столе у Тома).
- Что читает в свободное время (нетехническое) — сказал, что любит фантастику (назвал Азимова).
Общие выводы
- основной докладчик (Кайт), безусловно, вызывает большое уважение, хорошо рассказывает и уверенно отвечает на вопросы (видно, что предварительно обдумав);
- атмосфера мероприятия импонирует, собравшимся людям действительно интересно (в отличие от этого семинара, например, Oracle Tech Forum больше похоже на какое-то зомбирующее мероприятие);
- то, что рассказывается устами Кайта действительно «втыкает» (выражение от Андрея Бибичева), на меня особенно произвело впечатление слушание «The Best Way»;
- надо практиковаться в английском языке;
- приятно видеть человека (Кайта), занимающегося делом, которое ему интересно на протяжении столь длительного времени (и знания которого полезны другим).
Любые правки этой статьи будут перезаписаны при следующем сеансе репликации. Если у вас есть серьезное замечание по тексту статьи, запишите его в раздел «discussion».
Репликация: База Знаний «Заказных Информ Систем» → «AskTom in Moscow: отчет Дмитрия Белобородова»