Часто задаваемые вопросы по OpenEdge RDBMS
V. Вопросы настройки производительности
38. Чему равно хорошее значение для -spin?
10000 – хорошая точка отсчета для начала. Для версии 10.2 5000 может быть лучше.
Во-первых, плохая новость: оптимальное значение для -spin зависит от числа и скорости процессоров в вашей системе, от числа подключений к базе данных и от степени активности базы данных, генерируемых приложением. Нагрузка обычно значительно меняется с течением времени. Таким образом, невозможно определить оптимальные настройки без экспериментов.
Затем хорошая новость: обычно вы не должны быть так уж точны или затрачивать много усилий на поиск оптимального значения. В большинстве систем разница в производительности между приемлемой настройкой и оптимальной настройкой невелика.
Вы можете экспериментировать с различными настройками -spin без перезапуска базы данных, используя утилиту promon для внесения изменений и наблюдения за эффектом. Небольшие изменения не дают большого эффекта. На больших машинах с большим количеством процессоров и большим числом пользователей, некоторые клиенты находят эффективным значение параметра, достигающее 500000, но это не является распространенным случаем.
Несколько лет ходят слухи, что -spin должен быть равен произведению числа процессоров вашей системы на некоторое фиксированное число. Это неправильно. Не следуйте этой рекомендации.
39. Каково назначение буферных пулов?
Буферные пулы предназначены для уменьшения дискового ввода/вывода за счет сохранения данных в памяти, потому что их не нужно читать с диска, когда они снова понадобятся. Откуда система управления базой данных знает, какие данные понадобятся снова? Она и не знает. Вместо этого она предполагает, что недавно использовавшиеся данные могут потребоваться снова, и что данные, к которым не обращались некоторое время, уже не понадобятся. Это достигается путем хранения буферов данных в виде списка, и каждый раз, когда буфер используется, он перемещается в начало списка. Таким образом, буферы данных, которые не использовались некоторое время, перемещаются к концу списка. Этот метод в большинстве случаев работает достаточно хорошо, но не совершенен.
40. Как указать размер буферных пулов?
Количество буферов в первичном буферном пуле определяется параметром -B. Количество буферов во вторичном буферном пуле определяется параметром -B2.
Размер буферов в обоих буферных пулах такой же, как размер блока данных в базе данных. Для каждого буфера также имеется заголовок буфера, содержащий информацию о том, какие данные находятся в буфере, нужно ли записать буфер на диск, где находится запись журнала транзакций для блока в буфере, и так далее.
41. Каково наилучшее значение параметра -B?
На этот вопрос нет простого ответа – он зависит от слишком многих переменных.
Чем больше буферный пул, тем более вероятно, что нужные вам данные окажутся в памяти, и не потребуется чтение с диска. Вы не должны бояться использовать большие значения количества хранимых в памяти буферов. 100 000 или даже больше может быть разумным. Но вы не можете просто сделать его таким большим, как вы хотите. Смотрите вопросы об ограничениях размера области общей памяти.
Мы можем предложить два сомнительных «правила большого пальца» для выбора начального значения. Для обоих правил предполагается, что база данных значительно больше, чем объем физической памяти на компьютере сервера базы данных, и что значение -B по умолчанию слишком мало.
Правило 1: Начните с размера буферного пула около 10% от размера базы данных. Здесь предполагается, что небольшая часть базы данных используется часто, а остальная – редко или вообще не используется.
Правило 2: Начните с размера буферного пула, составляющего 50-60% от объема физической памяти на машине сервера базы данных. Здесь предполагается, что остальная память требуется для других целей, и что буферный пул должен быть настолько большим, насколько это практически возможно. Но это может оказаться больше, чем вам фактически нужно (или меньше).
Заметим, что оба правила – это лишь первоначальные предположения, т.к. вам нужно выбрать какое-то значение. Из них второе правило, вероятно, лучше, чем первое, и оба – неправильные. Оптимальное значение сильно зависит от приложения, дизайна базы данных, количества данных и индексов и от количества пользователей.
Независимо от того, какое начальное значение вы использовали, вы должны провести некоторые эксперименты. При экспериментировании, делайте относительно большие изменения. Уменьшение или увеличение -B на 10% в общем случае дает небольшой эффект или вообще не дает заметного эффекта. Лучше увеличивать или уменьшать вдвое. По мере того, как вы увеличиваете размер буферного пула, объем дискового ввода/вывода в целом уменьшается, но все меньше и меньше.
Если Вы сделаете буферный пул слишком большим, это приведет к подкачке. Ввод/вывод для подкачки буферов в дополнение к вводу/выводу для базы данных приводит к очень плохой производительности.
42. Как вычисляется «hit ratio» для буферного пула?
«Hit ratio» для буферного пула вычисляется и показывается программой promon как процент блоков базы данных, доступ к которым был обеспечен из буфера в памяти и не требовал чтения с диска.
promon Вычисляет «hit ratio» следующим образом:
( (Total buffer requests – Reads from disk) * 100.0) / Total buffer requests
Где,
Total buffer requests равно (Logical reads + Logical writes),
Logical reads – это число запросов блока данных для получения из него данных, например строки таблицы или записи индекса. Его значение доступно в поле VST _actbuffer._logicrds
Logical writes – это число обращений к блоку данных для изменения его содержимого. Заметим, что для изменения блока, он сначала должен быть прочитан. Таким образом, изменение вызывает как logical read, так и logical write. Его значение доступно в поле VST _actbuffer._logicwrts
Reads from disk – это число блоков данных, прочитанных с диска. Его значение доступно в поле VST _actbuffer._osrds
Logical read – это запрос блока базы данных для извлечения из него данных. Logical write – это запрос блока базы данных для изменения его содержимого. В обоих случаях, если запрашиваемый блок базы данных не находится в памяти, он будет прочитан с диска в доступный буфер. В случае logical write, после того, как содержимое буфера будет изменено, буфер будет записан на диск намного позже. Он может быть изменен несколько раз до записи на диск.
43. Каково оптимальное значение hit ratio для буферного пула?
Оптимальное значение hit ratio для буферного пула равно 100%, что возможно только если вся база данных находится в памяти или если альтернативный буферный пул достаточно велик, чтобы содержать все назначенные для него объекты. В большинстве случаев это недостижимо из-за большого размера базы данных. Вы должны стремиться получить максимально возможное значение hit ratio. Чем больше вы задаете параметр -B, тем выше становится hit ratio, асимптотически приближаясь к некоторому пределу, после которого дальнейшее увеличение -B уже не оказывает эффекта.
Небольшие изменения hit ratio означают большие изменения в интенсивности ввода/вывода. Предположим, hit ratio равно 95%, так что, если вы обращаетесь к 10000 блокам, чтение с диска будет выполняться для 1 блока из 20, или 500 чтений диска. Если hit ratio равно 99%, то чтение с диска выполняется для 1 блока из 100, или, при доступе к 10000 блокам, 100 чтений с диска. То есть здесь увеличение hit ratio на 4% представляет снижение числа операций ввода/вывода на 80%. Увеличение hit ratio с 98% до 99% снижает интенсивность ввода/вывода на 50%.
44. Как определить, сколько буферов используется в альтернативном буферном пуле?
Программа promon показывает вам, сколько чтений диска было выполнено в альтернативный буферный пул. Если это значение меньше или равно числу буферов, то оно также представляет число используемых буферов. Если оно больше числа буферов, то используются все буферы.
45. Сколько APW мне необходимо?
Обычно вам потребуется один. Для больших систем с большим количеством дисков и высокой нагрузкой от изменений, вам могут потребоваться два. Если программа promon показывает более чем однозначные значения в столбце «Flushes» экрана «Checkpoints» и размер кластера журнала Before-Image достаточно велик, так что ваши checkpoint длятся около 2 минут или больше, это признак того, что вам может понадобиться больше APW. Если вы запустили всего один, вы можете запускать дополнительные APW в любой момент и наблюдать за эффектом. Дополнительные APW вреда не приносят, так что, если вы обнаружите, что они не дают никакого эффекта, вы можете оставить их работать до перезапуска базы данных.
В Интернете вы можете найти совет использовать один APW на каждый диск. Это плохой совет, как правило, дополнительные APW никакого вреда не приносят, но они вызывают дополнительные системные расходы, когда они спят и периодически просыпаются, только для того, чтобы обнаружить, что делать нечего.
Если вы думаете, что вам нужно больше, чем один или два APW, обратитесь за профессиональным советом.