Содержание 1 Регистрация и организация 2 Доклады 2.1 How Do You Know What You Know... 2.2 The Best Way 2.3 Database Worst Practices 2.4 Top 10, no 11, new features of Oracle database 11g Release 2 2.5 Why: Why Why is probably the right answer 3 Общие выводы Регистрация и организация Мероприятие 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 Презентация В презентации они выглядели именно в виде «вредных советов», добавляя отрицание, звучат примерно так: 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 Презентация Постараюсь уместить в одну строку каждую новую возможность (очень заинтересовавшиеся могут посмотреть в презентации подробней, ссылка выше): возможность параллелизма запросов (новый пакет 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 (Дмитрий Волков и др.) и прочие лица. Наиболее интересным все же оказалось наблюдать за реакцией на вопросы (не всегда технические) и слушать ответы самого Томаса. Запомнились такие вопросы и ответы: 1. Будет ли переписано ядро базы данных на Java (с C/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: отчет Дмитрия Белобородова»