AskTom in Moscow: отчет Дмитрия Белобородова

Материал из CustisWiki
Перейти к: навигация, поиск

Регистрация и организация

Мероприятие AskTom in Moscow представляло из себя серию мини-докладов Тома Кайта, известного практика-популяризатора продуктов Oracle, пишущего книги и отвечающего на вопросы на сайте AskTom. Семинар проходил 24 февраля 2010 года в гостинице «Ренессанс Москва», в зале «Волга».

Организаторами перед началом семинара была приведена статистика: приехало 333 человека из 150 компаний (количество городов не запомнил, но было много иногородних: Киев, Минск, Сыктывкар, Калуга и т.д.). Девушка-организатор попросила поднять руки людей, приехавших за собственные деньги — их оказалось около трети (!).

Что понравилось:

  • содержание докладов: интересно изложены, не являлись агрессивно рекламными, соблюден баланс полезных общих сведений и новой информации;
  • при регистрации проблем не возникло;
  • качество показанных слайдов и выданных материалов весьма хорошее (единственное, обложка оказалась перевернутой);
  • питание было организовано на высоком уровне, количество приборов (3 вилки и 2 ножа разных размеров) привело даже в некоторое замешательство;
  • синхронный перевод можно признать удовлетворительным (с поправкой, что переводчики явно не сильны в предметной области).

Что не понравилось:

  • маленький размер зала (предполагаю, что с дальних рядов было все плохо видно);
  • неудобная архитектура зала: две большие колонны заслоняли экраны.

Далее кратко изложено, что показалось интересным и оказалось записанным в блокнот.

Доклады

How Do You Know What You Know...

Презентация

ThingsYouKnow OOW.pdf

Рассказал, приведя примеры, что ошибочно полагаться на свою уверенность, что что-то знаешь:

  • «знания» могут быть ошибочны;
  • знания могут быть не ошибочны, но устареть.

Привел примеры ошибочности знаний из повседневной жизни (большинство ошибается в причине происхождения названия Канарских островов и Биг-Бена) и применительно к базе данных 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

Презентация

Thebestway.pdf

В значительной степени философский доклад, хотя и, естественно, с технической подоплекой.

Ценными показались мысли о том, что «best practices» и пути решения любой задачи («best way») для каждого человека свои из-за разного личного опыта и набора знаний. Даже для одного и того же человека решения могут существенно отличаться в зависимости от контекста, т.е. конкретных условий, ситуации.

Перечислил набор лучших практик от Bryn Llewellyn, запомнившиеся:

  • наличие высокого класса образования (не формального, а истинных знаний);
  • способность механистической визуализации (насколько я понял, умение визуализировать задачу как в своей голове, так и с помощью внешних средств для общения с другими людьми);
  • возможность выразить что угодно на языке программирования (был упомянут именно PL/SQL, мне кажется, что указание конкретного языка не столь важно);
  • выбор родителей (видимо, это была шутка, хотя, конечно, фактор весьма важный :).

Далее Кайт в качестве приземленного примера привел SQL-запрос (две таблицы, соединенные идентификатором), показав разные пути более эффективного выполнения запроса в разных условиях (HASH JOIN или индексы). Основной вывод — не все однозначно, не выбирайте прямолинейное решение.

Еще озвучил банальную (но правильную мысль) — изучайте разные языки программирования. Чем больше знаете, тем более удачное решение сможете выбрать. Перечислил свой набор в порядке изучения: Tcl, Ada, C, PL/SQL, Java, C++.

Database Worst Practices

Презентация

OOW WorstPractices.pdf

В презентации они выглядели именно в виде «вредных советов», добавляя отрицание, звучат примерно так:

  1. Обязательно задавайте вопросы и оставляйте комментарии (авторам книг, блогов).
  2. Используйте binding переменных:
    • противодействие SQL-injection;
    • снижение нагрузки на процессор из-за постояного разбора каждого запроса на сервере;
    • уменьшение загрузки памяти по этой же причине;
    • улучшение масштабирования.
  3. Сообщайте пользователям об ошибках:
    • после WHEN OTHERS THEN (если уж воспользовались OTHERS) хотя бы log_error(...);
    • в самом приложении выводите сообщения об ошибках.
  4. Излишнее обобщение (на уровне БД, приложения) — плохо.
  5. Не упрощайте излишне (перекликается с предыдущим советом).
  6. Не стремитесь создавать как можно больше экземпляров базы данных на один физический сервер, лучше создавать несколько виртуальных машин («больших 7 шапок из овцы не выкроишь никак»), так как неоптимально и несбалансированно расходуется память.
  7. Используйте внутреннюю функциональность БД (возможно, вы о ней даже не знаете), не изобретайте, вероятнее всего, худшие решения (имеющиеся возможности БД удовлетворяют 90% потребностей).
  8. Обязательно тщательно тестируйте:
    • более чем одним пользователем (одновременно);
    • максимально приблизьтесь к реальным данным (по объемам и наполнению);
    • написание «бенчмарков» (тестов с числовыми метриками) не заменяет полноценного тестирования;
    • обязательно нагрузочное тестирование.
  9. Используйте соответствующие типы данных (не приводите все искусственно к VARCHAR).
  10. Не делайте commit (очень) часто.
  11. Уделяйте внимание безопасности с самого начала проектирования (в презентации изображена машинка, обернутая цепью, чтобы не украли).
  12. Общайтесь с DBA (обращение к разработчикам) и разработчиками (обращение к DBA).

Top 10, no 11, new features of Oracle database 11g Release 2

Презентация

11 things about 11gr2 Long.pdf

Постараюсь уместить в одну строку каждую новую возможность (очень заинтересовавшиеся могут посмотреть в презентации подробней, ссылка выше):

  • возможность параллелизма запросов (новый пакет DBMS_PARALLEL_EXECUTE);
  • новая аналитическая функция LISTAGG;
  • запуск в каталоге (результаты выполнения shell-скриптов можно использовать в SELECT, забавно);
  • новый синтаксис иерархических запросов (ANSI-совместимый, мне показался более элегантным, чем CONNECT BY...START WITH);
  • возможность выбрать предыдущие данные (исторически прошлые; типа, машина времени);
  • наблюдение за появление файлов в каталоге (генерация события, обработчик);
  • Deferred Segment Creation (честно говоря, не понял, что имелось ввиду);
  • расширенная поддержка кэширования (оптимальное использование медленных SSD в составе кэша);
  • улучшение исполнения запросов в очереди запросов;
  • возможность одновременного существования в базе нескольких наборов (пакетов, представлений и т.д.), которые названы версиями. После тестирования нового набора одной командой он делается рабочим.

Why: Why Why is probably the right answer

Презентация
Why.pdf

Смысл названия доклада в том, что при задании вам вопроса рекомендуется задавать уточняющие вопросы (для того, чтобы самому дать ответ):

  • как реорганизовать таблицы — зачем именно, оно действительно нужно?
  • как создать таблицу в хранимой процедуре — зачем это вообще нужно (в качестве повторяющегося действия это неестественно)?
  • как реорганизовать 50Гб базу данных — недостаточно данных, для чего именно?

Далее к Кайту присоединились люди из российского представительства Oracle (Дмитрий Волков и др.) и прочие лица. Наиболее интересным все же оказалось наблюдать за реакцией на вопросы (не всегда технические) и слушать ответы самого Томаса. Запомнились такие вопросы и ответы:

  1. Будет ли переписано ядро базы данных на JavaC/C++) — нет, так как
    • предъявляются жесткие требования по скорости;
    • портабельность под различные платформы у Java ниже, чем у C;
  2. Чего не любит в PL/SQL (я ожидал услышать, что синтаксис, далекий от ООП):
    • злоупотребления использования WHEN OTHERS THEN;
    • автономные транзакции (PRAGMA AUTONOMOUS_TRANSACTION), так как их на практике обычно используют только для логгирования;
    • триггеры (помещают сложную логику).
  3. Пользуется ли он исходными кодами базы данных для ответов на вопросы — нет, так как это не имеет смысла (кода много, он запутан, ничем не поможет).
  4. Пользуется ли он My Oracle Support (бывший Metalink) — нет, так как для доступа к базе знаний есть какое-то приложение для внутреннего пользования.
  5. Планирует ли использовать Flash на AskTom (на Metalink он появился) — нет, не планирует.
  6. Какие домашние животные есть у Кайта — 2 кота (всей семьи), морская свинка (дочери) и 2 лягушки (живут на столе у Тома).
  7. Что читает в свободное время (нетехническое) — сказал, что любит фантастику (назвал Азимова).

Общие выводы

  • основной докладчик (Кайт), безусловно, вызывает большое уважение, хорошо рассказывает и уверенно отвечает на вопросы (видно, что предварительно обдумав);
  • атмосфера мероприятия импонирует, собравшимся людям действительно интересно (в отличие от этого семинара, например, Oracle Tech Forum больше похоже на какое-то зомбирующее мероприятие);
  • то, что рассказывается устами Кайта действительно «втыкает» (выражение от Андрея Бибичева), на меня особенно произвело впечатление слушание «The Best Way»;
  • надо практиковаться в английском языке;
  • приятно видеть человека (Кайта), занимающегося делом, которое ему интересно на протяжении столь длительного времени (и знания которого полезны другим).

Любые правки этой статьи будут перезаписаны при следующем сеансе репликации. Если у вас есть серьезное замечание по тексту статьи, запишите его в раздел «discussion».

Репликация: База Знаний «Заказных Информ Систем» → «AskTom in Moscow: отчет Дмитрия Белобородова»