Отчет oracle 13 сентября
Представленный здесь отчет о доходах компании Oracle Corporation, включающий в себя информацию о финансовом статусе компании, об операционной и внеоперационной деятельности (выручка, расходы и прибыль) за последние 4 периода (квартальных или годовых). Используйте выпадающие меню для просмотра дополнительной информации и настраивайте график для просмотра интересующих вас параметров, отмечая их в таблице ниже.
Продажа/общие/административные Расходы, всего | 2339 | 2273 | 2152 | 2382 |
Исследования и разработки | 1816 | 1754 | 1684 | 1715 |
Амортизация | 279 | 299 | 303 | 342 |
Процентные расходы (доходы) | - | - | - | - |
Необычные расходы (доходы) | 39 | 4699 | 59 | 125 |
Прочие операционные расходы, всего | - | - | - | - |
Участвуйте в форуме для взаимодействия с пользователями, делитесь своим мнением и задавайте вопросы другим участникам или авторам. Обратите внимание: во время торговых сессий все комментарии тщательно проверяются модератором, поэтому их публикация занимает определенное время. Комментарии, размещенные в нерабочие часы, могут рассматриваться в течение более длительного времени, чем обычно.
На данный момент к публикации допускаются комментарии, которые касаются экономической тематики, а также фондового рынка. Неуместные комментарии не будут допущены до публикации.
Пожалуйста, используйте стандартный письменный стиль и придерживайтесь наших правил.
- Размещение ссылок, рекламы и спам;
- Ненормативная лексика, а также замена букв символами;
- Оскорбления в адрес участников форума и авторов;
- Разжигание межнациональной и расовой розни;
- Комментарии, состоящие из заглавных букв;
- Допускаются комментарии только на русском языке;
В связи с жалобами других пользователей вам временно запрещено добавлять новые комментарии. Ваш статус будет проверен нашим модератором в ближайшее время.
В связи с жалобами других пользователей вам временно запрещено добавлять новые комментарии. Ваш статус будет проверен нашим модератором в ближайшее время.
Вы уверены, что хотите заблокировать пользователя %USER_NAME%?
%USER_NAME% добавлен в ваш черный список
Вы только что разблокировали этого участника. Повторно заблокировать этого участника можно только через 48 часов.
Я считаю, что данный комментарий:
является рекламой или спамом содержит оскорбление
Ваша жалоба отправлена модераторам.
Нефть Brent | 104,28 | +1,82 | +1,78% |
Нефть WTI | 101,47 | +1,71 | +1,71% |
Золото | 1.838,01 | -2,99 | -0,16% |
Серебро | 21,480 | +0,056 | +0,26% |
Платина | 954,00 | +8,20 | +0,87% |
Палладий | 2.047,50 | +2,47 | +0,12% |
Природный газ | 7,464 | +0,155 | +2,12% |
EUR/USD | 1,0540 | +0,0013 | +0,12% |
USD/RUB | 69,4025 | +0,0000 | +0,00% |
EUR/RUB | 73,648 | +2,460 | +3,46% |
GBP/USD | 1,2335 | +0,0013 | +0,10% |
USD/TRY | 15,3242 | +0,0601 | +0,39% |
USD/JPY | 130,38 | -0,06 | -0,04% |
AUD/USD | 0,6960 | +0,0025 | +0,36% |
РТС | 1.088,02 | 0,00 | 0,00% |
Индекс Мосбиржи | 2.393,03 | 0,00 | 0,00% |
US 500 | 4.015,2 | +14,1 | +0,35% |
Dow Jones | 32.160,74 | -84,96 | -0,26% |
DAX | 13.534,74 | +154,07 | +1,15% |
FTSE 100 | 7.243,22 | +26,64 | +0,37% |
Индекс USD | 103,835 | -0,108 | -0,10% |
Сбербанк | 123,10 | 0,00 | 0,00% |
Газпром | 240,10 | +0,00 | +0,00% |
Норникель | 21.766,0 | +0,0 | +0,00% |
ЛУКОЙЛ | 4.635,5 | 0,0 | 0,00% |
Яндекс | 1.688,0 | 0,0 | 0,00% |
Tesla | 800,04 | +12,93 | +1,64% |
Apple | 154,51 | +2,45 | +1,61% |
Название | Цена | Изм.% | Объём |
---|---|---|---|
Stitch Fix | 944,00 | -4,36% | 0,01K |
Okta | 13.411,00 | +1,22% | 0,01K |
Tegna | 1.800,00 | +12,64% | 0,01K |
Applovin | 4.592,00 | -1,27% | 0,00K |
Shoals Technologies Group | 1.013,00 | 0,00% | 0,00K |
Carvana | 9.495,00 | -7,21% | 0,00K |
Paramount Global B | 2.150,00 | -5,29% | 0,00K |
Название | Цена | Изм.% | Объём |
---|---|---|---|
Tegna | 1.800,00 | +12,64% | 0,01K |
Okta | 13.411,00 | +1,22% | 0,01K |
RN Zapadnaya Sibir’ PAO | 38,80 | +0,00% | 0 |
Rosseti Severo Zapad PAO | 0,0298 | +0,00% | 0 |
Северсталь | 1.108,00 | +0,00% | 0 |
Группа ЛСР | 493,00 | 0,00% | 0 |
Газпром нефть | 394,70 | 0,00% | 0 |
Название | Цена | Изм.% | Объём |
---|---|---|---|
Carvana | 9.495,00 | -7,21% | 0,00K |
Paramount Global B | 2.150,00 | -5,29% | 0,00K |
Stitch Fix | 944,00 | -4,36% | 0,01K |
Telephone&Data Systems | 1.345,00 | -3,03% | 0,00K |
Applovin | 4.592,00 | -1,27% | 0,00K |
Северсталь | 1.108,00 | +0,00% | 0 |
Группа ЛСР | 493,00 | 0,00% | 0 |
Отрасль: облачные вычисления
Рыночная капитализация: $250,39 млрд
Цена акции на 12 сентября: $89,68
Консенсус-прогноз: $84,18
Когда отчет: 23:00 мск
Ожидания: EPS — $0,97 (прибыль на акцию), выручка — $9,76 млрд
- Oracle — американская технологическая корпорация, специализирующаяся на продаже программного обеспечения, серверов и систем управления баз данных. Это второй по величине разработчик программного обеспечения. Один из ее самых популярных продуктов — облачная система хранения Oracle Cloud Infrastructure.
- На Уолл-стрит нейтрально оценивают перспективы Oracle: по данным Marketwatch, пятеро аналитиков присвоили акциям компании рейтинг «покупать», один — «лучше рынка», 18 — «держать» и трое — «продавать». Консенсус-прогноз — $84,18.
- Значения мультипликаторов P/E (19,58) и P/S (6,18) компании ниже среднего уровня по сектору — 46,69 и 8,16 соответственно. Согласно мультипликаторам, акции компании недооценены рынком. Недооцененность сохранится, если компания не покажет резкого падения прибыли и выручки.
Другие важные отчеты 13 сентября:
Mission Produce: после закрытия рынка, прогноз EPS — $0,3, прогноз выручки — $243 млн.
Matrix: после закрытия рынка, прогноз EPS — -$0,025, прогноз выручки — $177 млн.
Volt Information: после закрытия рынка, прогноз EPS — $0,04, прогноз выручки — $213 млн.
Core Main: до открытия рынка, прогноз EPS — $0,07, прогноз выручки — $1,24 млрд.
MYT Netherlands Parent: до открытия рынка, прогноз EPS — $0,11, прогноз выручки — $156,72 млн.
Skillsoft: после закрытия рынка, прогноз EPS — $0,16, прогноз выручки — $157,81 млн.
JinkoSolar Holding: до открытия рынка, прогноз EPS — -$0,26, прогноз выручки — $7,77 млрд.
Ashtead Group: до открытия рынка, прогноз EPS — £0,53, прогноз выручки — £1,3 млрд.
THG Holdings: до открытия рынка, прогноз EPS — £0,61, прогноз выручки — £921 млн.
В центре внимания: Manchester United (MANU)
Отрасль: футбольные клубы
Рыночная капитализация: $2,82 млрд
Цена акции на 13 июня: $17,28
Консенсус-прогноз: $14,54
Когда отчет: 14:00 мск
Ожидания: EPS — -£0,15 (прибыль на акцию), выручка — £104,47 млн
- 27 августа стало известно, что легенда мирового футбола Криштиану Роналду вернулся в «Манчестер Юнайтед» из туринского «Ювентуса». В день объявления трансфера котировки «Манчестер Юнайтед» на американской бирже NYSE выросли на 10,82%, до $19,15. «МЮ» выплатит €15 млн в течение пяти лет, а в случае достижения Роналду определенных спортивных результатов сумма может увеличиться на €8 млн в виде бонусов для итальянского клуба.
- Эксперты, опрошенные «РБК Инвестициями», выражали сомнение по поводу того, что переход Роналду может дать бумагам «Манчестер Юнайтед» долговременный восходящий импульс. Аналитик инвестиционного холдинга «Финам» Алексей Коренев считает, что долгосрочная динамика стоимости бумаг «МЮ» «будет определяться фактическими успехами клуба на поле».
- Эксперт инвесткомпании «Фридом Финанс» Евгений Миронюк отметил, что переход Криштиану Роналду — лишь маркетинговый ход, который может обеспечить рост продаж атрибутики и сезонных абонементов, а также привлечь спонсоров. В целом аналитик считает, что в среднесрочной перспективе покупка Роналду ухудшит финансовое состояние клуба.
Другие важные отчеты:
Franklin Wireless: до открытия рынка, прогноз EPS — $0,11, прогноз выручки — $29 млн.
TuanChe: до открытия рынка, прогноз EPS — -$1,18, прогноз выручки — $165 млн.
13 сентября 2020 года Microsoft сообщила, что не будет покупать сервис TikTok у компании ByteDance. Причина отказа — покупатель американских активов сервиса не получит алгоритм приложения TikTok. Как сообщает Reuters, вместо этого партнером TikTok станет Oracle. Ожидается, что в ближайшее время стороны объявят об этой сделке.
Обновление публикации на 13:40: Китайский портал CGTN заявил, что ByteDance решила не продавать активы TikTok в США американским компаниям.
С начала августа этого года покупкой американских активов TikTok, а также бизнесом компании в Канаде, Австралии, Новой Зеландии и других странах мира, интересовались Microsoft, Twitter, Oracle.
Twitter и TikTok провели предварительные переговоры по поводу возможного объединения в США. Но оказалось, что возможностей компании-покупателя в полном объеме профинансировать эту сделку не хватило.
Microsoft также проводила переговоры с ByteDance и планировала потратить на покупку TikTok $30 млрд. Причем компания хотела получить весь бизнес TikTok, включая сервисы на рынках Европы и Индии. ByteDance это не устраивало.
В середине августа этого года, согласно информации издания Financial Times, Oracle также провела предварительные переговоры с китайской компанией ByteDance о приобретении части активов TikTok. Технологическая компания была заинтересована в покупке бизнеса видеосервиса в США, Канаде, Австралии и Новой Зеландии.
Oracle тогда не напрямую выразила свои предпочтения. Компания сделала это через группу американских инвесторов, включая General Atlantic и Sequoia Capital, у которых есть доля в ByteDance. В случае партнерства TikTok с Oracle эти компании получат миноритарные пакеты акций TikTok в США.
Разработчик TikTok сейчас находится под давлением администрации США. ByteDance против продажи всей компании и не хочет потерять большие рынки, кроме США. Именно поэтому ByteDance заинтересовалась предложением Oracle продать только часть своего бизнеса и стать партнерами по владению TikTok.
Стороны планировали договориться, что Oracle станет технологическим партнером ByteDance. Это подразумевает, что Oracle возьмет на себя управление пользовательскими данными TikTok в США и будет размещать их на своих серверах. Таким образом ByteDance пытается устранить претензии администрации США к TikTok, в числе которых есть угрозы национальной безопасности страны.
В числе условий, вывинутых Комитетом по иностранным инвестициям в США (CFIUS), следующие: глобальный бизнес TikTok получит статус компании, базирующейся в США, перенесет туда штаб-квартиру и создаст 20 тыс. рабочих мест; Oracle получит миноритарный пакет в глобальном бизнесе TikTok, а не только в его американском подразделении и станет технологическим партнером TikTok. При этом ByteDance продолжит сотрудничать с TikTok на глобальном уровне и сохранит контроль над алгоритмом, позволяющим просчитывать, какие именно видео нравятся конкретным пользователям. Oracle будет проводить независимый анализ американского сегмента TikTok и, возможно, также глобальных данных. Американские данные будут обрабатываться и храниться на территории США. Обработкой американских, а возможно, и всех глобальных данных TikTok будет заниматься Oracle.
В конце августа этого года TikTok раскрыл данные о количестве ежемесячных активных пользователей сервиса с 2018 года. Сейчас у сервиса почти 700 млн ежемесячных активных пользователей по всему миру, причем более 100 млн из них находятся в США.
Президент США Дональд Трамп установил крайний срок для продажи американских активов TikTok на 20 сентября 2020 года (через 45 дней с 6 августа). После этой даты сервис будет полностью запрещен в США.
Обновление публикации на 13:40: ByteDance отказала в продаже активов сервиса TikTok всем претендентам — как Microsoft, так и Oracle.
Данная статья посвящена форматам дат в Oracle и некоторым особенностям их обработки. В статье приведен обзор нескольких стандартных масок форматирования дат, явная и неявная конвертация строк в даты и дополнительные параметры, влияющие на этот процесс. Как и в первой части статьи, обсуждение материала происходит на основе примеров, демонстрирующих нестандартные возможности форматирования. Детально рассмотрены механизмы Oracle, участвующие в процессе неявного преобразования. Описание большинства возможностей сопровождается ссылками на соответствующие разделы документации.
Изначально я не планировал написание статьи о датах, а собирался остановиться на рассмотрении всего одного вопроса данной тематики. Однако в ходе работы возникла необходимость в освещении различных дополнительных возможностей Oracle, стали появляться новые примеры. Так рассмотрение одного вопроса разрослось в небольшую статью. Надеюсь, получилось нескучно, несмотря на не самую интересную тематику.
Первая часть статьи, посвященная особенностям оператора order by, функционированию not in и примеру неявного преобразования типов, находится здесь.
Performance Home
На вкладке Performance Home можно увидеть основные графики утилизации БД.
Top 10 Foreground Events by Total Wait Time
В разделе находится топ-10 событий, которые ожидали ресурсов дольше остальных.
При анализе необходимо обратить внимание на класс события ожидания. Если wait class System I/O, User I/O или Other, это нормально для БД. Если класс события ожидания Concurrency, это может свидетельствовать о проблемах.
Классы события ожидания можно посмотреть в разделе Wait Classes by Total Wait Time. В разделе находится статистика по классам события ожидания с сортировкой по времени ожидания.
Описание некоторых событий ожидания:
№ | Событие ожидания | Описание |
---|---|---|
1 | DB CPU | Отображает процессорное время, затраченное на пользовательские операции над БД. Это событие должно находиться на первом месте списка |
2 | db file sequential read | Метрика сигнализирует, что пользовательский процесс не находит нужный блок в buffer cache, загружает его с диска в SGA и ждет физического ввода/вывода |
3 | db file scattered read | Указывает на проблему с фулл-сканами, возможно, нужны индексы |
4 | read by other session | Может говорить о том, что размер блока слишком большой или задержка (latency) слишком большая |
5 | enq TX – row lock contention | Событие возникает при ожидании блокировки строки для дальнейшей ее модификации DML-запросом. Если показатель больше 10%, необходимо разбираться в причинах. Более детальную информацию можно посмотреть в разделе Segments by Row Lock Waits, в котором есть сведения о том, какие таблицы были заблокированы и какими запросами |
6 | DB FILE SEQUENTIAL READ | Если среднее значение параметра больше 100 мс, это может свидетельствовать о том, что диск работает медленно |
7 | LOG FILE SYNC | Значение AVG WAIT более 20 мс может свидетельствовать о проблемах |
8 | DB FILE SCATTERED READ | Если это событие выполняется — возможно, имеет смысл создать дополнительные индексы. Для более подробной информации нужно перейти к разделу Segments By Physical Read, в котором находится информация по таблицам и индексам, в которых происходит физическое чтение |
9 | direct path read temp ИЛИ direct path write temp | Эти события дают информацию по использованию временных файлов |
10 | Buffer Busy Wait | Событие указывает на то, что несколько процессов пытаются обратиться к одному блоку памяти, то есть пока первый процесс работает с конкретным блоком памяти, остальные процессы находятся в статусе ожидания |
Average Active Sessions
- Если зафиксирован рост активных сессий, то должна расти пропускная способность (график Throughput).
- Если Active Sessions превышает CPU Cores/CPU Threads, это свидетельствует о проблемах производительности.
- Если зафиксирован рост времени отклика операций, но при этом активные сессии не превышают CPU, это значит, что узкое место не в CPU и нужно более детально смотреть, по каким классам события ожидания фиксируется рост, после чего можно на графике нажать на соответствующий класс и провалиться глубже в детализацию (откроется отчет ASH — Active Session History).
Parallel Executions
Раздел дает представление о показателях, связанных с параллельным выполнением запросов. Параллельный запрос делится на несколько процессов для ускорения выполнения запроса. Параллельное выполнение полезно при выполнении тяжелых запросов. Подробнее можно прочесть в официальной документации Oracle.
Особенности отображения дат в различных приложениях
Что влияет на отображение даты
Этот раздел добавлен после публикации статьи благодаря рекомендациям, указанным в комментариях. Описанное далее верно как для отображения дат, так и для отображения чисел. Возможно, при выполнении некоторых приведенных выше в статье примеров, вы получили даты в отличном от указанного в результатах формате. Если настройки вашей сессии соответствовали указанным в примерах, то это представляется, по меньшей мере, странным.
Правда заключается в том, что при выполнении запроса
вы получаете дату, но для отображения результата на экран конкретная утилита, с помощью которой вы обращаетесь к БД, должна провести конвертацию даты в строку. Таким образом, для отображения дат (и чисел) неявным образом вызывается to_char, т.е. имеем классический случай неявной конвертации (это конвертация только для вывода на экран, ее результаты не участвуют ни в каких вычислениях и ни на что кроме отображения данных не влияют). Если есть неявная конвертация, значит, существует и маска, по которой она выполняется. В классическом случае это должна быть маска, установленная для сессии, т.е. маска, указанная в параметре NLS_DATE_FORMAT таблицы nls_session_parameters, с которой мы активно работали на протяжении всей статьи.
Давайте проверим работу некоторых приложений. Проверять будем с помощью следующего скрипта:
Проверим, какие параметры для отображения дат использует sqlplus.
Рис. 1. Результат выполнения запроса №25 в sqlplus.
Как видно из рис.1, формат отображения даты меняется в зависимости от настроек сессии, т.е. sqlplus использует настройки сессии. Это упрощает понимание процесса преобразования дат в строки и обратно, поскольку и для преобразования и для отображения используются одинаковые маски.
Некоторые продвинутые средства разработки используют свои собственные NLS настройки, не имеющие отношения к настройкам Оракл. В качестве примера проверим, какие параметры для отображения дат использует PL/SQL Developer. Для этого выполним в нем запрос №25.
Рис. 2. Результат выполнения запроса №25 в PL/SQL Developer.
Как видно из рис.2, формат отображения даты не меняется при изменении настроек сессии. Более того, если посмотреть внимательно, то видно, что и первый и второй результаты вывода даты на экран не соответствовали параметрам сессии (в первом случае выведенная дата имела год в четырехзначном формате, а маска указывала год в двухзначном формате). Это означает, что утилита использует собственные NLS настройки, в случае PL/SQL Developer’а их расположение указано на рис. 3.
Рис. 3. Установка NLS параметров отображения дат в PL/SQL Developer.
Чем могут быть вредны NLS настройки утилит
Отображение даты в формате отличном от формата сессии вредно по одной причине – оно вводит пользователя в заблуждение и может привести к возникновению ошибок. Выполним в sqlplus и PL/SQL Developer следующий запрос:
В последнюю строку запроса вместо ХХХХХХХХ мы будем вставлять полученные из предыдущей строки данные.
Результаты выполнения запроса представлены на рисунках ниже.
Рис. 4. Результат выполнения запроса №26 в sqlplus.
Рис. 5. Результат выполнения запроса №26 в PL/SQL Developer.
Почему в sqlplus выведенные на экран данные были успешно конвертированы в дату, а данные выведенные на экран PL/SQL Developer’ом не смогли сконвертироваться? Потому что для конвертации Оракл использует формат данных указанный в сессии, а данные выведенные PL/SQL Developer’ом были приведены для отображения в свой формат, отличный от формата сессии.
Load Profile
Здесь отображается общая информация по тому, как была загружена БД за выбранный период.
№ | Параметр | Описание |
---|---|---|
1 | DB Time(s) | Сумма времени утилизации процессора и время ожидания (без простоя) |
2 | DB CPU(s) | Нагрузка на процессор |
3 | Background CPU(s) | Загрузка процессора фоновыми задачами |
4 | Redo size | Объем чтения |
5 | Logical reads | Среднее количество логических чтений блоков |
6 | Block changes | Среднее значение измененных блоков |
7 | Physical reads | Физическое чтение в блоках |
8 | Physical writes | Количество записей в блоках |
9 | Read I/O requests | Количество чтений |
10 | Write I/O requests | Количество записей |
11 | Read I/O (MB) | Объем чтения |
12 | Write I/O (MB) | Объем записей |
13 | IM scan rows | Количество строк в In-Memory Compression Units (IMCU), которые были доступны |
14 | Session Logical Read IM | Чтения в In-Memory |
15 | User calls | Пользовательские вызовы |
16 | Parses | Разборы |
17 | Logons | Количество входов |
18 | Excecutes | Количество вызовов |
19 | Rollback | Количество откатов данных |
20 | Transacions | Количество транзакций |
SQL statistics
Раздел содержит несколько таблиц со статистикой по SQL-запросам, отсортированным по определенному критерию.
Подробнее про оптимизацию запросов и примеры типичных проблем в запросах можно почитать в статье Проактивная оптимизация производительности БД Oracle.
№ | Параметр | Описание |
---|---|---|
1 | SQL ordered by Elapsed Time | Топ SQL-запросов по затраченному времени на их выполнение |
2 | SQL ordered by CPU Time | Топ SQL-запросов по процессорному времени |
3 | SQL ordered by User I/O Wait Time | Топ SQL-запросов по времени ожидания ввода/вывода для пользователя |
4 | SQL ordered by Gets | Запросы к БД, упорядоченные по убыванию логических операций ввода/вывода. При анализе стоит учитывать, что для PL/SQL-процедур их количество прочитанных Buffer Gets будет состоять из суммы всех запросов в рамках этой процедуры |
5 | SQL ordered by Reads | Этот раздел схож с предыдущим: в нем указываются все операции ввода/вывода, наиболее активно физически считывающие данные с жесткого диска. Именно на эти запросы и процессы надо обратить внимание, если система не справляется с объемом ввода/вывода |
6 | SQL ordered by Physical Reads (UnOptimized) | В этом разделе выводятся неоптимизированные запросы. В Oracle неоптимизированными считаются все запросы, которые не обслуживаются DSFC или Exadata Cell Smart Flash Cache (ECSFC) |
7 | SQL ordered by Executions | Наиболее часто выполняемые запросы |
8 | SQL ordered by Parse Calls | Отображает количество попыток разбора SQL-запросов до его выполнения |
9 | SQL ordered by Sharable Memory | Запросы, занимающие больший объем памяти общего пула SGA |
10 | SQL ordered by Version Count | Здесь показано количество SQL-операторов экземпляров одного и того же оператора в разделяемом пуле |
11 | Complete List of SQL Text | Показывает полный SQL-запрос, не только его хэш. В этой таблице можно найти неоптимальные запросы (например, запросы по всем столбцам таблицы «select * from. », запросы с большим количеством «like» и т. п.) |
ASH Report
ASH Report (Active Session History) дает более подробную информацию по потреблению ресурсов. Чтобы перейти к графику, в меню Performance нужно выбрать пункт Performance Hub/ASH Report. Также перейти к ASH Report можно при выборе класса события ожидания на графике Average Active Session.
- События ожидания и группы событий ожидания.
- Группы пользователей, пользователи, сервисы, инстансы.
- SQL-запросы.
AWR (Automatic Workload Repository) дает подробную информацию о процессах, происходящих с БД в определенный период. Для построения AWR-отчета нужно выбрать пункт меню Performance/AWR/AWR Report. Также есть возможность сравнивать два временных промежутка. Для этого нужно выбрать пункт меню Performance/AWR/Compare Period Report.
Ниже будут описаны наиболее показательные разделы AWR-отчета, описание остальных разделов можно поискать в официальной документации.
Host CPU и Instance CPU
Здесь стоит обратить внимание на %Idle и %Total CPU. Если показатель %Idle низкий, а %Total CPU высокий, это может свидетельствовать о том, что процессор является узким местом.
Average Runnable Process
Этот график дает общее понимание использования CPU.
№ | Показатель | Описание |
---|---|---|
1 | Instance Foreground CPU | Отображает утилизацию CPU процессами текущего инстанса, напрямую запущенными клиентом, например выполнение запросов. Список событий ожидания текущего инстанса можно посмотреть в AWR-отчете |
2 | Instance Background CPU | Отображает утилизацию CPU фоновыми процессами текущего инстанса, например LGWR. Список событий фонового процесса текущего инстанса можно посмотреть в AWR-отчете или в официальной документации Oracle |
3 | Non-database Host CPU | Отображает утилизацию CPU процессами, не относящимися к текущему инстансу |
4 | Load Average | Отображает среднюю длину очереди процессов, ожидающих выполнения |
5 | CPU Treads/CPU Cores | Отображает лимит максимально возможного использования CPU |
Функция to_date и форматы даты
Мало кто из программистов любит тематику форматирования. Например, на некоторых курсах темы форматирования дат и региональных стандартов специально ставят на последние часы последнего дня тренинга, т.к. слушателям нудно. Причина в большом количестве существующих форматов при относительно редком их использовании в стандартных задачах. Чаще всего маски используются в трех функциях: to_number, to_char и to_date. Во всех трех случаях маска идет вторым необязательным параметром. И если масок для форматирования чисел еще более-менее вменяемое количество, то масок для форматирования дат до неприличия много, плюс еще суффиксы и модификаторы.
Безусловно, доступность большого количества масок является позитивным моментом, поскольку расширяет возможности, например, проверить является ли 13 сентября 2011 днем программиста, можно с помощью маски 'DDD', которая возвращает номер дня в году:
Несмотря на явную пользу форматирования, я не планировал включать во вторую часть статьи обзор форматов дат и примеры использования экзотических масок. Во-первых, вряд ли это будет кому-то интересно, во-вторых, автор также не является большим почитателем сложного форматирования, поскольку редко его применяет в жизни. Единственная причина появления данного раздела – некоторые вопросы, возникшие у читателей по поводу использования формата RR.
Перед тем как перейти непосредственно к основной теме раздела, давайте рассмотрим несколько нестандартных примеров работы с датами.
Пример №1. Использование урезанных шаблонов
Начнем со стандартного форматирования. Пускай сегодняшняя дата 16.09.2011, выполнятся ли следующие запросы, и что они вернут?
Запрос №2 является типичным примером конвертации даты в строку с приведением ее к нужному формату. Единственное отличие – вместо более привычных масок вида 'DD.MM.YY' или 'DD-MON-YYYY' мы использовали маску, задающую только год. Запрос №2 выполнится успешно и вернет текущий год в четырехзначном формате, т.е. '2011'.
Запрос №3 немного интереснее, он представляет собой типичный пример явного преобразования строки в дату с урезанной маской формата, поэтому, с точки зрения синтаксиса, запрос верный и выполнится успешно. Более важным вопросом является результат его выполнения, т.е. какую дату он вернет, если задан только день? Перед ответом на данный вопрос давайте вспомним, как Oracle устанавливает время, если оно явно не задано:
В запросе №4 время не указано, в запросе №5 указано только количество минут, часы и секунды опущены. В Oracle существует правило, согласно которому, если в дате отсутствует временной компонент, то время автоматически устанавливается в значение 00:00:00 (т.е. полночь), если задана только часть элементов времени (как в запросе №5), то пропущенные элементы устанавливаются в 00. Поэтому, запрос №4 вернет строку '03.02.2011 00:00:00', а запрос №5 — '03.02.2011 00:30:00'.
Вернемся к запросу №3, верно ли данное правило для дат, т.е. заменяются ли пропущенные при конвертации элементы даты на 00 или 01? Да заменяются, но не все, точнее, для пропущенных элементов даты используются значения из sysdate (первый день текущего месяца текущего года). Поэтому запрос №3 будет использовать 09 в качестве месяца и 2011 в качестве года, таким образом, результатом выполнения запроса будет дата 03.09.2011.
Пример №2. Порядок параметров форматирования
Выполнится ли следующий запрос, и если да, то какую дату он вернет?
На первый взгляд, отсутствие разделителей в строке с датой может показаться критическим фактором несовместимым с выполнением запроса, однако маска даты также задана без разделителей и строка для преобразования соответствует указанному шаблону. Поэтому запрос №6 выполнится успешно и вернет 20.11.2009 (формат результата может несколько отличаться в зависимости от настроек сессии). Детальнее вопросы, связанные с разделителями, мы рассмотрим в следующем примере.
Пример №3. Неявная конвертация
Пусть формат даты по умолчанию DD.MON.RR, а язык даты – русский, отработает ли следующий запрос:
В данном запросе указано два строковых параметра, которые должны быть преобразованы в даты с помощью неявной конвертации. Согласно документации, при использовании форматов по умолчанию, строка для неявного преобразования в дату должна удовлетворять шаблону: [D|DD] separator1 [MM|MON|MONTH] separator2 [R|RR|YY|YYYY]. В качестве separator1 и separator2 можно использовать большинство разделительных знаков и специальных символов, в том числе пробелы, табуляцию, а также " и удвоенную одинарную кавычку ''. Более того, если в строке указано не менее двух цифр для задания дней, месяцев и лет, то separator вообще может быть опущен. Например:
Поскольку обе строки указанные в запросе №7 соответствуют приведенному шаблону, то запрос выполнится успешно и вернет число 11.
Пример №4. Параметры функции to_date
Пусть формат даты по умолчанию DD.MON.RR, а язык даты – русский, отработает ли следующий запрос:
Схожий запрос фигурировал в одном из обсуждений на странице ask Tom. Ловушка запроса в том, что мы пытаемся преобразовать дату (sysdate) в дату. Если бы запрос выглядел так:
То выполнение прошло бы успешно, и он вернул строку '09/15/2011 23:00:11'. Однако функция to_date в качестве первого параметра ожидает строку поэтому, вначале происходит неявная конвертация даты в строку (что эквивалентно вызову to_char(sysdate) с маской по умолчанию). Результатом данной конвертации является строка '15.09.11', далее происходит вызов to_date. Таким образом, запрос №11 эквивалентен следующему запросу:
Как не сложно убедиться, запрос №13 не может быть выполнен, поскольку строка '15.09.11' не соответствует установленной маске, соответственно, запрос №11 так же не может быть выполнен.
Установка формата даты по умолчанию
Формат дат по умолчанию задается двумя параметрами: NLS_DATE_FORMAT (отвечает за сам формат как таковой) и NLS_DATE_LANGUAGE (отвечает за язык, который будет использован при написании названий дней, месяцев и т.д.). Если эти параметры не заданы явно, то их значения устанавливаются на основе параметра NLS_LANG.
- Уровень БД: Параметры этого уровня устанавливаются при создании БД и прописываются в файле init.ora.
- Уровень экземпляра: Параметры этого уровня устанавливаются при старте экземпляра и могут быть изменены с помощью команды ALTER SYSTEM.
- Уровень сессии: Параметры этого уровня могут быть изменены командой ALTER SESSION. Также значение данных параметров можно проверить с помощью запроса:
Логично предположить, что преобразование строки '11.09.11' в дату пройдет успешно, а строки '11.SEP.11' – нет. Однако это не так, успешно выполнятся оба преобразования. Вначале я предполагал, что в случае невозможности преобразовать строку по маске сессии Oracle пытается задействовать маски других уровней (маска уровня БД у меня установлена в 'DD-MON-RR'). Чтение документации показало, что это не так, и Oracle руководствуется принципами, описанными в предыдущем пункте.
Попробуем другой пример:
Если вы думаете, что результат будет идентичен предыдущему запросу, то вы ошибаетесь. Одно из преобразований не выполнится. В данном случае строка '11.09.11' не удовлетворяет шаблону. Возможно, это мистика?
Увы, нет. Чтение документации показало, что существуют правила автозамены элементов форматирования даты. Ниже привожу таблицу замен.
Original Format Element | Additional Format Elements to Try in Place of the Original |
---|---|
'MM' | 'MON' and 'MONTH' |
'MON | 'MONTH' |
'MONTH' | 'MON' |
'YY' | 'YYYY' |
'RR' | 'RRRR' |
Пример №6. Формат RR vs YY
Большинству пользователей отличия масок RR и YY хорошо известны, однако есть и те, кому данная информация окажется полезной. Перейдем сразу к рассмотрению примера. Какие данные вернут следующие запросы:
Оба приведенных выше запроса выполнятся успешно и вернут даты в соответствии с правилами, описанными в примере №1 для запроса №3. Таким образом, значение дня во всех полученных датах будет равно 01, а значение месяца 09 (если вы выполняете запрос в сентябре). Главный вопрос, каким будет значение года?
Как несложно предположить, в запросе №16 под '11' я подразумевал 2011 год и обе маски мне его вернули, т.е. результат выполнения запроса №16 это 01.09.2011 и 01.09.2011.
В запросе №17 под '99' я подразумевал 1999 год и тут мнения масок разделились: маска RR вернула ожидаемый 1999 год, а маска YY – 2099, т.е. результат выполнения запроса №17 это 01.09.1999 и 01.09.2099.
Рассмотрим, как работают эти элементы форматирования более детально:
- If the last two digits of the current year are 00 to 49, then the returned year has the same first two digits as the current year.
- If the last two digits of the current year are 50 to 99, then the first 2 digits of the returned year are 1 greater than the first 2 digits of the current year.
- If the last two digits of the current year are 00 to 49, then the first 2 digits of the returned year are 1 less than the first 2 digits of the current year.
- If the last two digits of the current year are 50 to 99, then the returned year has the same first two digits as the current year.
Поэтому запрос №19 вернет 1950 год в обоих случаях.
Пример №7. Некоторые другие примеры
В завершение обзора рассмотрим немного экзотики. Будет ли ошибка в результате выполнения следующего запроса:
Если вы решили, что это бессмысленная запись, то вы ошибаетесь – это вполне корректное задание даты в соответствии со стандартом ANSI, запрос №20 выполнится успешно и вернет 25.12.1928.
Какой из запросов не выполнится?
Данный пример призван продемонстрировать наличие третьего параметра в функции to_date. Данный параметр позволяет установить значение одного из NLS (National Language Support) параметров только для этого вызова функции to_date. Установку NLS параметров для сессии мы рассматривали в примере №5. Ключевая разница запросов №20 и №21 состоит не в названии месяца (маска MON автоматически замещается маской MONTH, как это описано в примере №5), а в указании разных языков даты. Запрос №21 ожидает название месяца на английском и, соответственно, не выполнится, запрос №22 ожидает название месяца на русском и выполнится успешно.
В каком случае следующее объявление таблицы может приводить к возникновению ошибок при вставке данных?
Каждый раз, когда сессия с форматом даты по умолчанию 'DD.MON.RR' будет производить вставку с указанием только значения первого столбца будет возникать ошибка.
Throughput
Раздел Throughput отображает пропускную способность. Пропускная способность базы данных измеряет объем работы, которую база данных выполняет за единицу времени.
Пики на графике Throughput должны соответствовать пикам на графике Average Active Sessions. Если заметен рост времени ожидания, необходимо убедиться, что увеличивается пропускная способность. Если пропускная способность низкая, а время ожидания растет — необходимо изменить настройки БД.
Latency показывает задержку чтения блоков. Это разница между временем выполнения чтения и временем обработки чтения БД. Показатель должен стремиться к нулю.
Оптимальным считается значение до 10 мс. Этот график — основной показатель производительности в этом блоке. Если зафиксирован рост времени задержки, нужно посмотреть, не растет ли количество I/O операций и их вес, также на рост Latency может влиять утилизация CPU.
Статистику по I/O можно смотреть в разрезе функций, в разрезе типов и в разрезе групп потребителей ресурсов (группы пользователей). Для этого на графике необходимо выбрать соответствующий Breakdown. Графики показывают количество I/O-операций в секунду и их вес в разрезе выбранного значения Breakdown. Для большей детализации можно провалиться глубже в статистику, выбрав соответствующее значение на графике или в легенде, и посмотреть статистику именно по выбранному значению.
I/O Function
График дает представление об уровне утилизации диска приложениями или джобами. То есть на графике можно увидеть, какие процессы больше всего читали и писали за определенный период.
Можно выделить следующие категории:
№ | Категория | Описание |
---|---|---|
1 | Фоновые процессы | Включают в себя ARCH, LGWR, DBWR (полный список фоновых процессов есть в документации) |
2 | Активность | XML DB, Streams AQ, Data Pump, Recovery, RMAN |
3 | Тип I/O | Включает прямую запись и чтение (в том числе чтение из кэша) |
4 | Другое | Включает операции ввода/вывода управляющих файлов |
I/O Type
Выводит статистику по тяжести операций ввода-вывода. Маленькими считаются операции, которые обрабатывают до 128 КБ. К большим операциям ввода-вывода относятся: сканирование таблиц и индексов, прямая загрузка данных, резервное копирование, восстановление и архивирование.
Consumer group
Дает представление об утилизации диска в разрезе групп пользователей: показывает, какая группа пользователей выполняет операции чтения и записи в определенный период. Включает в себя фоновые процессы.
Services
Службы на этом графике представляют собой группы приложений. Отображаются только сессии активных служб, находящиеся в ожидании в определенный момент времени. Например, служба SYS$USERS — это установка пользовательского сеанса.
Foreground Wait Class, Foreground Wait events и Background Wait Events
Показывают классы и события, которые провели в ожидании большего всего. Foreground Wait events дополняет информацию раздела Top 10 Foreground Events By Total Wait Time. Background Wait Events показывает детализацию по событиям ожидания фоновых процессов.
Active Session History (ASH) Report
В данной таблице находятся самые тяжелые SQL запросы, на которые приходится наибольший процент активности и наибольшее время ожидания.
В таблице содержится статистика по запросам, на которые приходится наибольший процент выборочной активности и подробная информация о их плане выполнения. Вы можете использовать эту информацию, чтобы определить, какая часть выполнения SQL операторов значительно повлияла на затраченное время SQL оператора.
Заключение
В качестве заключения хочу напомнить, что почти в каждом своем посте посвященном работе с датами, Том Кайт говорит о необходимости использования явных преобразований и обязательном указании маски. «При конвертации строки в дату никогда не полагайтесь на формат даты по умолчанию, всегда явно задавайте маску» — примерно так звучат его слова. Дополнительные примеры и возможные ошибки при работе с преобразованием дат вы можете найти, воспользовавшись страничкой ask Tom.
Поскольку работа с датами заняла всю статью, то «за бортом» осталось множество интересных вопросов, которые я хотел бы рассмотреть. Скорее всего, появится и третья часть статьи, как только у меня найдется свободное время.
Привет! Меня зовут Александра, я работаю в команде тестирования производительности. В этой статье расскажу базовые сведения об OEM от Oracle. Статья будет полезна для тех, кто только знакомится с платформой, но и не только для них. Основная цель статьи — помочь провести быстрый анализ производительности БД и поиск отправных точек для более глубокого анализа.
OEM (Oracle Enterprise Manager) — платформа для управления БД. OEM предоставляет графический интерфейс для выполнения большого количества операций с базами данных: резервное копирование, просмотр аварийных журналов, графиков производительности.
Instance Efficiency Percentages
№ | Показатель | Критерии |
---|---|---|
1 | Buffer nowait | Если показатель меньше 95%, значит, буферы data block buffer используются неправильно. Возможно, нужно увеличить data block buffer size |
2 | Buffer Hit | Если показатель меньше 95%, значит, буферы data block buffer используются неправильно. Возможно, нужно увеличить data block buffer size |
3 | Library cache hit | Если показатель меньше 95% — нужно расширять shared pool (либо причина в bind-переменных) |
4 | Redo NOWAIT | Если показатель меньше 95%, это говорит о проблеме в redo log buffer или redo log |
5 | Parse CPU to Parse Elapsd | Показатель должен быть больше или равен 90%, тогда большинство процессов не ожидает ресурсов, что говорит о правильной работе базы данных |
6 | Non-Parse CPU | Показатель должен приближаться к 100%, это значит, что большинство ресурсов CP используется в различных операциях, кроме parsing, что говорит о правильной работе базы данных. Если Non-Parse CPU низкий, значит, база много времени тратит на разбор запроса вместо реальной работы |
7 | In-memory sort | Значение меньше 100 говорит о том, что сортировка идет через диск, а также есть потенциальные проблемы с PGA_AGGREGATE_TARGET,SORT_AREA_SIZE,HASH_AREA_SIZE и bitmap setting |
8 | Soft Parse | Чем он выше, тем меньше у нас Hard Parse |
9 | Latch Hit | Чем он выше, тем меньше мы ждем Latches (если он низкий — у нас проблемы с CPU-Bound и Latches) |
Читайте также: