2011-03-28

_small_table_threshold

Давно хотел посмотреть сам на этот механизм, но Льюис уже выложил тесты.

Определение
  • Table < (2%*buffer_cache) = _small_table_threshold is located into the middle point of LRU list when loaded into the buffer cache.
  • Table > (2%*buffer_cache) = _small_table_threshold is located into the cold end of the LRU list when loaded into the buffer cache.


По результатам тестов Льюиса для Oracle 10.2, проверяется содержимое буферного кеша (x$bh), количество touch и количество блоков для таблиц разных размеров:
  1. Для больших таблиц (свыше 10% кеша) touch не увеличивается, используется table scans (long)
  2. Для таблиц больше 25% буферного кеша при сканировании буферы переиспользуются
  3. Для таблиц меньше 10% буферного кеша touch увеличивается, причем первое сканирование таблицы не увеличивает touch (получается table scans (long)), последующие увеличивают (table scans (short))
  4. Для таблиц менее 2% touch count увеличивается каждый раз, используются table scans (short)
  5. Для 9-й и менее версий оракла поведение соответствует определению.

2011-03-16

Немного о лицензировании

Первая вьюха:
select * from v$license;

SESSIONS_MAX 0
SESSIONS_WARNING 0
SESSIONS_CURRENT 2
SESSIONS_HIGHWATER 7
USERS_MAX 0
CPU_COUNT_CURRENT 1
CPU_CORE_COUNT_CURRENT
CPU_SOCKET_COUNT_CURRENT
CPU_COUNT_HIGHWATER 1
CPU_CORE_COUNT_HIGHWATER
CPU_SOCKET_COUNT_HIGHWATER


Информация по использованию опций:
SELECT * FROM dba_feature_usage_statistics
Вьюха основана на таблицах wri$:
create or replace view dba_feature_usage_statistics as
select samp.dbid, fu.name, samp.version, detected_usages, total_samples,
decode(to_char(last_usage_date, 'MM/DD/YYYY, HH:MI:SS'),
NULL, 'FALSE',
to_char(last_sample_date, 'MM/DD/YYYY, HH:MI:SS'), 'TRUE',
'FALSE')
currently_used, first_usage_date, last_usage_date, aux_count,
feature_info, last_sample_date, last_sample_period,
sample_interval, mt.description
from wri$_dbu_usage_sample samp, wri$_dbu_feature_usage fu,
wri$_dbu_feature_metadata mt
where
samp.dbid = fu.dbid and
samp.version = fu.version and
fu.name = mt.name and
fu.name not like '_DBFUS_TEST%' and /* filter out test features */
bitand(mt.usg_det_method, 4) != 4 /* filter out disabled features */;


Пополняются они один раз в неделю (колонка sample_interval = 604800). Значение интервала берется из таблицы WRI$_DBU_USAGE_SAMPLE, API для изменения этого значения (кроме прямого UPDATE) найти не удалось.

Единственный пакет, который ссылается на эту таблицу: dbms_feature_usage_internal, который содержит 2 интересные процедуры:
EXEC dbms_feature_usage_internal.exec_db_usage_sampling(curr_date => SYSDATE) Заработало только после переподключения сессии, почему-то не обновляет в wri$_dbu_usage_sample колонку last_sample_date, но обновление количества использований после переподключения сессии происходит (до переподключения в трейсе вообще не было UPDATEов)
EXEC dbms_feature_usage_internal.sample_one_feature(feat_name => 'Automatic Workload Repository') - приводит к обновлению dba_feature_usage_statistics, причем дата последнего обновления проставляется в last_sample_date для всех опций (т.к. она одна и берется из таблицы wri$_dbu_usage_sample).

Что делают эти процедуры можно посмотреть, сняв трейс 10046.