Базы данных Oracle - статьи

         

Легкое достижение высокой производительности сервера базы данных (низко висящие яблоки)


Я начну с рассмотрения типичного создания базы данных. Люди часто начинают с задаваемой по умолчанию базы данных, созданной при помощи Oracle Installer, или с базы данных, которая была создана Database Configuration Assistant. Как бы то ни было, параметры по умолчанию, вообще говоря, довольно не оптимальны. Но АБД-новичок или консультант, выдающий себя за АБД, может выбрать такие значения, которые сделают ситуацию еще хуже. Дело в том, что базы данных, созданные с плохими параметрами инициализации и использующие табличные пространства для словаря данных подобно тому, как это показано в Таблице 1, встречаются не так уж редко.

Таблица 1: Типичные начальные параметры настройки базы данных



Размер блока базы данных 2 КБ
Буферный кэш SGA 64 МБ
Разделяемый пул SGA 64 МБ
Журнальный буфер в SGA 4 МБ
Файл журнала регистации событий 4 МБ

Табличные пространства

Управление по словарю

Результаты TPC-C (первичные значения)

Время загрузки (сек) 49,41
Транзакций/сек 8,152

Очевидно, что самым первым должно стать увеличение размера SGA. Поэтому я увеличиваю буферный кэш и разделяемый пул, как показано в Таблице 2.

Таблица 2: Увеличение размера буферного кэша и разделяемого пула

Размер блока базы данных 2 КБ
Буферный кэш SGA 128 МБ
Разделяемый пул SGA 128 МБ
Журнальный буфер в SGA 4 МБ
Файл журнала регистации событий 4 МБ
Табличные пространства Управление по словарю

Результаты TPC-C

Время загрузки (сек) 48,57
Транзакций/сек 9,15

Это не совсем то, на что я не надеялся, так как улучшение времени загрузки произошло всего лишь на 1,73 процента, а увеличение скорости транзакций (transactions per seconds – TPS) на 10,88 процента. Возможно, я должен был увеличить и журнальный буфер в SGA, но я не хочу, чтобы журнал регистации событий был меньше, чем память, распределенная под SGA, так что я должен увеличить размер файла журнала регистации, как показано в Таблице 3.

Таблица 3: Увеличение размера журнального кэша SGA и файла журнала регистации

Размер блока базы данных 2 КБ
Буферный кэш SGA 128 МБ
Разделяемый пул SGA 128 МБ
Журнальный буфер в SGA 16 МБ
Файл журнала регистации событий 16 МБ
Табличные пространства Управление по словарю
<
Результаты TPC-C

Время загрузки (сек) 41,39
Транзакций/сек 10,09
Похоже, что теперь я что- то нащупал. Обратите внимание, время загрузки улучшилось на 17,35 процента. А скорость транзакций улучшилась примерно на такую же величину, как и прежде – на 9,33 процента. В этом есть смысл, так как для загрузки и одновременных вставок, обновления и удаления нужно намного больше памяти, чем 8 МБ. Похоже, что увеличение выделения памяти приводят к очень малым усовершенствованиям. Кажется, проблема возникает из-за ввода/вывода, так что несмотря на то, что я работаю с системой OLTP, я буду пробовать увеличить размер блока, как показано в Таблице 4.

Таблица 4: Увеличение размера блока до 4 КБ
Размер блока базы данных 4 КБ
Буферный кэш SGA 128 МБ
Разделяемый пул SGA 128 МБ
Журнальный буфер в SGA 16 МБ
Файл журнала регистации событий 16 МБ
Табличные пространства Управление по словарю
Результаты TPC-C

Время загрузки (сек) 17,35
Транзакций/сек 10,18
Вот теперь у меня все кипит! Даже на PC с его ограниченными возможностями шины и ввода/вывода, можно пожинать огромные выгоды от большего размера блока. Время загрузки улучшилось больше чем на 138 процентов без вреда для TPS. Предположим, мне не хочется снова увеличить размер блока. Тогда следующая простая идея, которая приходит на ум, это переключиться с табличных пространств, управляемых по словарю, на локально управляемые табличные пространства, потому что Oracle довольно интенсивно рекламировал их. Я заканчиваю с результатом, показанным в Таблице 5.

Таблица 5: Использование локальных табличных пространств
Размер блока базы данных 4 КБ
Буферный кэш SGA 128 МБ
Разделяемый пул SGA 128 МБ
Журнальный буфер в SGA 16 МБ
Файл журнала регистации событий 16 МБ
Табличные пространства Локальное управляение
Результаты TPC-C

Время загрузки (сек) 15,07
Транзакций/сек 10,43
Итак, Oracle прав – локально управляемые табличные пространства – это, определенно, правильное направление. Я получил более чем 15-процентное улучшение времени загрузки, и приблизительно на 2 процента выросла TPS. Но в действительности я хотел бы получить результаты, которые больше похожи на результаты для размера блока 4 КБ. Я попробую 8 КБ, как в Таблице 6.

Таблица 6: Увеличение размера блока до 8 КБ
Размер блока базы данных 8 КБ
Буферный кэш SGA 128 МБ
Разделяемый пул SGA 128 МБ
Журнальный буфер в SGA 16 МБ
Файл журнала регистации событий 16 МБ
Табличные пространства Локальное управляение
<


Результаты TPC-C

Время загрузки (сек) 11,42
Транзакций/сек 10,68
Не так уж плохо. Как и прежде, больший размер блока привел к улучшению времени загрузки (почти на 32 процента) без вреда для TPS. На самом деле TPS улучшилась больше, чем на 2 процента. Но заметьте, что я достиг критического положения дел с увеличением размера блока. Улучшение времени загрузки значительно уменьшилось (от 138 до 32 процентов), а увеличение TPS было почти в три раза больше, чем для размера блока 4 КБ. Дальнейшие увеличения размера блока вряд ли будут хорошим источником очевидных (настолько очевидных, что мне не нужно было использовать другие средства измерения производительности) достижений.

Так что у меня быстро подходят к концу низко висящие яблоки базы данных. Единственная другая мысль, которая приходит на ум: у меня ведь имеется несколько центральных процессоров, так, может быть, я могу создать подчиненные процессы ввода/вывода, чтобы использовать их, как в Таблице 7.

Таблица 7: Использование подчиненных процессов ввода/вывода
Размер блока базы данных 8 КБ
Буферный кэш SGA 128 МБ
Разделяемый пул SGA 128 МБ
Журнальный буфер в SGA 16 МБ
Файл журнала регистации событий 16 МБ
Табличные пространства Локальное управляение
dbwr_io_slaves 4
Lgwr_io_slaves (вторичных) 4
Результаты TPC-C
Время загрузки (сек) Улуч-шение Транзак-ций/сек Улуч-шение
Результаты теста 1 49,41 N/A 8,15 N/A
Результаты теста 2 48,57 1,73 9,15 10,88
Результаты теста 3 41,39 17,35 10,09 9,33
Результаты теста 4 17,35 138,56 10,18 0,89
Результаты теста 5 15,07 15,13 10,43 2,36
Результаты теста 6 11,42 31,96 10,68 2,42
Результаты теста 7 10,48 8,97 10,72 0,32
Общий результат 19,48 371,47 10,72 23,93

Содержание раздела