Просторы интернета

19 Февраль 2015
Earlier
Ср, Июн 26, 2019

Recently I got a question: why CBO chooses “FIXED TABLE FULL TABLE” scan instead of “FIXED INDEX” in case of a join to flashback_transaction_query view with the predicate “q.xid = a.versions_xid”:

select versions_xid, versions_startscn, versions_starttime, versions_endscn, versions_endtime, --scn_to_timestamp, to_char(a.classification), a.* from vms.advisory_arch_20190624 versions between [...]
Source: orasql.org
Вс, Июн 09, 2019
Запрос со ср.временем выполнения 3,7 мс периодически выполняется 22 секунды (*): — учитывая, что SQL Patch NO_ADAPT_4g02xxnvrk8j9 применяется как стандартное средство отключения адаптивных фич на уровне запроса и не способен повлиять на отдельное выполнение, остаётся вопрос, что же замедлило выполнение запроса SQL_EXEC_ID = 18306846 ? SQL Monitoring Report ничего существенного [...]
Source: iusoltsev.wordpress.com
Пн, Июн 03, 2019
В процессе анализа запросов удобно использовать SQL Monitor через процедуру DBMS_SQLTUNE.REPORT_SQL_MONITOR напрямую или через OEM/OCM/SQL Developer Полезно при этом иметь в виду некоторые "врождённые особенности отображения статистики выполнения запроса, как я полагаю, неизменные с версии 11g: 1) Если в процессе выполнения запрос, например, через PL/SQL функции вызывает рекурсивные запросы (классический [...]
Source: iusoltsev.wordpress.com
Вс, Июн 02, 2019

Some time ago there was a question on the sql.ru about splitting validity periods for gym cards to enabled and blocked periods:

-- we have a table with gym cards (card id, validity period: from/to) CREATE TABLE cards(id_card NUMBER, num_card VARCHAR2(100), dt_from DATE, dt_to DATE); -- periods when cards were blocked (record id, [...]
Source: orasql.org
Чт, Май 30, 2019

You may know that table() (kokbf$ collection functions), xmltable and json_table functions block Join-Predicate PushDown(JPPD).

Simple example:

DDL create table xtest(a, b, c) as select mod(level,1000),level,rpad('x',100,'x') from dual connect by level0) 8 - access("A"="C"."A")

You can see that JPPD works fine in case of global temporary tables and, obviously, the first workaround is to [...]

Source: orasql.org
Вт, Май 28, 2019

Today I wanted to give a link to the description of v$sql_hint.target_level to show that no_parallel can be specified for statement or object, and though it's pretty obvious, but surprisingly I haven't found any articles or posts about it, so this short post describes it.
v$sql_hint.target_level is a bitset, where
1st bit [...]

Source: orasql.org
Пт, Май 17, 2019
С Максимом Филатовым рассматривали кейс с заметным кол-вом ожиданий cursor: pin S wait on X в том месте/тесте, где их быть по идее быть не должно По данным AWR проблема выглядела следующим образом: ASH показывает параллельные процессы (P…) тестовых INSERT STATEMENT, блокирующие друг друга на cursor: pin S wait on [...]
Source: iusoltsev.wordpress.com
Вт, Май 14, 2019

Sometimes it might be useful to analyze top time-consuming filter and access predicates from ASH, especially in cases when db load is spread evenly enough by different queries and top segments doesn't show anything special, except usual things like “some tables are requested more often than others”.
Of course, we can [...]

Source: orasql.org
Пт, Апр 19, 2019
Предыдущее наблюдение касалось обычных (неадаптивных) планов выполнения, адаптивные планы демонстрируют тот же эффект в версии 12.2, что логично и любопытно выглядит Итак, запрос с нестабильным / небыстрым выполнением показывает признаки адаптивности — столбцы "V$SQL.Adapt, "XML.Adapt (V$SQL_PLAN.OTHER_XML), плюс BIND_SENSE=Y — т.е. чувствителен к значениям связанных переменных, но для применения Adaptive Cursor [...]
Source: iusoltsev.wordpress.com
Вт, Апр 09, 2019
Начиная с версии 12.2 часто наблюдаю, как 2 плана выполнения с различными PHV используются для обозначения одного и того же фактического плана выполнения Например, запрос в анамнезе показывает 2 несовпадающих PLAN_HASH_VALUE при эквивалентной паре (FULL_PLAN_HASH_VALUE, PLAN_HASH_2): При этом, PHV=2164351587 и PHV=3400946657 по содержимому совпадают абсолютно: — и по набору операций [...]
Source: iusoltsev.wordpress.com
Сб, Апр 06, 2019
Продолжая тесты с Oracle LiveSQL 19c, проверил наличие проблемы с плохими FULL SCAN-ами при [авто]добавлении [INTERVAL] PARTITION в процессе каждодневной DML активности и запросами с условием IN Тестовая таблица простая, и в процессе первоначальной Direct PATH загрузки партиции добавляются, по крайней мере global statistics успешно собирается: NUM_ROWS BLOCKS EMPTY_BLOCKS AVG_SPACE [...]
Source: iusoltsev.wordpress.com
Сб, Апр 06, 2019
Запись V$SESSION_LONGOPS, в частности, поля MESSAGE, TOTALWORK для операций Dynamic Sampling выглядят очень серьёзно: — при рекордно малой продолжительности ELAPSED_SECONDS = 8 для немаленькой таблицы — 278,127,738 Blocks — и только пустые SQL_PLAN_HASH_VALUE, SQL_EXEC_START, SQL_EXEC_ID да SQL_PLAN_OPTIONS выдают неладное) В ASH та же операция Dynamic Sampling также отчётливо отображена: — [...]
Source: iusoltsev.wordpress.com
Вт, Мар 26, 2019
INVALID Objects in Oracle

It is quite normal for Oracle database objects to become INVALID, especially when a dependency chain is broken. This articles takes a closer look at:

typical reasons why Oracle objects become INVALID how to identify INVALID objects [...]
Source: www.oratable.com
Вс, Мар 17, 2019
Уважаемый коллега Максим Филатов продолжает изыскания: 1) в ходе экспериментов с Infiniband на общедоступном железе Максим доказал/добился внесения важного уточнения в неоднозначную документацию поддержки Oracle Clusterware and RAC Support for RDS Over Infiniband (Doc ID 751343.1): In 12.2+ version, RDS is supported only for databases running on the engineered systems, [...]
Source: iusoltsev.wordpress.com
Ср, Мар 13, 2019
DBMS_SCHEDULER.CREATE_JOB to Run Procedures Asynchronously

Consider a PL/SQL stored procedure that handles a heavy transaction. The procedure is extremely slow – when executed from a UI, the application hangs for minutes. On analysis it is found that the procedure is performing a complex series [...]

Source: www.oratable.com
Пн, Мар 11, 2019
Наиболее точное определение хинта DYNAMIC_SAMPLING можно найти у Джонатана Льюиса: You can use the dynamic_sampling() hint in two different ways in an SQL statement. If you use the hint in the “cursor-level” form: /*+ dynamic_sampling ({level}) */ e.g. /*+ dynamic_sampling(4) */, this is equivalent to setting the parameter optimizer_dynamic_sampling to [...]
Source: iusoltsev.wordpress.com
Вс, Мар 10, 2019
Если вдруг в приступе доброты душевной разработчик решил не ограничивать себя в фантазиях потребление ресурсов и, например, в определении materialized view (или в запросе) по-простому вставил /*+ PARALLEL */, и это породило не всегда приятный для администраторов DML вида: , который в полном соответствии с Automatic Degree of Parallelism (AutoDOP) [...]
Source: iusoltsev.wordpress.com
Пн, Фев 25, 2019
Keep the Response Body with Non-2xx Responses in PL/SQL

When UTL_HTTP web service calls nicely return 2xx status codes, all is well with the world. Things get tricky when a web service call encounters an error and sends back a non-2xx response. [...]

Source: www.oratable.com
Сб, Фев 16, 2019

Compare the results of the following query with the clause “fetch first 2 rows only”

with t1(a) as (select * from table(odcinumberlist(1,3))) ,t2(a,b) as (select * from table(ku$_objnumpairlist( [...]
Source: orasql.org
Сб, Фев 16, 2019

Everyone knows that rownum in inline views blocks many query transformations, for example pushing/pulling predicates, scalar subquery unnesting, etc, and many people use it for such purposes as a workaround to avoid unwanted transformations(or even CBO bugs).

Obviously, the main reason of that is different calculation of rownum:

If we pull the [...]

Source: orasql.org
Вт, Фев 05, 2019

Just short note: If your imported Oracle Linux image hangs on boot in the Oracle cloud, just set GRUB_DISABLE_UUID=”true” in /etc/default/grub

[...]
Source: orasql.org
Вс, Дек 30, 2018

Three interesting myths about rowlimiting clause vs rownum have recently been posted on our Russian forum:

TopN query with rownum “fetch first N rows only” is always faster than rownum “SORT ORDER BY STOPKEY” stores just N top records during sorting, while “WINDOW SORT PUSHED RANK” sorts all input and [...]
Source: orasql.org
Пт, Дек 14, 2018
С Иваном Постниковым наблюдали/разбирали нечасто встречаемое ожидание library cache load lock, в течение заметного времени наблюдавшееся у ряда сессий 2-го инстанса: , содержимое ROW_WAIT_OBJ# не очень полезно: , судя по пустым SQL_EXEC_START / SQL_EXEC_ID запросы/курсоры находятся в процессе погрузки в Library Cache (на что указывает и название ожидания длительностью SECONDS_IN_WAIT [...]
Source: iusoltsev.wordpress.com
Пн, Дек 10, 2018
До обновления 12.1 -> 12.2 запрос удовлетворительно (SLA, timeouts,…) быстро выполнялся по плану: , с использованием OJPPD — Old-stype (non-cost-based) Join Predicate Push-Down (*) высокоизбирательного условия ("INVOICE.CLIENT_ID) в обзор (**) вида UNION-ALL PARTITION (***) с последующим быстрым индексным доступом (****) В версии 12.2, похоже, что-то существенно изменилось, OJPPD в процессе [...]
Source: iusoltsev.wordpress.com
Пт, Дек 07, 2018

Recently I had to install the patch for fixing cross-platform PDB transport bug onto the docker images with Oracle, so these are easy way how to do it:

1. create directory “patches” and create “install_patches.sh”:

#!/bin/bash unzip -u ./*.zip CURDIR=`pwd` for D in *; do if [ -d "${D}" ]; [...]
Source: orasql.org
Вт, Ноя 20, 2018
Pagination Queries in Oracle: Analytics, Row Limiting Clause

Pagination is the process of dividing query results (typically on a user interface) into discrete pages, where each page contains a smaller/more manageable number of rows. In classic offset pagination, each page shows a fixed count of rows [...]

Source: www.oratable.com
Вт, Ноя 20, 2018
Pagination Queries in Oracle: Analytics, Row Limiting Clause

Pagination is the process of dividing query results (typically on a user interface) into discrete pages, where each page contains a smaller/more manageable number of rows. In classic offset pagination, each page shows a fixed count of rows [...]

Source: www.oratable.com
Вт, Окт 09, 2018
Conditional unique index on multiple columns

When we need to enforce uniqueness on a combination of table columns *only if* a certain condition is true, Oracle helps us implement this using a function-based index.

What is a Function-Based Index?

A function-based index is created on the value of [...]

Source: www.oratable.com
Вт, Окт 09, 2018
Conditional unique index on multiple columns

When we need to enforce uniqueness on a combination of table columns *only if* a certain condition is true, Oracle helps us implement this using a function-based index.

What is a Function-Based Index?

A function-based index is created on the value of [...]

Source: www.oratable.com
Ср, Окт 03, 2018
Java Stored Procedures in Oracle

Some solution requirements are best addressed with Java code in the Oracle database. This article shows you use cases where Java methods in Oracle are useful, how Oracle lets you store Java methods and how they can be called from PL/SQL.

Java [...]
Source: www.oratable.com
Комментирование отключено.