powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Informix [игнор отключен] [закрыт для гостей] / Активность индексов и "мертвые" индексы
5 сообщений из 5, страница 1 из 1
Активность индексов и "мертвые" индексы
    #35347335
vasilis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В CDI недавно был интересный топик " unused indexes (Informix 7.31) "
http://groups.google.com/group/comp.databases.informix/browse_thread/thread/31fc8ac6392f5290/b2303ce2538c1e5b?lnk=gst&q=unused+indexes+(Informix+7.31)#b2303ce2538c1e5b
Обсуждение еще продолжается, но это подвигло меня на создание парочки запросов по мотивам этой темы (табличку sysptnkey я до этого не использовал).
Как совершенно справедливо заметил Habichtsberg, Reinhard (CDI)
- Which of the values is significant for the usage of the index? It can't be all the values because insert, delete or update of rows of the related table will change some of the values. That has nothing to do with the usage of the index by queries. My thought is that isreads, pagereads and bufreads may be significant but it's only a guess.
И вряд ли заданный в топике вопрос (как определить и затем удалить неиспользуемые индексы) решается нормально в текущих версиях (не знаю, как дела в 11), тем не менее, мне показалось интересным определить активность индексов (по сумме всех операций вв/выв) и т.н. "мертвые" индексы, по которым операций вв/выв совсем нет в течении длительного времени. Это интересно даже с точки зрения проверки работы планов оптимизатора, использования/неиспользования конкретных индексов и т.п.
Как обычно, запросы оптимизированы под вывод через dbaccess (строки не более 80)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
----------------------------------------------------------------------
----- indexes_activity_1db -----
-- Indexes IO-activity (exclude system catalog) in one db
-- Активность (detached) индексов  - все операции вв/выв только для текущей БД 
--   (кроме присоединенных индексов на системных таблицах)
--
--  V.Shulzhenko  DBA_Tools  by Mark Scranton (CDI, 2008-05)
----------------------------------------------------------------------
set isolation dirty read;
select 
-- first 40  
         f.dbsname[ 1 , 18 ]       database_18
        ,t.tabname[ 1 , 18 ]       table_name_18
        ,f.tabname[ 1 , 18 ]       index_name_18
--        ,k.keylen              keylen
        ,substr(ti_nptotal, 1 , 9 )  size_pg
        ,substr (sum(isreads+iswrites+isrewrites+isdeletes
            +bufreads+bufwrites
            +pagreads+pagwrites
            +seqscans
            ), 1 , 10 )            total_io
from sysmaster:sysptprof f, sysmaster:sysptnkey k, sysmaster:systabinfo i
     ,sysindexes x, systables t
where k.partnum = f.partnum
      and k.partnum = f.partnum
      and f.partnum = i.ti_partnum
 and x.idxname = f.tabname and x.tabid = t.tabid      
      and f.tabname not matches 'sys*'
      and f.dbsname=
        (select odb_dbname from sysmaster:sysopendb o
         where odb_sessionid=dbinfo('sessionid') and odb_iscurrent='Y')
group by  1 , 2 , 3 , 4 
-- having sum(isreads+iswrites+isrewrites+isdeletes
--            +bufreads+bufwrites
--            +pagreads+pagwrites
--            +seqscans
--           ) > 0
order by  5  desc,  1 , 2 , 3  
;

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
----------------------------------------------------------------------
----- indexes_not_activity_1db -----
-- Dead Indexes - without IO-activity (exclude system catalog) in one db
-- "Мертвые" detached индексы , т.е. по ним нет операций вв/выв
--   (кроме присоединенных индексов на системных таблицах)
--    только для указанной БД
--
--  V.Shulzhenko  DBA_Tools  by Mark Scranton (CDI, 2008-05)
----------------------------------------------------------------------
set isolation dirty read;
select 
-- first 40  
         f.dbsname[ 1 , 18 ]       database_18
        ,t.tabname[ 1 , 18 ]       table_name_18
        ,f.tabname[ 1 , 18 ]       index_name_18
        ,k.keylen              key_len
        ,ti_nptotal            size_pg
from sysmaster:sysptprof f, sysmaster:sysptnkey k, sysmaster:systabinfo i
    ,sysindexes x, systables t
where k.partnum = f.partnum
      and k.partnum = f.partnum
      and f.partnum = i.ti_partnum
      and f.tabname not matches 'sys*'    
    and x.idxname = f.tabname and x.tabid = t.tabid      
      and (isreads+iswrites+isrewrites+isdeletes
           +bufreads+bufwrites
           +pagreads+pagwrites+seqscans
          ) =  0 
      and f.dbsname=
        (select odb_dbname from sysmaster:sysopendb o
         where odb_sessionid=dbinfo('sessionid') and odb_iscurrent='Y')
group by  1 , 2 , 3 , 4 , 5 
order by  1 , 2 , 3  
;
Для определения полной активности одного индекса
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
----------------------------------------------------------------------
----- index_activity_ -----
-- Index IO-activity (by index name)
-- Активность (detached) индекса  - все операции вв/выв и блокировки
--   поиск индекса по имени (шаблону имени)
--
--  V.Shulzhenko  DBA_Tools  by Mark Scranton (CDI, 2008-05)
----------------------------------------------------------------------
set isolation dirty read;
select 
         t.tabname             table_name
        ,f.tabname             index_name
        ,k.keylen              keylen
        ,sum(ti_nptotal)       size_pg
        ,'---- io ----'        ___________
        ,sum(isreads)          reads
        ,sum(iswrites)         writes
        ,sum(isrewrites)       rewrites
        ,sum(isdeletes)        deletes
        ,sum(bufreads)         bufreads
        ,sum(bufwrites)        bufwrites
        ,sum(pagreads)         pagreads
        ,sum(pagwrites)        pagwrites
        ,sum(seqscans)         seqscans
        ,'---- locks ----'     ___________
        ,sum(lockreqs)         lockreqs
        ,sum(lockwts)          lockwts
        ,sum(deadlks)          deadlks
        ,sum(lktouts)          lktouts
from sysmaster:sysptprof f, sysmaster:sysptnkey k, sysmaster:systabinfo i
     ,sysindexes x, systables t
where k.partnum = f.partnum
      and k.partnum = f.partnum
      and f.partnum = i.ti_partnum
 and x.idxname = f.tabname and x.tabid = t.tabid      
      and f.dbsname=
        (select odb_dbname from sysmaster:sysopendb o
         where odb_sessionid=dbinfo('sessionid') and odb_iscurrent='Y')
 and x.idxname matches 
--'Укажи имя индекса или шаблон'
'*101*'
group by  1 , 2 , 3 
order by  1 , 2 , 4  desc 
;
...
Рейтинг: 0 / 0
Активность индексов и "мертвые" индексы
    #35372751
vasilis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще на эту же тему из Informix FAQ
http://www.informixfaq.com/wiki/doku.php/wiki:sysmaster#how_to_list_the_users

What are the poor indexes
The following sql can identify sql using poor indexes
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
   select sqx_sessionid, 
          sqx_executions,
          round(sqx_bufreads/sqx_executions),
          round(sqx_pagereads/sqx_executions), 
          sqx_estcost, 
          sqx_estrows, 
          sqx_index, 
          sqx_sqlstatement  
     from  syssqexplain 
     where sqx_executions >  3000 
          and (sqx_bufreads / sqx_executions >  50 
          or sqx_executions >  100 )
          and (sqx_bufreads / sqx_executions >  1000 
          or sqx_executions >  1 )
          and sqx_bufreads / sqx_executions >  50000  
In the later engines, or databases with detached indices this information is also available via Table IO stats but the indexname as the table filter
...
Рейтинг: 0 / 0
Активность индексов и "мертвые" индексы
    #35373117
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vasilis
по которым операций вв/выв совсем нет в течении длительного времени. Это интересно даже с точки зрения проверки работы планов оптимизатора, использования/неиспользования конкретных индексов и т.п. Как обычно, запросы оптимизированы под вывод через dbaccess (строки не более 80)


Для меня гораздо больший практический интерес представляет ситуация
когда индекс не используется по доступу на чтение(select) или изменение( update).
При вставке и удалении записей в таблицу индексы тоже читаются и изменяются,
если же для select, update они не используются - это пустая работа .
Поэтому от таких индексов нужно избавляться в первую очередь.
Такие индексы вредят производительности гораздо больше, чем просто мертвые индексы.

С уважением, onstat.
...
Рейтинг: 0 / 0
Активность индексов и "мертвые" индексы
    #35373125
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Признаюсь чесно времени подробно вникать в тему у меня небыло.

Если что не так сказал или кого повторил, заранее прошу прощения.

ИМХО Для вычисления действительно плохих индексов в VNext
было бы полезно завести отдельные счетчики bufreads & bufwrites в sysptprof
или какой либо другой таблице, по критериям insert-delete & select-update
тогда вычисление вредных индексов сильно упростилось бы.

При должном подходе СУБД могла-бы сама бросаться собщениями
типа :

Код: plaintext
1.
2.
 50 %  keys was inserted  for   index_name 
but    was not read  by select or update  before  deleting. 
...
Рейтинг: 0 / 0
Активность индексов и "мертвые" индексы
    #35373841
Фотография Andron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотрите onstat -g ppf там есть информация про вставки/обновления/удаления
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Informix [игнор отключен] [закрыт для гостей] / Активность индексов и "мертвые" индексы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]