Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Длина записи таблицы в БД / 15 сообщений из 15, страница 1 из 1
19.11.2013, 11:15
    #38469547
Semen Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Длина записи таблицы в БД
Здравствуйте всем!
DB2 WSE 9.7.6. Помогите, пожалуйста, со скриптом.

Нужна выборка, которая бы показывала длину записи по каждой таблице в байтах. Например, в БД есть таблица с полям (ID bigint, NAME varchar(1000)), тогда в выборку должна попасть информация:
Код: plsql
1.
TBSCHEMA.TABNAME 1008



Можно ли реализовать такой скрипт?

С уважением, Семен Попов
...
Рейтинг: 0 / 0
19.11.2013, 12:00
    #38469612
AVGROWSIZE
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Длина записи таблицы в БД
Semen Popov,

AVGROWSIZE в sysibm.systables подойдет?
...
Рейтинг: 0 / 0
19.11.2013, 16:27
    #38470147
Semen Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Длина записи таблицы в БД
AVGROWSIZESemen Popov,

AVGROWSIZE в sysibm.systables подойдет?Не то. Проверил - выдает совсем непонятные цифры.
...
Рейтинг: 0 / 0
19.11.2013, 16:35
    #38470165
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Длина записи таблицы в БД
Semen Popov,

Здравствуйте.

Как-то так
Код: sql
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.
select c.tabschema, c.tabname
, sum (
case 
 when c.typename='DECIMAL' then int(c.length/2)+1
 when c.typename like 'LONG%' then 24
 when c.typename='VARCHAR' then c.length+4
 when c.typename='GRAPHIC' then c.length*2
 when c.typename='VARGRAPHIC' then c.length*2+4
 when c.typename like '%LOB' then
  case c.inline_length
   when 0 then 
    case
     when c.length<=1024 then 72
     when c.length<=8192 then 96
     when c.length<=65536 then 120
     when c.length<=524000 then 144
     when c.length<=4190000 then 168
     when c.length<=134000000 then 200
     when c.length<=536000000 then 224
     when c.length<=1070000000 then 256
     when c.length<=1470000000 then 280
     when c.length<=2147483647 then 316
    end
   else c.inline_length+4
  end 
 else c.length
end
+ case c.nulls when 'Y' then 1 else 0 end 
) as rowlenght
from syscat.columns c
join syscat.tables t on c.tabschema=t.tabschema and c.tabname=t.tabname
where t.type in ('T', 'S')
group by c.tabschema, c.tabname

Я это делал, чтоб определить, в пространство с какой страницей влезет эта таблица.
Т.е. в запросе учитываются служебные байты тоже.
Взято из CREATE TABLE (таблица byte count).
Можете добавить в запрос про XML.
...
Рейтинг: 0 / 0
19.11.2013, 16:35
    #38470166
Semen Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Длина записи таблицы в БД
Тут надо копать SYSCOLUMNS
...
Рейтинг: 0 / 0
19.11.2013, 16:48
    #38470193
Semen Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Длина записи таблицы в БД
Mark Barinstein, спасибо. То что надо. Мы работаем с базой с размером страниц 4К, а разработчик предлагает перейти на БД с размером 32К. Предоставляет резервную копию эталонной базы, чтобы мы ее развернули у себя. Но их база совершенно пустая и содержит "кривые" таблицы (или какие-то вообще не содержит). То есть надо будет много чего под нас затачивать. Но тем не менее, я понимаю, если не перейти на 32К, то это потом может плохо для нас обернуться. Если разработчик захочет добавить какие-нибудь длинные поля в таблицу или новую таблицу с длиной записи более 4К, то это в текущей базе сделать будет невозможно
...
Рейтинг: 0 / 0
19.11.2013, 18:20
    #38470325
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Длина записи таблицы в БД
Semen PopovЕсли разработчик захочет добавить какие-нибудь длинные поля в таблицу или новую таблицу с длиной записи более 4К, то это в текущей базе сделать будет невозможнотут есть варианты.
1. Вы можете бороться с длинными (VAR)CHAR'ами, преобразовывая их в CLOB.
Начиная с 9.7.3, если актуальная длина значения не больше 32K, то вы сможете эти поля сравнивать. Правда, сортировать, группировать и индексировать их нельзя.
Beyond 32k? How to overcome the 32 KB pagesize limit .
2. В 10.5 появилась поддержка Extended row size .
...
Рейтинг: 0 / 0
20.11.2013, 10:45
    #38470887
Semen Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Длина записи таблицы в БД
Mark Barinstein, к сожалению мы не имеем права менять структуру БД разработчика. Поэтому преобразованием заниматься не будем.
Думаю, правильно будет перейти на эталонную БД. Правда, еще не могу оценить, что за этим последует.

Скажите, а поменять размер страницы у текущей БД есть возможность?
...
Рейтинг: 0 / 0
20.11.2013, 11:23
    #38470957
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Длина записи таблицы в БД
Semen PopovСкажите, а поменять размер страницы у текущей БД есть возможность?Размер страницы вы задаёте на уровне табличного пространства, когда его создаёте. Потом размер страницы менять у этого пространства нельзя.
На уровне базы вы задаёте размер страницы по-умолчанию, который будет использоваться, если при создании буферного пула или пространства вы не указали размер страницы. Менять этот параметр тоже нельзя.

Если вы вдруг выяснили, что добавить (расширить) поле в таблице нельзя из-за того, что новый размер записи не влезает в страницу, то вы можете перенести таблицу в другое пространство с бОльшим размером страницы с помощью ADMIN_MOVE_TABLE .
...
Рейтинг: 0 / 0
20.11.2013, 15:01
    #38471354
Semen Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Длина записи таблицы в БД
Mark Barinstein, спасибо. Скажите, а может ли размер страницы табличного пространства влиять на производительность БД? Сейчас все таблицы имеют длину записи, не превышающую 4К. Разработчики предлагают переходить на 32К, объясняя это еще и тем, что производительность улучшится
...
Рейтинг: 0 / 0
20.11.2013, 16:31
    #38471530
Semen Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Длина записи таблицы в БД
Semen Popov...
Сейчас все таблицы имеют длину записи, не превышающую 4К. Разработчики предлагают переходить на 32К,
....

Имеется в виду, что разработчики предлагают переходить на БД с размером страницы 32К, хотя в структуре сейчас нет таблиц с длиной записи, превышающей 4К
...
Рейтинг: 0 / 0
20.11.2013, 17:16
    #38471580
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Длина записи таблицы в БД
Semen Popov,

Обычно для преимущественно транзакционных систем выбирают страницу в 4-8K, для хранилищ - 16-32K.
Вкратце:
В oltp системах, как правило, доступ к записям случайный, поэтому, чтобы поднять запись в память, надо будет делать IO меньшего размера. Конкурентное обновление записей на одной и той же странице также имеет свои накладные расходы, поэтому эффективнее держать меньше записей на одной странице.
В хранилищах преобладают массивные сканирования, и для того, чтобы, скажем, прочитать значительный объём данных, эффективнее меньшее кол-во IO, но бОльшего размера каждое. Конкурентное обновление данных на одной странице не так часто происходит.

Но вам надо слушать разработчиков, они свою систему должны знать лучше.
Если они так советуют, значит у них есть на это какие-то причины.
...
Рейтинг: 0 / 0
20.11.2013, 19:51
    #38471880
Semen Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Длина записи таблицы в БД
Mark Barinstein, большое спасибо.
Mark Barinstein...
Но вам надо слушать разработчиков, они свою систему должны знать лучше.
Если они так советуют, значит у них есть на это какие-то причины.Полностью с Вами согласен
...
Рейтинг: 0 / 0
20.11.2013, 20:04
    #38471898
Semen Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Длина записи таблицы в БД
Mark BarinsteinКонкурентное обновление записей на одной и той же странице также имеет свои накладные расходы, поэтому эффективнее держать меньше записей на одной странице.
Поясните, пожалуйста, правильно ли я понимаю? При маленькой длине записи и большем (в несколько раз) размере страницы на этой странице размещаются много записей и их конкурентное обновление будет вести к падению производительности?
...
Рейтинг: 0 / 0
21.11.2013, 13:40
    #38472860
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Длина записи таблицы в БД
Semen PopovПоясните, пожалуйста, правильно ли я понимаю? При маленькой длине записи и большем (в несколько раз) размере страницы на этой странице размещаются много записей и их конкурентное обновление будет вести к падению производительности?Ну, это на практике больше относится к индексным страницам, и при определенном характере нагрузки и стечении обстоятельств вы можете обнаружить падение производительности из-за конкурентного обновления.
Основная идея всё-таки в том, что для случайного доступа io эффективнее на меньших по размеру страницах.
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Длина записи таблицы в БД / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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