Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как подсчитать размер индекса
|
|||
|---|---|---|---|
|
#18+
Доброе время суток! Прошу подскажите как подсчитать размер индекса? а суммарный размер таблицы с индексами? К примеру вот таблица содержит 3 поля Поле Тип sp_id char(14) st_wyg smallint bufer char Все 3 поля составляют первичный ключ. Пишется - запись имеет длину 17 б, всего записей 250, размер индекса – 31 б, суммарный размер таблицы 16 Кб. Как подсчитали размер индекса? суммарный размер таблицы? Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2007, 12:27 |
|
||
|
Как подсчитать размер индекса
|
|||
|---|---|---|---|
|
#18+
Вас интересует теория (почему именно строка 17 байт, а индекс 31байт?) или практика (сколько килобайт или страниц занимает уже существующая таблица/индекс ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2007, 13:26 |
|
||
|
Как подсчитать размер индекса
|
|||
|---|---|---|---|
|
#18+
Практика, нужны эти данные для существующих таблиц/индексов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2007, 13:32 |
|
||
|
Как подсчитать размер индекса
|
|||
|---|---|---|---|
|
#18+
Практика, нужны эти данные для существующих таблиц/индексов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2007, 13:53 |
|
||
|
Как подсчитать размер индекса
|
|||
|---|---|---|---|
|
#18+
можно легко посмотреть размер данных и индексов, а также др. информацию с помощью утилиты oncheck: oncheck -pt database:tabname ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2007, 14:04 |
|
||
|
Как подсчитать размер индекса
|
|||
|---|---|---|---|
|
#18+
Вам, наверное, будет полезно знать, что индексы могут быть "присоединенные" (т.е. индексные страницы расположены в том же табличном пространстве, что и данные таблицы) и "отсоединенные", когда индекс строится в отдельном пространстве (tablespace). В каждом случае размеры нужно считать по разному, но можно использовать готовые запросы. См. структуру системных таблиц systables (npused), sysindexes и таблицы/представления из системной БД sysmaster (systabinfo, systabnames, sysptnhdr) Есть множество простеньких запросов для подсчета размеров таблиц (tablespaces), но я вам предлагаю большой, "сложный" и... красивый :) -------------------------------------------------- -- Find all real tables space usage (pages and MB) -- for one db (current) -- User's tables, System's tables and Total -- IDS 7.3+ 9.2+ -- -- V.Shulzhenko DBA_Tools (by Informix FAQ) -- 2002-01 - 2007-04 -------------------------------------------------- ----- User's tables ----- select n.tabname[1,18] tabname18 ,substr(ti_nrows,1,10) num_rows ,substr(sum(ti_nptotal),1,7) total_p ,substr(sum(ti_npused),1,7) used_p ,substr(sum(ti_npdata),1,7) data_p ,substr((sum(ti_npused)-sum(ti_npdata)),1,7) nodata ,substr((sum(ti_nptotal)-sum(ti_npused)),1,7) free_p ,substr(round(sum(ti_nptotal)*(select sh_pagesize from sysmaster:sysshmvals)/1048576,2),1,7) size_mb from sysmaster:systabinfo i,sysmaster:systabnames n,systables s where i.ti_partnum = n.partnum and s.tabid > 99 and n.partnum=s.partnum and n.dbsname= (select odb_dbname from sysmaster:sysopendb where odb_sessionid=dbinfo('sessionid') and odb_iscurrent='Y') group by 1,2 into temp _temp_dbatools ; insert into _temp_dbatools select '------------------','----------','-------','-------','-------','-------','-------','-------' from systables where tabid=1 ; ----- Total User's tables ----- insert into _temp_dbatools select '-Total User tables' ,substr(sum(ti_nrows),1,10) ,substr(sum(ti_nptotal),1,7) ,substr(sum(ti_npused),1,7) ,substr(sum(ti_npdata),1,7) ,substr((sum(ti_npused)-sum(ti_npdata)),1,7) ,substr((sum(ti_nptotal)-sum(ti_npused)),1,7) ,substr(round(sum(ti_nptotal)*(select sh_pagesize from sysmaster:sysshmvals)/1048576,2),1,7) from sysmaster:systabinfo i,sysmaster:systabnames n,systables s where i.ti_partnum = n.partnum and s.tabid > 99 and n.partnum=s.partnum and n.dbsname= (select odb_dbname from sysmaster:sysopendb where odb_sessionid=dbinfo('sessionid') and odb_iscurrent='Y') ; insert into _temp_dbatools select '------------------','----------','-------','-------','-------','-------','-------','-------' from systables where tabid=1 ; ----- System's tables ----- insert into _temp_dbatools select n.tabname[1,18] ,substr(ti_nrows,1,10) ,substr(sum(ti_nptotal),1,7) ,substr(sum(ti_npused),1,7) ,substr(sum(ti_npdata),1,7) ,substr((sum(ti_npused)-sum(ti_npdata)),1,7) ,substr((sum(ti_nptotal)-sum(ti_npused)),1,7) ,substr(round(sum(ti_nptotal)*(select sh_pagesize from sysmaster:sysshmvals)/1048576,2),1,7) from sysmaster:systabinfo i,sysmaster:systabnames n,systables s where i.ti_partnum = n.partnum and s.tabid < 100 and n.partnum=s.partnum and n.dbsname= (select odb_dbname from sysmaster:sysopendb where odb_sessionid=dbinfo('sessionid') and odb_iscurrent='Y') group by 1,2 ; insert into _temp_dbatools select '------------------','----------','-------','-------','-------','-------','-------','-------' from systables where tabid=1 ; ----- Total System's tables ----- insert into _temp_dbatools select '-Total System tabs' ,substr(sum(ti_nrows),1,10) ,substr(sum(ti_nptotal),1,7) ,substr(sum(ti_npused),1,7) ,substr(sum(ti_npdata),1,7) ,substr((sum(ti_npused)-sum(ti_npdata)),1,7) ,substr((sum(ti_nptotal)-sum(ti_npused)),1,7) ,substr(round(sum(ti_nptotal)*(select sh_pagesize from sysmaster:sysshmvals)/1048576,2),1,7) from sysmaster:systabinfo i,sysmaster:systabnames n,systables s where i.ti_partnum = n.partnum and s.tabid < 100 and n.partnum=s.partnum and n.dbsname= (select odb_dbname from sysmaster:sysopendb where odb_sessionid=dbinfo('sessionid') and odb_iscurrent='Y') ; insert into _temp_dbatools select '------------------','----------','-------','-------','-------','-------','-------','-------' from systables where tabid=1 ; ----- Total all tables for db ----- insert into _temp_dbatools select '-Total all tables-' ,substr(sum(ti_nrows),1,10) ,substr(sum(ti_nptotal),1,7) ,substr(sum(ti_npused),1,7) ,substr(sum(ti_npdata),1,7) ,substr((sum(ti_npused)-sum(ti_npdata)),1,7) ,substr((sum(ti_nptotal)-sum(ti_npused)),1,7) ,substr(round(sum(ti_nptotal)*(select sh_pagesize from sysmaster:sysshmvals)/1048576,2),1,7) from sysmaster:systabinfo i,sysmaster:systabnames n where i.ti_partnum = n.partnum and n.dbsname= (select odb_dbname from sysmaster:sysopendb where odb_sessionid=dbinfo('sessionid') and odb_iscurrent='Y') ; --------------------------------------- Select * from _temp_dbatools ; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2007, 14:12 |
|
||
|
Как подсчитать размер индекса
|
|||
|---|---|---|---|
|
#18+
А где там размер индексов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2007, 14:19 |
|
||
|
Как подсчитать размер индекса
|
|||
|---|---|---|---|
|
#18+
Имела в виду, в oncheck -pt где размер индексов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2007, 14:22 |
|
||
|
Как подсчитать размер индекса
|
|||
|---|---|---|---|
|
#18+
vasilis, огромное спасибо за скрипт, размеры таблиц теперь для меня не проблема, хотя с размерами индексов вопрос по-прежнему, sysindexes не помогла. Я наверное неправильно все же сформулировала. Mне важно смоделировать ситуацию - таблица создана, в ней скажем сейчас 33 записи, а в будущем планируется - 200 записей. Информация по ней существующей мне менее интересна. Мне нужно рассчитать размер индекса, размер записи конечно знаю, и размер БУДУЩЕЙ таблицы (то есть когда будет достигнуто 200 записей). Так получается, что это все же теория... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2007, 14:36 |
|
||
|
Как подсчитать размер индекса
|
|||
|---|---|---|---|
|
#18+
Marina3494Имела в виду, в oncheck -pt где размер индексов? если внимательно посмотрите вывод этой команды то увидите размеры индексов (если индексы на таблице есть). Для индексов и данных там есть поле Number of pages allocated (для каждого индекса свое) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2007, 15:20 |
|
||
|
Как подсчитать размер индекса
|
|||
|---|---|---|---|
|
#18+
Хоть убивай себя об стену, не понимаю! Вот насчет вышеприведенной таблицы что пишет: TBLspace Report for valmetdb:informix.welstat Physical Address 10bb1a Creation date 10/23/2002 02:36:41 TBLspace Flags 802 Row Locking TBLspace use 4 bit bit-maps Maximum row size 17 Number of special columns 0 Number of keys 1 Number of extents 2 Current serial value 1 First extent size 8 Next extent size 8 Number of pages allocated 16 Number of pages used 10 Number of data pages 3 Number of rows 263 Partition partnum 1048913 Partition lockid 1048913 Extents Logical Page Physical Page Size 0 10da1a 8 8 10f402 8 Слова index не вижу! Number of pages allocated - разве это не число страниц? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2007, 16:18 |
|
||
|
Как подсчитать размер индекса
|
|||
|---|---|---|---|
|
#18+
Насколько Я помню, в Server Studio™ with Sentinel™ есть возможность оценить размер таблицы и индексов .... :) Выгрузить можно отсюда - http://www.serverstudio.com/downloads/ С уважением, Вадим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2007, 16:40 |
|
||
|
Как подсчитать размер индекса
|
|||
|---|---|---|---|
|
#18+
Marina3494Хоть убивай себя об стену, не понимаю! Вот насчет вышеприведенной таблицы что пишет: TBLspace Report for valmetdb:informix.welstat ... Слова index не вижу! Number of pages allocated - разве это не число страниц? Если это весь вывод oncheck который вы привели, то индексов на таблице valmetdb:informix.welstat нету! Number of pages allocated в данном выводе это кол-во страниц с данными. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2007, 16:55 |
|
||
|
Как подсчитать размер индекса
|
|||
|---|---|---|---|
|
#18+
Marina3494 Number of keys 1 .... Слова index не вижу! Судя по всему, один индекс все же должен быть. Информация из oncheck -pT должна включать ниже еще такие строчки (обратите внимание на слово Index :) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2007, 19:56 |
|
||
|
Как подсчитать размер индекса
|
|||
|---|---|---|---|
|
#18+
Marina3494Информация по ней существующей мне менее интересна. Мне нужно рассчитать размер индекса, размер записи конечно знаю, и размер БУДУЩЕЙ таблицы (то есть когда будет достигнуто 200 записей). Так получается, что это все же теория... Вам будет полезно почитать раздел "Structure of B-Tree Index Pages" http://publib.boulder.ibm.com/infocenter/idshelp/v10/topic/com.ibm.adref.doc/adref02.htm#ToC_285 к тому же очень полезно бы знать версию Информикс. В примитивном случае расчет делается так: 1. длина (размер) всех полей, входящих в ключ индекса (varchar полный) 2. плюс служебные байты на указатель строки и признак удаления (от 5 до 9 байт в зависимости от версии и фрагментированности) 3. размер страницы на диске (зависит от версии) минус служебный заголовок страницы 4. 3-е делим на 1-е + 2-е 5. учитываем коэффициент заполнения индекса (по умолчанию 90%) 6. округляем в меньшую сторону и получаем количество индексных элементов на странице. 7. Ожидаемое число строк в таблице (и кол-во уникальных значений ключа) делим на 6-е и получаем ПРИБЛИЗИТЕЛЬНОЕ число страниц индекса. Оно еще зависит от уникальности или повторяемости значений ключей, количества уровней в индексе. Так что все просто :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2007, 20:41 |
|
||
|
Как подсчитать размер индекса
|
|||
|---|---|---|---|
|
#18+
Огромное спасибо всем! Оказалось параметр t в oncheck надо писать T, и тогда вывод информации полный, а с t - урезанный как я привела.! А за алгоритм - vasilis, такое спасибище, просто нет слов! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2007, 12:22 |
|
||
|
Как подсчитать размер индекса
|
|||
|---|---|---|---|
|
#18+
Marina3494А за алгоритм - vasilis, такое спасибище, просто нет слов! И вам спасибо за слова благодарности. В награду :) свежий скриптик для определения размеров detached indexes (сильно не тестировал, замечания принимаются) Код: 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. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2007, 22:53 |
|
||
|
Как подсчитать размер индекса
|
|||
|---|---|---|---|
|
#18+
Marina3494Огромное спасибо всем! Оказалось параметр t в oncheck надо писать T, и тогда вывод информации полный, а с t - урезанный как я привела.! Что значит урезанный? Если вы имеете ввиду информацию об индексах, так эта информация приводится при использовании обеих опций. Просто при -T выдается еще дополнительная информация. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2007, 10:51 |
|
||
|
|

start [/forum/topic.php?fid=44&msg=34582608&tid=1608377]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
48ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 255ms |
| total: | 385ms |

| 0 / 0 |
