Базы данных Oracle - статьи


Том Кайт: о разделении, расщеплении и удалении (On Sharing, Splitting, and Deleting, By Tom Kyte) - часть 5


SQL> alter session set cursor_sharing=similar; Session altered.

SQL> select * from t CS_SIMILAR where id=1 and object_id=1; no rows selected SQL> select * from t CS_SIMILAR where id=1 and object_id=2; no rows selected SQL> select * from t CS_SIMILAR where id=1 and object_id=3; no rows selected

SQL> select sql_text 2 from v$sql 3 where sql_text like 'select * from t CS% where id = % and object_id=%' 4 order by sql_text;

SQL_TEXT ------------------------------------------------------------------------- select * from t CS_SIMILAR where id = :"SYS_B_0" and object_id=:"SYS_B_1"

Листинг 4: Установка CURSOR_SHARING=SIMILAR.

Как показано на этом листинге, я изменял литералы в предикатах со столбцом OBJECT_ID, но не со столбцом ID. Оптимизатор распознал, что значения столбца OBJECT_ID надежны, и ему для разных значений этого столбца в предикатах не нужно генерировать разные планы, поэтому он не добавлял к сигнатуре курсора значения этого столбца. Только тогда, когда в предикате используются разные значения столбца ID, будут генерироваться новые планы.

Итак, это показывает, что установка CURSOR_SHARING=SIMILAR может уменьшать количество записей, которые вы видите в разделяемом пуле. Если бы это приложение должно было изменять литералы в предикатах со столбцом ID и использовало бы сотни и тысячи уникальных значений, установка CURSOR_SHARING=SIMILAR не оказывала бы существенного влияния на использование разделяемого пула. С другой стороны, если бы приложение использовало в предикатах со столбцом ID только два значения, то установка CURSOR_SHARING=SIMILAR могла бы оказывать в высшей степени позитивное воздействие на использование разделяемого пула.




Начало  Назад  Вперед



Книжный магазин