Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / IBM DB2, WebSphere, IMS, U2, etc Новый топик    Ответить
 Аналитика и исторические сведения по изменению таблиц  [new]
AVRomanenko
Member

Откуда:
Сообщений: 75
Здравствуйте.
Необходимо предоставить данные, которые отображают тенденцию роста таблиц и схем в целом для того, чтобы можно было прогнозировать, каких размеров они будут через промежуток времени.
Требуется Ваша помощь в разработке данного отчета.
Поскольку опыта работы с DB2 нет от слова "совсем" (хоть и есть знания в SQL), буду рад даже подсказке, в каком направлении двигаться.
Возможно ли собрать необходимые данные для дальнейшего анализа и расчета?
28 дек 18, 10:42    [21775513]     Ответить | Цитировать Сообщить модератору
 Re: Аналитика и исторические сведения по изменению таблиц  [new]
AVRomanenko
Member

Откуда:
Сообщений: 75
Есть предположение, как это сделать. На примере одной таблицы.
1) получить размер таблицы
2) получить активность таблицы (количество вносимых записей за интервал). но тут есть нюансы и недопонимание. Во-первых, возможно ли это сделать, и, если да, то этот показатель средний за всю историю жизни таблицы, или что-то иное?
3) перемножить п1. и п.2.
Верно ли я думаю?
28 дек 18, 10:54    [21775525]     Ответить | Цитировать Сообщить модератору
 Re: Аналитика и исторические сведения по изменению таблиц  [new]
Mark Barinstein
Member

Откуда: Москва
Сообщений: 4842
AVRomanenko,

--INSERT INTO TABLE_SIZE
CREATE TABLE TABLE_SIZE AS (
SELECT
CURRENT TIMESTAMP TS
, T.TABSCHEMA, T.TABNAME
, SUM(A.DATA_OBJECT_P_SIZE) DATA_OBJECT_P_SIZE
, SUM(A.INDEX_OBJECT_P_SIZE) INDEX_OBJECT_P_SIZE
, SUM(A.LONG_OBJECT_P_SIZE) LONG_OBJECT_P_SIZE
, SUM(A.LOB_OBJECT_P_SIZE) LOB_OBJECT_P_SIZE
, SUM(A.XML_OBJECT_P_SIZE) XML_OBJECT_P_SIZE
, SUM(A.COL_OBJECT_P_SIZE) COL_OBJECT_P_SIZE
FROM
TABLE(VALUES
('SYSIBM', 'SYSCOLUMNS')
, ('SYSIBM', 'SYSTABLES')
) T (TABSCHEMA, TABNAME)
, TABLE(ADMIN_GET_TAB_INFO(T.TABSCHEMA, T.TABNAME)) A
GROUP BY T.TABSCHEMA, T.TABNAME
) DEFINITION ONLY IN USERSPACE1
;

Создаете таблицу командой выше. Измените набор нужных таблиц вручную. В примере показаны пара системных.
Если надо по всем таблицам схемы, то в табличную функцию ADMIN_GET_TAB_INFO можно передавать только имя схемы и NULL в качестве второго параметра.
Если надо по всем таблицам, можно пользоваться представлением SYSIBMADM.ADMINTABINFO, основанным на этой функции.

Далее время от времени запускаете запрос выше, закомменировав 2-ю и предпоследнюю строки, и раскомментировав 1-ю.
Запрос будет вставлять записи в таблицу TABLE_SIZE с текущим временем.
Для получения показателей роста за период вы запросом получаете разницу в показателях между мин. и макс. временами интервала.
28 дек 18, 15:42    [21775869]     Ответить | Цитировать Сообщить модератору
 Re: Аналитика и исторические сведения по изменению таблиц  [new]
AVRomanenko
Member

Откуда:
Сообщений: 75
Mark Barinstein,
здравствуйте, мне не понятно, что куда менять...) (извините за тупость)
мне нужен последний вариант - по всем таблицам всех схем. пробовал заменять представлением в разных местах, и только ошибку выдает, что я не туда пихаю. Подскажите, пожалуйста
29 дек 18, 10:06    [21776229]     Ответить | Цитировать Сообщить модератору
 Re: Аналитика и исторические сведения по изменению таблиц  [new]
Mark Barinstein
Member

Откуда: Москва
Сообщений: 4842
AVRomanenko,

Добрый день.

Для всех таблиц.

INSERT INTO TABLE_SIZE
SELECT 
  CURRENT TIMESTAMP TS
, TABSCHEMA, TABNAME
, SUM(DATA_OBJECT_P_SIZE) DATA_OBJECT_P_SIZE
, SUM(INDEX_OBJECT_P_SIZE) INDEX_OBJECT_P_SIZE
, SUM(LONG_OBJECT_P_SIZE) LONG_OBJECT_P_SIZE
, SUM(LOB_OBJECT_P_SIZE) LOB_OBJECT_P_SIZE
, SUM(XML_OBJECT_P_SIZE) XML_OBJECT_P_SIZE
, SUM(COL_OBJECT_P_SIZE) COL_OBJECT_P_SIZE
FROM SYSIBMADM.ADMINTABINFO
GROUP BY TABSCHEMA, TABNAME;
29 дек 18, 10:42    [21776248]     Ответить | Цитировать Сообщить модератору
 Re: Аналитика и исторические сведения по изменению таблиц  [new]
AVRomanenko
Member

Откуда:
Сообщений: 75
Mark Barinstein,
спасибо большое Вам за помощь! Запустил скрипт, посмотрим, что получится. Можете, пожалуйста, уточнить, если у меня есть партицированные таблицы, размер их тоже однозначно определяется из перечисленных размеров в запросе?
29 дек 18, 11:19    [21776268]     Ответить | Цитировать Сообщить модератору
 Re: Аналитика и исторические сведения по изменению таблиц  [new]
Mark Barinstein
Member

Откуда: Москва
Сообщений: 4842
AVRomanenko
если у меня есть партицированные таблицы, размер их тоже однозначно определяется из перечисленных размеров в запросе?
В случае партицированных таблиц есть особенность - SYSIBMADM.ADMINTABINFO.INDEX_OBJECT_*_SIZE не включают информацию о непартиционированных (not partitioned) индексах, если такие есть в базе.
Поэтому, в общем случае запрос должен выглядеть так:
INSERT INTO TABLE_SIZE
SELECT 
  CURRENT TIMESTAMP TS
, T.TABSCHEMA, T.TABNAME
, T.DATA_OBJECT_P_SIZE
, T.INDEX_OBJECT_P_SIZE + COALESCE(I.INDEX_OBJECT_P_SIZE, 0) INDEX_OBJECT_P_SIZE
, T.LONG_OBJECT_P_SIZE
, T.LOB_OBJECT_P_SIZE
, T.XML_OBJECT_P_SIZE
, T.COL_OBJECT_P_SIZE
FROM (
SELECT 
  TABSCHEMA, TABNAME
, SUM(DATA_OBJECT_P_SIZE) DATA_OBJECT_P_SIZE
, SUM(INDEX_OBJECT_P_SIZE) INDEX_OBJECT_P_SIZE
, SUM(LONG_OBJECT_P_SIZE) LONG_OBJECT_P_SIZE
, SUM(LOB_OBJECT_P_SIZE) LOB_OBJECT_P_SIZE
, SUM(XML_OBJECT_P_SIZE) XML_OBJECT_P_SIZE
, SUM(COL_OBJECT_P_SIZE) COL_OBJECT_P_SIZE
FROM SYSIBMADM.ADMINTABINFO
GROUP BY TABSCHEMA, TABNAME
) T
LEFT JOIN (
SELECT TABSCHEMA, TABNAME, SUM(INDEX_OBJECT_P_SIZE) INDEX_OBJECT_P_SIZE
FROM TABLE(ADMIN_GET_INDEX_INFO(NULL, NULL, NULL))
WHERE INDEX_PARTITIONING='N'
GROUP BY TABSCHEMA, TABNAME
) I ON I.TABSCHEMA=T.TABSCHEMA AND I.TABNAME=T.TABNAME
;
29 дек 18, 13:09    [21776350]     Ответить | Цитировать Сообщить модератору
 Re: Аналитика и исторические сведения по изменению таблиц  [new]
AVRomanenko
Member

Откуда:
Сообщений: 75
Mark Barinstein,
ругается на все строки с выводом размера таблиц
и выдает ошибку типа "COL_OBJECT_P_SIZE" is not valid in the context where it is used.
29 дек 18, 14:12    [21776416]     Ответить | Цитировать Сообщить модератору
 Re: Аналитика и исторические сведения по изменению таблиц  [new]
Mark Barinstein
Member

Откуда: Москва
Сообщений: 4842
AVRomanenko
ругается на все строки с выводом размера таблиц
и выдает ошибку типа "COL_OBJECT_P_SIZE" is not valid in the context where it is used.
Значит, в вашей версии базы такое поле не выдается этими функциями / представлением, т.к. в ней нет возможности хранения данных по колонкам.
Исключите это поле из всех команд.
29 дек 18, 14:49    [21776448]     Ответить | Цитировать Сообщить модератору
 Re: Аналитика и исторические сведения по изменению таблиц  [new]
AVRomanenko
Member

Откуда:
Сообщений: 75
Mark Barinstein,

Здравствуйте. С наступившим! )
Вы можете подсказать, это нормально, что на большом объеме таблиц выполнение запроса затягивается на такое долгое время? -примерно 23 000 таблиц и почти полтора часа выполнения.
2 янв 19, 08:44    [21777501]     Ответить | Цитировать Сообщить модератору
 Re: Аналитика и исторические сведения по изменению таблиц  [new]
AVRomanenko
Member

Откуда:
Сообщений: 75
разобрался, что SYSIBMADM.ADMINTABINFO очень медленно выводит информацию, в сравнении с теми же syscat.indexes, syscat.tables , syscat.tablespaces, которые выводят инфу за секунду, но показывают другие данные по размерам.
здесь ничего не поделать, верно?
2 янв 19, 14:32    [21777581]     Ответить | Цитировать Сообщить модератору
 Re: Аналитика и исторические сведения по изменению таблиц  [new]
Mark Barinstein
Member

Откуда: Москва
Сообщений: 4842
AVRomanenko
разобрался, что SYSIBMADM.ADMINTABINFO очень медленно выводит информацию, в сравнении с теми же syscat.indexes, syscat.tables , syscat.tablespaces, которые выводят инфу за секунду, но показывают другие данные по размерам.
здесь ничего не поделать, верно?

Да, по всем таблицам при больших объемах это может занимать довольно много времени.
В syscat.tables и syscat.indexes информация попадает после сбора статистики на таблицы и их индексы, и она может быть не совсем точная - на некоторые таблицы статистика вообще может быть не собрана, на некоторые - собрана c аппроксимацией (sampled).
3 янв 19, 13:45    [21777874]     Ответить | Цитировать Сообщить модератору
 Re: Аналитика и исторические сведения по изменению таблиц  [new]
AVRomanenko
Member

Откуда:
Сообщений: 75
Mark Barinstein,
подскажите, пожалуйста, чтобы Ваш последний запрос рассчитал размер только в рамках одной таблицы, мне нужно в конце последней строкой поставить условие?
where T.TABNAME = 'name' and T.TABSCHEMA = 'name'
14 янв 19, 17:21    [21784969]     Ответить | Цитировать Сообщить модератору
 Re: Аналитика и исторические сведения по изменению таблиц  [new]
AVRomanenko
Member

Откуда:
Сообщений: 75
и еще я пробовал убирать строку
WHERE INDEX_PARTITIONING='N'

и ничего не изменилось. пробовал вместо метки N ставить P, тот же самый результат.
14 янв 19, 17:31    [21784984]     Ответить | Цитировать Сообщить модератору
 Re: Аналитика и исторические сведения по изменению таблиц  [new]
Mark Barinstein
Member

Откуда: Москва
Сообщений: 4842
AVRomanenko
чтобы Ваш последний запрос рассчитал размер только в рамках одной таблицы, мне нужно ...

Когда таблиц много, а надо вытащить данные по небольшому кол-ву таблиц, то эффективнее должно быть использование табличных функций, а не представлений. Иначе сначала будет сделан расчет по всем таблицам, а только потом выбраны нужные данные.
В примере можно добавлять строки по другим таблицам, если их более одной.
+ По нескольким таблицам

INSERT INTO TABLE_SIZE
SELECT 
  CURRENT TIMESTAMP TS
, A.TABSCHEMA, A.TABNAME
, T.DATA_OBJECT_P_SIZE
, T.INDEX_OBJECT_P_SIZE + COALESCE(I.INDEX_OBJECT_P_SIZE, 0) INDEX_OBJECT_P_SIZE
, T.LONG_OBJECT_P_SIZE
, T.LOB_OBJECT_P_SIZE
, T.XML_OBJECT_P_SIZE
, T.COL_OBJECT_P_SIZE
FROM TABLE (VALUES
  ('MYSCHEMA1', 'MYTABLE1')
--, ('MYSCHEMA2', 'MYTABLE2')
) A (TABSCHEMA, TABNAME)
, TABLE (
SELECT 
  SUM(DATA_OBJECT_P_SIZE) DATA_OBJECT_P_SIZE
, SUM(INDEX_OBJECT_P_SIZE) INDEX_OBJECT_P_SIZE
, SUM(LONG_OBJECT_P_SIZE) LONG_OBJECT_P_SIZE
, SUM(LOB_OBJECT_P_SIZE) LOB_OBJECT_P_SIZE
, SUM(XML_OBJECT_P_SIZE) XML_OBJECT_P_SIZE
, SUM(COL_OBJECT_P_SIZE) COL_OBJECT_P_SIZE
FROM TABLE(ADMIN_GET_TAB_INFO(A.TABSCHEMA, A.TABNAME))
) T
LEFT JOIN TABLE (
SELECT SUM(INDEX_OBJECT_P_SIZE) INDEX_OBJECT_P_SIZE
FROM TABLE(ADMIN_GET_INDEX_INFO('T', A.TABSCHEMA, A.TABNAME))
WHERE INDEX_PARTITIONING='N'
) I ON 1=1;
14 янв 19, 18:00    [21785024]     Ответить | Цитировать Сообщить модератору
Все форумы / IBM DB2, WebSphere, IMS, U2, etc Ответить