Параметры конфигурации ядра системы.
Теперь обратимся к параметрам конфигурации ядра СУБД, определяющим работу системы – расположение системных файлов БД, размер допустимой памяти для системы, параметры, позволяющие запускать несколько ядер на одной машине.
СУБД ЛИНТЕР отличается относительно малым количеством настраиваемых параметров. Собственно, практически все они были перечислены выше. Все эти величины берутся или из параметров командной строки или из переменных среды окружения процесса.
Первый параметр – путь к системным файлам базы данных. Этот параметр представляет собой значение переменной среды окружения SY00. Это абсолютный или относительный путь. Если путь относительный, то он задается относительно текущего каталога. Данный параметр может быть задан в shell-файле на запуск ядра СУБД. Например, для bash (и далее в тексте, если не указано обратное, используется именно этот shell-интерпретатор) –
export SY00=/ usr /linter/db linter
В приведенном примере одновременно переменная устанавливается и становится доступной всем запускаемым процессам. При запуске ядра СУБД, оно будет искать базу данных в каталоге /usr/linter/db. По умолчанию (если не задана переменная среды SY00) системные файлы ищутся в текущем каталоге.
Кроме передачи пути к системным файлам через переменную среды, допускается задавать это значение через параметр /base ядра.
Размер выделяемой системе оперативной памяти контролируется двумя параметрами запуска ядра СУБД.
СУБД ЛИНТЕР спроектирована так, что при работе не требует память, дополнительно к использованной в момент загрузки. Если ядру потребуется дополнительное пространство для хранения промежуточных результатов, то оно автоматически организует свою собственную "виртуальную" память, проецируемую на один из системных файлов базы данных. Подобный механизм работы с памятью обеспечивает прикладной системе гарантию отказоустойчивости ядра СУБД из-за нехватки оперативной памяти.
При запуске ядро выделяет себе часть памяти под внутренние структуры, а часть под высокоэффективный пул страниц базы данных, работающий в режиме write-back.
Размер этого пула задается параметром запуска ядра /pool.
linter /pool=1000
Память выделяется страницами по 4096 байт. В приведенном примере выделено 4 мегабайта памяти под пул страниц базы данных. Если этот параметр при запуске не указывается, то пул по умолчанию считается равным 200 страницам.
Еще одним важным параметром, влияющим на объем используемой ядром памяти является пул сортировки. В случае появления запроса на сортировку данных, СУБД сортирует данные не все сразу, а по частям, сообразуясь именно с этим параметром.
linter /spool=500
В этом примере каждый процесс сортировки будет использовать максимум 500*4096 байт памяти. Если этот параметр опускается, то по умолчанию пул сортировки считается равным половине пула страниц базы данных.
Из приведенного описания можно сделать вывод, что чем больше выделено памяти этими параметрами, тем быстрее будет работать система. На самом деле это не совсем так. Дело в том, что с ростом выделенного ядру объема памяти, уменьшается память, доступная для других приложений. Кроме того, растут накладные расходы на обслуживание "виртуальной" памяти большего объема. В любом случае, следует немного поэкспериментировать и найти оптимальный размер памяти необходимый для конкретной задачи.
Ниже приводится пример автоматического определения размера выделяемой памяти в зависимости от количества доступной
# calculate pool size freemem=`vmstat | awk '{ if(NR == 3) print $5 }'` # give 1/3 of free memory to linter poolsize=`exp $freemem / 3 / 4096` [ $poolsize -lt 2000 ] && poolsize=2000
Последним из описываемых параметров является параметр, позволяющий запустить несколько копий ядра СУБД на одной машине. Ядро СУБД общается с клиентскими задачами при помощи различных средств межзадачного обмена: IPC или Unix Domain Sockets или Posix механизмы обмена. Если Вы не планируете запускать на одной машине одновременно несколько различных баз данных, то можете пропустить дальнейшие рекомендации, касающиеся работы нескольких копий ядра СУБД на одной машине.