Опубликован: 11.12.2006 | Доступ: свободный | Студентов: 5819 / 381 | Оценка: 4.42 / 3.86 | Длительность: 57:15:00

Лекция 36: Разрешение наиболее распространенных проблем производительности

Память

Количество памяти, доступной SQL Server, является одним из наиболее критичных факторов для производительности SQL Server. Важным фактором является также соотношение между памятью и мощностью подсистемы ввода-вывода. Например, в системах с большой интенсивностью операций ввода-вывода больший объем памяти, который может использовать SQL Server для кэша данных, позволяет выполнять меньшее количество физических операций ввода-вывода. Это происходит потому, что данные считываются не с диска, а из кэша данных. SQL Server использует сложную кэш-систему для повышения производительности всей системы; максимально увеличивается доступ к данным в памяти и сводится к минимуму доступ к данным на дисках. Чем больше данных, считываемых из памяти, тем выше производительность вашей системы. Доступ к памяти осуществляется намного быстрее, чем доступ к диску.

В некоторых случаях недостаточное количество памяти может приводить к узкому месту за счет диска из-за увеличения количества дисковых физических операций ввода-вывода, связанного с тем, что система не может эффективно использовать кэш. Чтобы увидеть, сколько системной памяти использует SQL Server, запустите System Monitor, чтобы проверить счетчик общей памяти сервера Total Server Memory (KB) для объекта SQL Server: Memory Manager. Если SQL Server не использует ожидаемого количества памяти, то вам, возможно, требуется изменить параметры конфигурирования памяти, описанные в разделе "Параметры конфигурирования SQL Server" ниже в этой лекции.

Чтобы определить, хватает ли кэш-памяти для SQL Server, используйте System Monitor, чтобы проверить счетчик Buffer Cache Hit Ratio объекта SQL Server: Buffer Manager. Общее правило состоит в том, что счетчик Cache hit ratio должен давать значения не меньше 90%. Увеличьте размер памяти для кэша, если этот показатель меньше 90%. Отметим, что в некоторых системах счетчик Cache hit ratio никогда не достигает 90% из-за особенностей используемого приложения. Это может быть в случаях, когда повторное использование страниц данных происходит редко и система часто очищает страницы данных в кэше для размещения новых страниц.

Примечание. Microsoft SQL Server 2000 динамически выделяет память для буферного кэша, исходя из размера доступной памяти системы и установки параметров памяти. Некоторые внешние процессы, такие как процесс печати и другие приложения, могут вынуждать SQL Server, чтобы он освобождал значительную часть своей памяти для их использования. Внимательно следите за памятью системы и изолируйте, если это возможно, SQL Server на его собственной системе. (Об использовании параметров памяти см. "Администрирование Microsoft SQL Server" и раздел "Параметры конфигурирования SQL Server" далее в этой лекции.)
Подсистема ввода-вывода

Узкие места, возникающие в подсистеме ввода-вывода, – это наиболее распространенные проблемы оборудования для систем баз данных. Плохо сконфигурированные подсистемы ввода-вывода уступают по своему влиянию на производительность только неэффективным операторам SQL. К счастью, проблемы подсистемы ввода-вывода относятся к тем проблемам производительности, которые наиболее легко поддаются разрешению. Во многих случаях добавление дисков полностью устраняет эти проблемы.

Проблема подсистем ввода-вывода возникает вследствие ограниченности количества операций, которые можно выполнять на диске; например, определенный дисковод может выполнять не более 85 операций ввода-вывода с произвольным доступом в секунду. При слишком большой нагрузке на диски операции ввода-вывода на этих дисках поступают в очередь, что приводит к большим задержкам ввода-вывода для SQL Server. Эти большие задержки могут приводить к более длительному удерживанию блокировок или к простаиванию потоков, ожидающих освобождения какого-либо ресурса. В конечном итоге снижается производительность системы в целом, что, в свою очередь, раздражает пользователей, которые жалуются, что их транзакции выполняются слишком долго.

В большинстве случаев проблемы производительности подсистем ввода-вывода возникают потому, что был неправильно спланирован состав соответствующей подсистемы ввода-вывода. О планировании состава системы см. "Конфигурирование и планирование подсистемы ввода-вывода" и "Планирование мощности системы" , но мы все же дадим здесь краткий обзор этой темы.

Планирование состава (sizing) подсистемы ввода-вывода необходимо, как уже говорилось, из-за ограниченности количества операций ввода-вывода в секунду, которые могут выполняться одним дисководом. Если на диске выполняются преимущественно последовательные операции ввода-вывода, как это происходит с журналом транзакций, то он может осуществлять, например, более 150 операций в секунду без какой-либо перегрузки. (Как уже говорилось, перегрузки приводят к длительным задержкам.) С другой стороны, если на диске выполняются операции ввода-вывода с произвольным доступом, что характерно для файлов данных, то его производительность может составлять только 85 операций в секунду. При высоких требованиях к вводу-выводу все более возрастает время задержек.

Чтобы определить, не перегружены ли ваши диски, выполняйте мониторинг счетчиков объектов PhysicalDisk и LogicalDisk в System Monitor. Эти счетчики (некоторые из них описаны более подробно ниже в этом разделе) выполняют сбор данных об интенсивности физических и логических операций ввода-вывода на диске, таких как число операций чтения и записи в секунду. Эти счетчики активизируются во время инсталляции операционной системы, но вам следует знать, как их активизировать и отключать. Они используют системные ресурсы, такие как время ЦП, когда они собирают статистику, поэтому вам следует активизировать их, только если вам нужен мониторинг ввода-вывода в системе. Чтобы активизировать или отключить эти счетчики, вам нужно активизировать или отключить оператор Windows NT/2000 DISKPERF.

Чтобы определить, активизирован ли оператор DISKPERF, запустите следующий оператор в командной строке:

diskperf

Если DISKPERF активизирован, то появится следующее сообщение: "Physical Disk Performance counters on this system are currently set to start at boot" (Счетчики производительности физических дисков в этой системе в настоящее время установлены для запуска при загрузке системы). Если DISKPERF отключен, то появится следующее сообщение: "Both Logical and Physical Disk Performance counters on this system are now set to never start" (Оба счетчика производительности [для логического и физического диска] не будут запускаться).

Чтобы активизировать оператор DISKPERF, если он отключен, введите следующий оператор в командной строке:

diskperf -Y

Чтобы отключить DISKPERF, запустите следующий оператор:

diskperf -N

Чтобы начали действовать изменения, внесенные DISKPERF, вы должны перезагрузить компьютер. Чтобы увидеть другие параметры для DISKPERF, введите следующий оператор:

diskperf ?

Особенно важны счетчики Disk Writes/Sec (Число операций записи/сек), Disk Reads/Sec (Число операций чтения/сек), Avg. Disk Queue Length (Средняя длина очереди на диск), Avg. Disk Sec/Write (Среднее время одной операции записи) и Avg. Disk Sec/Read. (Среднее время одной операции чтения). Эти счетчики помогают вам определить, не перегружена ли ваша дисковая подсистема. Эти счетчики включены в оба объекта – PhysicalDisk и LogicalDisk. Чтобы получить подробное описание информации, которую предоставляют эти счетчики, щелкните на кнопке Explain (Объяснить) в диалоговом окне Add Counters, когда вы добавляете соответствующий счетчик в System Monitor.

Рассмотрим пример использования этих счетчиков. Предположим, вы считаете, что у вас имеется проблема узкого места подсистемы ввода-вывода. Вам следует проверить счетчики Avg. Disk Sec/Transfer (Средняя длительность одной передачи на диске), Avg. Disk Sec/Read и Avg. Disk Sec/Write объекта PhysicalDisk, поскольку они отражают задержку (ожидание) на диске (время, которое требуется диску для выполнения операции чтения или записи), а повышение длительности задержки является признаком того, что у вас перегружены дисководы или дисковая матрица. Общее правило состоит в том, что нормальные показания этих счетчиков должны составлять от 1 до 15 миллисекунд (от 0,001 до 0,015 секунды), но вам не следует беспокоиться, если в периоды пиковой нагрузки задержка составит 20 миллисекунд (0,020 секунды). Но если значения более 20 миллисекунд, то в вашей системе явно имеется проблема производительности, связанная с подсистемой ввода-вывода.

Вы должны также проверять счетчики Disk Writes/Sec и Disk Reads/Sec. Предположим, эти счетчики показывают, что на диске выполняется 20 операций записи и 20 операций чтения в секунду, то есть всего 40 операций ввода-вывода в секунду, а мощность диска составляет 85 операций ввода-вывода в секунду. И если в то же самое время диск дает большие задержки, то, возможно, это говорит о неисправности данного диска. А теперь предположим, что на этом диске выполняется 100 операций в секунду и длительность задержек составляет 20 миллисекунд или больше. В этом случае вам требуется увеличить количество дисков, чтобы повысить производительность.

Чтобы определить, сколько операций ввода-вывода выполняет ваша система, когда вы используете RAID-матрицу, разделите количество операций ввода-вывода в секунду, которое вы видите в System Monitor, на количество дисков этой матрицы, и умножьте на дополнительный коэффициент для матрицы RAID. В табл. 36.1 приводится количество физических операций, генерируемых для чтения и записи при использовании технологии RAID.

Таблица 36.1. Количество физических операций, выполняемых при чтении и записи для соответствующих уровней RAID
Уровень RAID Чтение Запись
0 1 1
1 или 10 1 2
5 1 4

Обычно наилучшим способом устранения узкого места подсистемы ввода-вывода является просто добавление дисков. Но не забудьте проверить другие возможные причины узкого места в подсистеме ввода-вывода, такие как низкое значение коэффициента попадания в кэш и транзакции, в которых выполняется больше операций ввода-вывода, чем это необходимо. (Как уже говорилось, в большинстве случаев коэффициент попадания в кэш меньше 90% считается слишком низким.) Если вы нашли узкое место подсистемы ввода-вывода, посмотрите указания в "Планирование мощности системы" , чтобы определить количество дисков, необходимое вашей системе.