Dmitri Kuzmenko wrote:
не знаю, каким именно Вы образом и какую статистику записываете
при помощи таблиц мониторинга. Приведите пример, пожалуйста,
если это не секретная технология.

Ничего секретного :)

Процедура вида

create procedure SAVE_STAT (
    STAT_COMMENT varchar(255))
as
declare variable "Statement ID" integer;
declare variable "Attachment ID" integer;
declare variable "Transaction ID" integer;
declare variable "State" char(6);
...
BEGIN
  transaction_id = CURRENT_TRANSACTION;
  IN AUTONOMOUS TRANSACTION DO
  BEGIN
  FOR
    SELECT st.mon$statement_id as "Statement ID",
           st.mon$attachment_id as "Attachment ID",
           st.mon$transaction_id "Transaction ID",
           case
             when st.mon$state = 0 then 'IDLE'
             when st.mon$state = 1 then 'ACTIVE'
           ...
    FROM mon$statements st
    left join mon$record_stats r on (st.mon$stat_id = r.mon$stat_id)
    left join mon$io_stats io on (st.mon$stat_id = io.mon$stat_id)
    where st.mon$transaction_id = :transaction_id
    order by st.mon$timestamp
    INTO :"Statement ID",
         :"Attachment ID",
         :"Transaction ID",
         :"State",
         ...
  DO
  BEGIN
insert into saved_stat (stat_comment, "Statement ID", "Attachment ID", "Transaction ID", "State", ...) values (:stat_comment, :"Statement ID", :"Attachment ID", :"Transaction ID", :"State", ...);
  END
  END
END

Полный текст процедуры делается Экспертом методом наложения заклинания хранимки по табличке (смайл)

Далее для примера:

execute block
as
declare variable cnt int;
begin
  delete from saved_stat;
  execute procedure save_stat('1');
  select count(*) from RDB$TYPES into :cnt;
  execute procedure save_stat('2');
select count(*) from RDB$TYPES where RDB$TYPE_NAME starting 'T' into :cnt;
  execute procedure save_stat('3');
end

Смотрим результат:

select S.ID, S.stat_comment,
  s."Non-indexed Reads", s."Indexed Reads",
  s."Records Inserted", s."Records Updated", s."Records Deleted"
 from saved_stat s order by S.ID

Выводы:
  Между 1 и 2 - 227 неиндексых чтения
  Между 2 и 3 - 12 индексных чтений

А вот что удивило (вопрос к Владу скорее всего)
1 -> 2 - 1 запись вставлена
2 -> 3 - 1 запись вставлена

Странно, по идее все вставки в автономке...

Из мониторинга можно ещё вытянуть имя процедуры и номер строки откуда процедур сбора статистики вызвана.



Ответить