Настройка производительности

Материал из START-IP
Перейти к навигации Перейти к поиску

"db file sequential read" из индекса SRV_DATE_I

Если в плане присутствует индекс SRV_DATE_I а в ожиданиях большое время занимает db file sequential read - удалите данный индекс или переведите его в UNSABLE, при условии что БД параметр skip_unusable_indexes установлен в TRUE.

Массовые ожидания "cache buffer chains"

В качестве решения рекомендуем установку пачтей:

Описание патча 32720:

Перевод VIEW TB_TARIFF_SERVICES$V, TB_TARIFF_SERVICES$V2 и TB_TRS_RELATIONS$V в MATERIALIZED VIEW, для снижения нагрузки на буферный кеш и получения полного набора данных из одного блока.


Описание патча 32900

Модификация формы ТП (F000220) для работы с патчем 32720.

По предварительным оценкам данное решение позволит снизить нагрузку на буфферный кэш на 50%.

ПРИМЕЧАНИЕ!!! после установки патча необходим ручной запуск процедуры ONCOMMIT_F000220 после каждого прямого изменения данных в таблицах: TB_TARIFF_PLANS, TB_TARIFF_SUBPLANS, TB_TARIFF_SERVICES, TB_TRS_RELATIONS. Если данные таблиц изменяются через интерфейсную форму F000220, то дополнительных действий не требуется.

KEEP pool

Для снижения времени реакции OLTP транзакций имеет смысл выделить для часто используемых объектов KEEP pool. Например для таблиц:

MIX
ABONENT
ACS_OBJECTS
CT_IP_LISTS
CT_POOLS
CT_USERS
CT_USER_SERVICES
IBS_ABS_ACCOUNTS
TB_ACCOUNTS
TB_COUNTERS
TB_SERV_DEFS
TB_SERV_LINKS
TB_TARIFF_PLANS
TB_TARIFF_SERVICES
TB_TARIFF_SUBPLANS
TB_USER_SERV_ADD_PARAMS_READY
TB_WEB_SESSIONS
TB_WTMPS
TB_WTMPS_IP_WORK
TB_WTMPS_SESSIONS_TECH
USTP_REF

В keep pool необходимо будет поместить, таблица и их индексы. Размер keep pool вычисляется исходя из объемов таблиц и индексов помещаемых в keep. В случае если объем памяти сервера не позволяет разместить указанный список объектов, необходимо сконцентрироваться только на наиболее часто используемых.

Замена глобальных индексов на локальные

на партицированных таблицах TB_SERVICES, TB_WTMPS_ARCHIVE, TB_WTMPS_SESSION_CHARGES, TB_WTMPS_SESSIONS_ARCHIVE можно удалить первичный ключ, сделать индекс неуникальным и партицировать его.


На таблице TB_WTMPS_SESSION_CHARGES можно удалить constraint twsc_twsa_fk


Партицирование TB_INVOICES

при закрытии периода выполняется FULL SCAN по таблице TB_INVOICES, в случае если в таблице хранится более миллиона записей за длительный период времени рекомендуем партицировать таблицу помесячно по полю INV_TDATE, что позволит выполнять FULL SCAN только по данным за отчетный период (данный FULL SCAN обоснован, т.к при закрытии периода будут задействованы все записи таблицы). Существующие индексы, кроме первичного ключа, следует перевести в локальные.

Проверить занятый объем и количество записей:

select sum(bytes)/1024/1024 from dba_segments where segment_name='TB_INVOICES';

SELECT COUNT(1) FROM TB_INVOICES;

(дополнительно смотреть Партицирование существующей таблицы EXCHANGE PARTITION, Партицирование существующей таблицы DBMS REDEFINITION)

Партицирование журналов

для удобства манипулирования и удаления данных вы можете так же партицировать по месяцам журнальные таблицы с суффиксом _JN


Оптимизация индексов

SRV_AB_FK_I

для ускорения запросов связанных со статистикой рекомендуем пересоздать индекс SRV_AB_FK_I

CREATE INDEX SRV_AB_FK_I ON TB_SERVICES
(SRV_AB_ID, SRV_DATE DESC)
  PCTFREE    10
  INITRANS   4
  MAXTRANS   255
  STORAGE    (
              INITIAL   10M
              NEXT      10M
             )
LOGGING
LOCAL
COMPRESS 1 -- использовать только в случае большого объема буферного кэша и запаса процессорной мощности

INV_US_FK_I

CREATE INDEX SIP.INV_US_FK_I ON SIP.TB_INVOICES
(INV_US_USER_NAME, INV_TDATE)
  PCTFREE    10
  INITRANS   4
  MAXTRANS   255
  STORAGE    (
              INITIAL   1M
              NEXT      1M
             )
LOGGING
LOCAL

INV_US_FK_I

Позволит снизить стоимость часто вызываемого запроса и количество GETS в несколько раз

create index USS_US_FK_I2 on CT_USER_SERVICES (USS_US_USER_NAME, USS_SL_TYPE) initrans 2 storage(initial 1M next 1M) compress online; drop index USS_US_FK_I; alter index USS_US_FK_I2 rename to USS_US_FK_I;

TW_PK

Позволит снизить конкуренцию за ITL и одни и те же блоки индекса

alter index TW_PK rebuild reverse online;


ELK_ABONENT_IX

Позволит снизить время выполнения запросов статистики ЕЛК (результат менее 15 сек)

Недостатки:

- индекс занимает ~ 10% от размера данных в партиции TB_SERVICES

- снижает время вставки в TB_SERVICES;

В связи с большими объемами данных в TB_SERVICES, предлагаем создавать индекс в статусе UNUSABLE, после чего собирать данные индекса и статистику по последним трем-четырем партициям. ВНИМАНИЕ! параметр skip_unsuable_index должен быть выставлен в TRUE!!! в противном случае возникнут проблемы с работой биллинга!!!


Создание индекса:

create index elk_abonent_ix on TB_SERVICES(srv_ab_id, srv_date, srv_uss_sl_type, srv_tfp_code, 
srv_int_code, srv_msr_code,  srv_value, srv_cost, srv_user_name, srv_uss_logname, srv_time, srv_srd_code) 
LOCAL UNUSABLE;

Сбор данных и статистики по необходимым партициям

ALTER INDEX elk_abonent_ix REBUILD PARTITION PART2014_06 TABLESPACE USERS ONLINE;

exec dbms_stats.gather_index_stats('SIP_W', 'elk_abonent_ix', partname=>'PART2014_06', granularity=>'PARTITION');

вместо SIP_W, PART2014_06 и USERS подставить актуальную информацию.