- Производительность работы главным
образом зависит от настройки буферных
пулов.
-
И к их созданию и конфигурации стоит
подойти со всей ответственностью )
-
- Правила
-
Размер страницы табличного пространства
и размер страницы буферного пула
одинаковы для всех табличных пространств,
обслуживаемых буферным пулом.
- При создании размер страницы пула
буферов (Page Size) НЕЛЬЗЯ
изменить после его создания. (Можно
только удалить буф.пул и создать его с
новым значением)
Page Size может принимать значения
4, 8, 16, 32 Kb
- Параметры буферных пулов
PAGESIZE – размер страницы пула
буферов 4, 8, 16, 32 Kb
EXTENTSIZE — размер
экстента, число
страниц, которые будут записаны в
контейнер, прежде чем перейти к следующему
контейнеру
PREFETCHSIZE — количество
страниц, считываемых из табличного
пространства при предварительной
выборке данных. Система
сама решает, что производительность
можно повысить за счет считывания
данных до того, как они будут указаны
в запросе.
-
OVERHEAD – издержки
контроллера на операции чтения-записи
(I/O), зависит
от оборудования
-
- Узнать более подробную информацию
о буферных пулах можно из системной
таблицы syscat.bufferpools
- db2 «select BPNAME, BUFFERPOOLID, NPAGES, PAGESIZE, ESTORE from
syscat.bufferpools»
-
- Запрос покажет сколько оперативной памяти потребуется для буферных пулов (округление до КИЛО в большую сторону)
- db2 "select BPNAME, BUFFERPOOLID, NPAGES*ceil(PAGESIZE*0.001) from syscat.bufferpools
- union
- select 'all', 0, sum(NPAGES*ceil(pagesize*0.001)) from syscat.bufferpools"
- NPAGES*PAGESIZE — и есть тот размер, который
занимает буферный пул в памяти
-
- Каждое табличное пространство
содержит один или несколько контейнеров.
Контейнер это файл на диске, для DMS
(управляется БД)
табличных пространств
или путь для SMS (управляется
системой) табличных
пространств.
-
SMS - System manage, управляются
системой, контейнеры хранятся в
определенной директории.
-
DMS - Database manage, управляются
базой данных, контейнеры хранятся в
файлах.
-
Еще два важных параметра связанные с буферными пулами -
NUM_IOCLEANERS - количество чистильщиков страниц, утилита по удалению страниц которые помечены для очистки
clean for reuse, ее задача переписать измененные (грязные)
страницы из буферного пула на диск.
Если БД интенсивно пишет (INSERT, UPDATE) то рекомендовано увеличивать этот параметр. Для Selectа вполне может хватить и значения по умолчанию. DB2 9.7 устанавливает этот параметр автоматически automatic.
CHNGPGS_THRESH - Устанавливает пороговую величину в процентах по достижению которой DB2 запускает утилиту очистки.
Предельная доля измененных страниц (CHNGPGS_THRESH) = 50
В данном случае, когда доля измененных страниц достигает 50%, запускается чистильщик.
- МОНИТОРИНГ буферных
пулов
-
Включаем
-
db2 -v update monitor switches using bufferpool
on //включить мониторинг
-
db2 -v get monitor switches db2 -v reset monitor
all
- Мониторим
-
-- выполняем приложение --
-
db2 -v get snapshot for all databases >
snap1.out
-
db2 -v get snapshot for dbm >> snap2.out
-
db2 -v get snapshot for all bufferpools >>
snap3.out
-
Выключаем
-
db2 -v reset monitor all db2 -v terminate сброс
мониторов
db2 -v update monitor switches using bufferpool
off
Изменение
буферных пулов
db2 alter bufferpool ibmdefaultbp size 10000
AUTOMATIC
Параметр AUTOMATIC
в 9.7 уже есть
и говорит о том, что пул будет расти
автоматически
Если вам
удалось накосячить и задать слишком
большой размер буферного пула, то DB2
запустить скрытые буферные
пулы, а в db2diag.log напишет:
BufferPool memory allocation failed...
buffer pool ID "1", but this buffer
pool is not active at this time...
Database will come up with hidden buffer pools.
Команды для
просмотра буферных пулов
Список табличных пространств
в БД мы можем получить командой
db2 list tablespaces show detail
Информация о контейнерах
для этого табличного пространства -
db2 list tablespace containers for [указываем ID
пространства] show detail.
db2 list tablespace
containers for 3 show detail
Вывод
ID табличного пространства
= 0
Имя =
SYSCATSPACE
Тип
= Пространство, управляемое системой
Содержимое
= Все постоянные данные. Обычное
таблич▒
Состояние
= 0x0000
Подробное объяснение:
Нормальное состояние
Всего страниц
= 93057
Используется страниц
= 93057
Используется страниц
= 93057
Свободно страниц
= Не применимо
Максимальный уровень
используемых страниц = Не применимо
Размер страницы (байт)
= 4096
Размер экстента (страниц)
= 32
Размер предварительного
чтения (страниц) = 128
Число контейнеров
= 1
Минимальное время восстановления
= 2010-06-25-07.50.19.000000
Еще один способ (более
удобный) - команда
db2pd -db [База данных]
-tablespaces
Tablespace Configuration:
Address Id Type Content PageSz ExtentSz
Auto Prefetch BufID BufIDDisk FSC NumCntrs MaxStripe LastConsecPg
Name
0x00002B49853FD920 0 SMS Regular 4096 32
Yes 128 4096 1 On 1 0 31
SYSCATSPACE
Tablespace Statistics:
Address Id TotalPgs UsablePgs UsedPgs
PndFreePgs FreePgs HWM Max HWM State MinRecTime
NQuiescers PathsDropped
0x00002B49853FD920 0 93057 93057 93057
0 0 0 0 0x00000000 1277452219
0 No
Tablespace Autoresize Statistics:
Address Id AS AR InitSize IncSize
IIP MaxSize LastResize LRF
0x00002B49853FD920 0 No No 0 0
No 0 None No
- Еще более удобный способ
получить информацию о состоянии,
предложенный Mark
Barinstein на форуме sql.ru
select char(TBSP_NAME, 20), TBSP_STATE
from SYSIBMADM.SNAPTBSP_PART where TBSP_NAME in ('SYSCATSPACE', '
TEMPSPACE1', … через зпт перечисляем табличные
пространства)
Какие таблицы размещаются
в этом табличном пространстве
SELECT NAME, CTIME, INDEX_TBSPACE, status,
NPAGES, FPAGES
FROM SYSIBM.SYSTABLES
where TBSPACE = 'Имя табличного пространства'
Табличные пространства в
ненормальном состоянии
SELECT * FROM SYSIBMADM.SNAPTBSP_PART where TBSP_STATE<>'NORMAL'
Состояние табличного
пространства отображается в виде hex
кода (в команде list),
чтобы узнать что имела в виду db2
под этим кодом можно использовать
команду db2tbst
Пример.
$ db2tbst 0x02001100
State = Restore Pending + Storage Must be Defined + Storage May
be Defined
В данном случае у нас не были
определены контейнеры для этого
табличного пространства, и при
восстановлении БД оно перешло в состояние
отложенного восстановления.
Чтобы пофиксить подобные ошибки создаем
контейнер (директорию), даем на нее права, выполняем
запрос
db2 "backup db [имя бд] on
dbpartitionnums(0,1,2,3,4,5,6) tablespace (USERSPACE1) online to
/db2inst/db without prompting"
dbpartitionnums берем из
SYSIBMADM.SNAPTBSP_PART
Или dropаем бд, создаем
директории, даем права, восстанавливаем
повторно.
Список системных таблиц
в которых есть информация о буферных
пулах
SYSCAT.TABLESPACES - табличные
пространства
SYSIBM.SYSBUFFERPOOLS — буферные пулы
SYSIBMADM.SNAPTBSP_PART — состояние tbs
Еще почитать
-
-