Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Вопрос по архитектурной структуре базы...
|
|||
|---|---|---|---|
|
#18+
Добрый день, назрел вопрос: У нас исторически сложилась следующая ситуация - RAID10 на нем несколько логических дисков на которых раскидана база данных, отдельно данные, отдельно индексы и отдельно темпоральные табличные пространства. Хочется понять целесообразность этого раскидывания. Так же некоторые табличные пространства разбиты на несколько контейнеров лежащих в одной папке, имеет ли это смысл? P.S. DB2 Windows Version 9.7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2015, 11:28 |
|
||
|
Вопрос по архитектурной структуре базы...
|
|||
|---|---|---|---|
|
#18+
Меня всегда удивляла популярность подобных схем (отдельно то, отдельно сё). Ведь когда на СУБД идут запросы, а та, в свою очередь, осыпает диски своими запросами на чтение и запись, кажется очевидной простая стратегия, которую Oracle назвали S.A.M.E - stripe and mirroring everithing, то бишь, всё имеющееся в наличии размазать по всем дискам (возможно, за исключением транзакционных логов, которые-таки отдельная статья). Применительно к DB2 мне ещё кажется разумным пользоваться RAID1, а не RAID10. Когда у нас есть N пар дисков, мы можем разместить по контейнеру на каждом зеркале (благо, DB2 автоматически балансирует данные по контейнерам) и задать prefetch size = N * extent size, и было обещано, что эти N кусков будут читаться одновременно. Правда, для RAID10 из тех же N пар рекомендована такая же настройка, но я-таки не понимаю, в чём будет польза в данном случае, как 10-ка справится с одновременным чтением этих кусков (куски, положим, большие, по 1м каждый, и дисков много). Для одностраничного же чтения едва ли будет разница. Но всё это надо проверять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2015, 13:42 |
|
||
|
Вопрос по архитектурной структуре базы...
|
|||
|---|---|---|---|
|
#18+
Victor Metelitsa, Ваши мысли понятны, спасибо. Но все же что касается размещение суммарного контейнера (одного) в папке или же нескольких в той же папке , есть разница? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2015, 17:11 |
|
||
|
Вопрос по архитектурной структуре базы...
|
|||
|---|---|---|---|
|
#18+
Если это контейнеры одного и того же tablespace, то класть их на один диск... неинтересно. Ну, положим, extent size у нас 1м, prefetch size 2м, два контейнера одного табличного пространства, tablescan - и, как обещано, DB2 пытается выполнить два запроса по 1м одновременно. То есть передаст асинхронно операционной системе два запроса на чтение по 1 мегу. Что произойдёт? Ну, наверное, ОС выполнит их последовательно. Точно также, как если бы prefetch size был 1м или контейнер был один. С одностраничными запросами тем более не должно быть заметной разницы (с точки зрения нагрузки на диск) - одновременного чтения нескольких страниц не произойдёт, так и эдак надо подвести головки к участку диска и произвести I/O. Нагрузка на CPU при вычислении номера сектора... разная скорость подводки головок в разных обстоятельствах, разная плотность записи... понятия не имею, как оценивать. И потому смысл разбивать на несколько контейнеров на одном диске непонятен. Это не Oracle, где это вынуждено - либо один большой контейнер, либо много маленьких (максимум по 32 гига при стандартной 8-килобайтовой странице), тут контейнеры довольно большие. Если это контейнеры разных tablespace, то ситуация не должна быть хуже, чем если бы все объекты лежали в одном tablespace, т.е. ничего не портит и ничему не помогает. (Снова чисто теоретические рассуждения на основе чтения документации. Я, кстати, некоторое время назад занялся раскопками HammerDB на предмет адаптации квази-TPC-С и квази-TPC-H, но с моей загруженностью и темпами в этом году это может не произойти). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2015, 18:34 |
|
||
|
Вопрос по архитектурной структуре базы...
|
|||
|---|---|---|---|
|
#18+
Есть ещё пара интересных параметров у tablespace - это INITIALSIZE и INCREASESIZE. Кажется разумным поставить их в размер побольше, чтобы было поменьше фрагментации. Но будет ли толк, зависит от файловой системы. Надо отметить, что Oracle создаёт большие tablespace очень долго (по-видимому, чем-то полностью заполняет файлы), а DB2 очень быстро. Можно ожидать, что это будет не в пользу DB2 (по крайней мере, на тех файловых системах, что поддерживают sparse allocation), но этот вопрос тоже требует дополнительного исследования (чуть ли не с HEX-редактором в руках). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2015, 10:17 |
|
||
|
Вопрос по архитектурной структуре базы...
|
|||
|---|---|---|---|
|
#18+
Victor Metelitsa, Спасибо, Виктор за дельные советы и грамотные мысли - Ваш опыт бесценен! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2015, 11:27 |
|
||
|
Вопрос по архитектурной структуре базы...
|
|||
|---|---|---|---|
|
#18+
Мой опыт говорит, что мысли без экспериментальной проверки мало что стоят. Правда, эксперименты без мысли тоже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2015, 11:35 |
|
||
|
Вопрос по архитектурной структуре базы...
|
|||
|---|---|---|---|
|
#18+
Виктор, табличное пространство и контейнер DB2 создаёт очень быстро потому как внутри никакой разметки не делается и extents выделяются(allocate) по мере необходимости для таблицы, причём в асинхронном режиме, так что какого-то негатива для DB2 здесь будет сложно найти. Минимальный размер контейнера который можно создать это 4 extents 1 extent в табличном пространстве фактически header который содержит описание 2 extent в табличном пространстве это некий список который хранит ссылки на все первые extent таблиц. Такие extents повторяются каждые кажется 32 тыс. extents 3 extent в табличном пространстве это может быть 1 extent таблицы и это некоторый список который указывает какие extents принадлежат данной таблице/индексу. повторные появляются по мере роста страниц. В нашем случае будет только одна ссылка на EXTENT 4 4 это данные в таблице. Деление на куски и хранение отдельно, на мой взгяд имеет смысл только 1) для BLOB 2) хранения страрых данных на более дешевых носителях Все остальное, только в специфических случаях. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2015, 16:03 |
|
||
|
Вопрос по архитектурной структуре базы...
|
|||
|---|---|---|---|
|
#18+
xz321, вопрос в sparse allocation. В каком виде это будет размещено на диске на такой файловой системе. Поэтому мне кажется разумным забить чем-то место сразу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2015, 17:18 |
|
||
|
Вопрос по архитектурной структуре базы...
|
|||
|---|---|---|---|
|
#18+
Хочется, чтобы фрагментации было поменьше. Хотя с большим extent size это даже может быть и неважно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2015, 17:22 |
|
||
|
Вопрос по архитектурной структуре базы...
|
|||
|---|---|---|---|
|
#18+
А, дошло. Если strip size - это размер блока на диске, strip size равен db2-шному extent size, DB2_PARALLEL_IO включён, то prefetch в несколько extent'ов одновременно должен читать разные диски одновременно, что и требуется. Вопрос только, чему равен strip size. Максимум читаемого блока на виндах и, вроде бы, на линухе тоже, 1м, а массив может быть создан с иными параметрами, в этом смысле набор зеркал проще. См. также на тему NUMBLOCKPAGES у BUFFERPOOL, http://www-01.ibm.com/support/knowledgecenter/SSEPGG_10.5.0/com.ibm.db2.luw.sql.ref.doc/doc/r0000912.html?cp=SSEPGG_10.5.0/2-12-7-61&lang=en http://www-01.ibm.com/support/knowledgecenter/SSEPGG_10.5.0/com.ibm.db2.luw.sql.ref.doc/doc/r0000885.html?cp=SSEPGG_10.5.0/2-12-7-8&lang=en http://etutorials.org/cert/dba certification/Chapter 2. Data Manipulation/The Buffer Pools/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2015, 22:00 |
|
||
|
Вопрос по архитектурной структуре базы...
|
|||
|---|---|---|---|
|
#18+
Для raid-а получается вот как: Положим, конкретный контроллер умеет читать со всех дисков одновременно. При этом strip size = E килобайтов, N дисков => stripe size = N*E килобайтов. У нас есть два варианта распараллелить: 1. попытаться прочитать N кусков по E килобайтов одновременно; DB2_PARALLEL_IO включён, extent size = E prefetch size = N*E 2. попытаться прочитать один кусок N*E килобайтов, считая, что операционная система передаст это драйверу контроллера, тот сам порежет запрос на N одновременных по N кусков. DB2_PARALLEL_IO выключён, extent size = N*E prefetch size = N*E Но второй вариант у нас под большим сомнением и ввиду возможностей ОС, и ввиду возможного ограничения, зашитого в DB2. К примеру, у нас E=256K, N = 4, мы ожидаем от DB2 одного 1-мегабайтного запроса к ОС, а она сделает четыре последовательных 256-килобайтных ввиду ограничения. Это совсем не то, что нужно. Где узнать, чем обуславливается ограничение DB2 и какова его величина в тех или иных случаях? Я не нашёл. В качестве рабочей гипотезы принял, что 256К жёстко зашито для всех платформ (ну, то есть "для всех двух"), strip size массива и extent size при использовании массива должны быть строго одинаковыми и по возможности по максимуму (256К). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2015, 09:48 |
|
||
|
Вопрос по архитектурной структуре базы...
|
|||
|---|---|---|---|
|
#18+
К этому надо прибавить какой-то способ, позволяющий обеспечить правильные смещения - чтобы экстент размером E был непрерывен и его отступ от начала диска был кратен E, т.е. чтобы весь диск можно было бы логически представить себе разбитым на экстенты размером E и наши базоданновые экстенты точно легли на них. Я не представляю, как этого добиться на "популярной" файловой системе (NTFS, ext3. ext4), хотя, быть может, я опять что-то не знаю. Такое обеспечивает ораклячий ASM (для "разумных" E), а для DB2, наверное, придётся использовать raw devices. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2015, 21:20 |
|
||
|
|

start [/forum/topic.php?fid=43&tid=1600711]: |
0ms |
get settings: |
12ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
74ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
3ms |
| others: | 283ms |
| total: | 469ms |

| 0 / 0 |
