суббота, 14 июня 2008 г.

Принципы настройки производительности

Читая книгу "Настройка производительности UNIX-систем" Мусумеси Д.П., Лукидес М., ISBN 5-93286-034-0 делал пометки на особо понравившиеся мне моменты. Начну, пожалуй, с этих:

основы настройки производительности системы можно свести к пяти принципам.

1) хорошо понимайте свою операционную среду,

2) нет ничего по-настоящему бесплатного,

3) пропускную способность и время ожидания не меряют одной меркой (т. к. по сути это разные вещи),

4) ресурсы не должны быть перегружены,

5) эксперименты следует проводить внимательно.

Принцип 0: следует хорошо понимать свою операционную среду

При недостаточно хорошем понимании своей операционной среды возникающие задачи, скорее всего, не решить. Вот почему концептуальному материалу в этом руководстве придается большое значение. Даже если изменятся отдельные детали реализации алгоритма или же сменится сам алгоритм, теоретические знания о том, что представляет собой задача и как подходить к ее решению, останутся действенными. Понимать задачу - значит обладать гораздо большим потенциалом по сравнению с ситуацией, когда известно решение, но нет понимания того, откуда возникла проблема. Конечно, в какой-то мере сложные случаи лежат вне компетенции среднего системного администратора: настройка производительности сети на обсуждаемом здесь уровне не требует углубленных знаний того, как реализован стек TCP/IP на уровне модулей и вызовов функций.

Принцип 1: БСНБ!

БСНБ означает, что Бесплатного Сыра Не Бывает. По существу, настройка производительности представляет собой нахождение компромисса между различными характеристиками. Обычно это список из трех желательных свойств, из которых можно выбрать только два.
Один пример приходит из настройки сетевого уровня TCP, где алгоритм Нагла (Nagle) приносит в жертву время ожидания или время, требуемое для доставки одиночного пакета, в обмен на повышение пропускной способности, или объем данных, которые можно фактически протолкнуть по проводам. Этот принцип часто обязывает делать реальный, значимый и трудный выбор.

Принцип 2: пропускная способность против времени ожидания

Во многих отношениях системные администраторы, оценивающие компьютерные системы, зачастую подобны юнцам, оценивающим автомобили. К сожалению, в обоих случаях существует определенный набор показателей и стремление найти наивысшее значение для наиболее «важного» показателя. Обычно это «величина пропускной способности» для компьютеров и «лошадиная сила» для автомобилей. Шаги, которые готовы делать люди, чтобы выжать максимум лошадиных сил из своих четырехколесных транспортных средств, нередко отчасти смехотворны. Незначительное изменение ракурса обнаруживает, что в жемчужине производительности существуют и другие грани. Много усилий тратится на оптимизацию отдельных параметров, что, вполне вероятно, не является настоящим подспорьем.

Принцип 3: не перегружайте ресурсы

Каждому, кто управлял автомобилем на запруженной магистрали, знакома ситуация с ориентированием в незнакомой местности: знак «нижний предел скорости» выглядит злой шуткой! Очевидно, существует много факторов, относящихся к развитию сообщения между штатами, особенно один, тяжело воспринимаемый пригородными участниками движения: пиковая нагрузка существенно отличается от средней, с финансированием дорог всегда проблема и т. д. Более того, добавление еще одной полосы к магистрали (предположим, что место и финансирование это позволяют) обычно приводит к временному закрытию по крайней мере одной активной полосы шоссе. Это неизменно расстраивает «пригородных» еще больше. Стремление достичь достаточной пропускной способности всегда присутствует, но из-за препятствий с его реализацией цель достигается не сразу. Теоретически подход расти «вширь» предпочтителен, когда обвал случился или неотвратим. Обычно это разумный вариант: зачем заботиться о дополнительной пропускной способности, если существующая используется не в полной мере? К сожалению, бывают случаи, когда полная загрузка не оптимальна. Это справедливо для компьютеров, и все же люди часто нагружают свои системы на 100% еще до размышлений о модернизации. Перегрузка - опасное дело. Общее полезное правило гласит: нагрузка не должна превышать 70% от максимальной в любой момент времени. Это дает запас прочности перед снижением производительности.

Принцип 4: при проведении экспериментов необходима внимательность

Существует масса слухов, касающихся анализа производительности. Единственная возможность быть объективным - это понимать суть дела, проводить тесты и накапливать данные. Вывод из этого таков: думать, думать и думать при экспериментах по оценке производительности. При измерениях много чего значимого не лежит на поверхности. А потому следует измерять все, имеющее малейшее отношение к тому, что на самом деле необходимо измерить. Если необходимо протестировать что-либо, важно подобрать соответствующие инструменты, специально предназначенные для диагностики этого компонента. И даже в этом случае нужно быть внимательным: очень легко обжечься.

Описание значений файла параметров инициализации (Oracle 10g)

Опишу значения параметров файла инициализации для отдельного взятого файла. Данные значения и их описание было взяты из справочника Oracle (ISBN 5 -93286-064-2) и с сайта metalink.oracle.com
Одни параметры используются и в 9i и в 10g, другие специфичны для 10g/11g. Будьте внимательны.

test.__db_cache_size=360710144

Допустимые значения: целое [Кбайт | Мбайт | Гбайт] (для Oracle 9i)
Значение по умолчанию: 48 Мбайт (для Oracle 9i)
Динамическое изменение: ALTER SYSTEM (для Oracle 9i/10g)
DB_CACHE_SIZE - указывает размер буферного пула DEFAULT в буферах SGA с блоками исходного размера (заданного в DB_BLOCK_SIZE). Появился в Oracle 9i.

test.__java_pool_size=37748736
Допустимые значения: 1 000 000 - 1 000 000 000 (для Oracle 9i)
Значение по умолчанию: 20 000 (для Oracle 9i)
JAVA_POOL_SIZE - указывает размер пула JAVA (в байтах) в SGA. Появился в Oracle 8.

test.__large_pool_size=4194304
Допустимые значения: 300 Кбайт - 2 Гбайт или больше (максимум зависит от операционной системы).
Значение по умолчанию: в Oracle 9i = 0

test.__shared_pool_size=184549376
Допустимые значения: от 300 K до определяемого в зависимости от операционной системой (для Oracle 9i)
Значение по умолчанию: 64 M для 64-х разрядной системы, иначе 8 M (для Oracle 9i)
Динамическое изменение: ALTER SYSTEM (для Oracle 9i/10g)

test.__streams_pool_size=0
Допустимые значения: целое [Кбайт | Мбайт | Гбайт] (для Oracle 10g)
Значение по умолчанию: 0
Динамическое изменение: ALTER SYSTEM

*.audit_file_dest='/oracle/oracle_10g/oracle/product/10.2.0/db_1/admin/test/adump'
Определяет каталог для хранения файлов аудита, в случае, если параметр инициализации AUDIT_TRAIL установлен равным os, xml, или xml,extended.

*.background_dump_dest='/oracle/oracle_10g/oracle/product/10.2.0/db_1/admin/test/bdump'
Допустимые значения: строка, содержащая действительное имя каталога
Значение по умолчанию: зависит от операционной системы
Динамическое изменение: ALTER SYSTEM
Указывает путь к каталогу, в который записываются отладочные файлы трассировки для фоновых процессов (LGWR, DBWn, и другие) во время работы экземпляра Oracle.

*.core_dump_dest='/oracle/oracle_10g/oracle/product/10.2.0/db_1/admin/test/cdump'
Допустимые значения: действительный путь к каталогу
Значение по умолчанию: $ORACLE_HOME/dbs/
Динамическое изменение: ALTER SYSTEM
Определяет каталог, в который записываются файлы дампа ядра.

*.user_dump_dest='/oracle/oracle_10g/oracle/product/10.2.0/db_1/admin/test/udump'
Допустимые значения: действительный путь к каталогу
Значение по умолчанию: зависит от операционной системы
Динамическое изменение: ALTER SYSTEM
Указывает каталог, в который сервер записывает отладочные файлы трассировки от имени пользовательского процесса.

*.db_recovery_file_dest='/oracle/oracle_10g/oradata/test/flash_recovery_area'
Допустимые значения: действительный путь к каталогу / дисковой группе
Значение по умолчанию: зависит от операционной системы
Динамическое изменение: ALTER SYSTEM ... SID='*'
Определяет каталог для области восстановления. Flash recovery area содержит мультиплексные копии текущих управляющих файлов и online redo логи, так же как archived redo логи, файлы flashback, и резервные копии RMAN.

*.compatible='10.0.0'
Допустимые значения: от 7.3.0 до текущей версии Oracle
Значение по умолчанию: текущая версия Oracle (например 10.0.0)

*.control_files='/oracle/oracle_10g/oradata/test/control01.ctl','/oracle/oracle_10g/oradata/test/control02.ctl','/oracle/oracle_10g/oradata/test/control03.ctl'
Допустимые значения: от 1 до 8 имен файлов
Значение по умолчанию: зависит от операционной системы
Указывает одно или несколько имен управляющих файлов, разделенных запятыми

*.db_block_size=8192
Допустимые значения: 2048-32768 в большинстве случаев, но может быть и меньше в зависимости от операционной системы
Значение по умолчанию: зависит от операционной системы
Указывает размер блоков БД Oracle. Значение DB_BLOCK_SIZE при создании базы данных определяет размер блоков. Это значение может быть установлено только в момент создания базы и не должно меняться в последствии.

*.db_domain=''
Допустимые значения: любая разрешенная строка компонентов имени, разделенных точками, и длиной до 128 символов
Значение по умолчанию: WORLD
Указывает компонент расширения глобального имени базы данных, состоящие из допустимых идентификаторов, разделенных точками. Доменное имя базы данных может включать в себя буквы, цыфры, символ подчеркивания (_) и знак решетки (#)

*.db_file_multiblock_read_count=16
Допустимые значения: от 1 до определяемого в зависимости от операционной системы
Значение по умолчанию: 8
Динамическое изменение: ALTER SYSTEM, ALTER SESSION

*.db_name='test'
Допустимые значения: любое корректное имя базы данных не длиннее восьми символов
Значение по умолчанию: NULL
Параметр можно не определять. Если он задается, то его значение должно совпадать с именем, указанным в команде CREATE DATABASE. Если параметр не задается, имя базы данных должно присутствовать в командной строке STARTUP или ALTER DATABASE MOUNT каждого экземпляра Parallel Server.

*.db_recovery_file_dest_size=2147483648
Допустимые значения: целое [Кбайт | Мбайт | Гбайт] (для Oracle 10g)
Динамическое изменение: ALTER SYSTEM ... SID='*'
Определяет (в байтах) жесткое ограничение в полном пространстве, которое используется целевыми файлами восстановления базы данных, созданными в перепрограммируемой области восстановления.

*.dispatchers='(PROTOCOL=TCP) (SERVICE=testXDB)'
Допустимые значения: см. описание в документации
Значение по умолчанию: нет
Динамическое изменение: ALTER SYSTEM
Конфигурирует диспетчерские процессы в среде Shared Server.

*.job_queue_processes=10
Допустимые значения: 0-1000
Значение по умолчанию: 0
Динамическое изменение: ALTER SYSTEM
Указывает максимальное количество фоновых процессов экземпляра, которые могут создаваться для выполнения заданий.

*.open_cursors=300
Допустимые значения: 1-4294967295
Значение по умолчанию: 50
Определяет максимально допустимое количество одновременно открытых курсоров для сеанса, что предотвращает открытие их чрезмерного количества. Если задать слишком большое значение, дополнительных накладных расходов не возникает. Кроме того, параметр ограничивает размер кеша курсора PL/SQL, используемого во избежание повторного синтаксического анализа команд.

*.pga_aggregate_target=196083712
Допустимые значения: 10 Мбайт - 4096 Гбайт - 1
Значение по умолчанию: 0
Определяет суммарный объем памяти PGA, доступной всем серверным процессам, закрепленным за экземпляром. Должен быть установлен для того, чтобы включить автоматический выбор размера рабочих областей SQL, используемых активно работающими с памятью операторами SQL. Появился в Oracle 9i.

*.processes=150
Допустимые значения: от 6 до определяемого в зависимости от операционной системы
Значение по умолчанию: вычисляется
Определяет максимальное число пользовательских процессов операционной системы, которые могут быть одновременно соединены с сервером Oracle. При вычислении этого значения необходимо учесть все фоновые процессы, включая процессы блокирования, процессы очереди заданий и параллельных запросов. Значение по умолчанию вычисляется на основе PARALLEL_MAX_SERVERS. Данный параметр определяет значение по умолчанию для SESSIONS, так что если вы изменяете значение PROCESSES, то может потребоваться изменить значение SESSIONS.

*.remote_login_passwordfile='EXCLUSIVE'
Допустимые значения: NONE | EXCLUSIVE | SHARED
Значение по умолчанию: NONE
Указывает, проверяет ли сервер Oracle файл паролей и сколько баз данных может использовать один и тот же файл паролей. NONE означает, что Oracle будет игнорировать любые файлы паролей, т.е. привилегированные пользователи должны аутентифицироваться операционной системой. EXCLUSIVE показывает, что файл паролей может использоваться всего одной базой данных и при этом может содержать имена, отличные от SYS и INTERNAL. Если же параметр установлен в SHARED, то использовать файл паролей могут несколько баз данных, но содержаться в нем будут только пользователи SYS и INTERNAL. Значения параметра для экземпляров должны совпадать.

*.sga_target=589299712
Допустимые значения: целое [K | M | G]
Значение по умолчанию: 0 (автоматическая настройка SGA отключена)
SGA_TARGET определяет общий размер всех компонентов SGA. Если значение SGA_TARGET определено, то следующие пулы памяти будут автоматически установлены по размеру:

Кэш буферов (DB_CACHE_SIZE)
Разделяемый пул (SHARED_POOL_SIZE)
Большой пул (LARGE_POOL_SIZE)
Пул Java (JAVA_POOL_SIZE)
Пул потоков (STREAMS_POOL_SIZE)

*.undo_management='AUTO'
Допустимые значения: MANUAL | AUTO
Значение по умолчанию: MANUAL
Указывает действующий режим распределения пространства отката. Значение MANUAL означает, что пространство отката выделяется в виде сегментов отката. Значение AUTO указывает, что применяется автоматическое управление откатом. Появился в Oracle 9i.

*.undo_tablespace='UNDOTBS1'
Допустимые значения: имя существующего табличного пространства отката
Значение по умолчанию: первое доступное табличное пространство отката
Указывает табличное пространство отката, которое будет использовано при запуске экземпляра. Если табличные пространства отката не указаны или не доступны, сервер Oracle использует сегмент отката SYSTEM (такой режим работы не рекомендуется). Если значение параметра указывается для базы данных, работающей в режиме ручного управления, то экземпляр не будет запущен. Появился в Oracle 9i.