Анализ дискового ввода/вывода
Анализ дискового ввода/вывода
1 декабря 2000 г.
Distribution of Disk I/O Across Datafiles, by John Beresniewicz, Savant Corporation
Джон Березниевич
(корпорация Savant)
Источник: http://www.revealnet.com/newsletter/Disk_IO_Distribution.doc
(Эта статья основана на материале из справочной системы продукта корпопации Savant (Savant Corporation -http://www.savant.com) Diagnostic Center for Oracle (Диагностический Центр для Oracle)) Из трех основных компонент любой вычислительной машины (процессор, оперативная память и диск) физический диск является самым медленным. По этой причине уменьшение объема дискового ввода-вывода и распределение его между параллельными физическими устройствами являются ключевыми элементами в процессе настройки производительности системы. Продукт фирмы Savant Diagnostic Center for Oracle содержит список операций ввода-вывода файлов данных (Data File I/O List). Этот список можно эффективно использовать для исследования операций ввода-вывода на отдельных файлах данных и табличных пространствах, для определения возможности более равномерного распределения нагрузки на диски.
Исследуя дисковый ввод-вывод, имейте в виду, что сам по себе он не представляет проблемы, и необходим для функционирования БД. Однако избыточный ввод-вывод может быть чрезвычайно расточительным, и если его объем превышает возможности физического диска, это всегда проявляется в снижении производительности.
Список операций ввода-вывода файлов данных
Список операций ввода-вывода файлов данных содержит информацию о физических чтениях и записях в файлы данных. С помощью этого списка можно определить наиболее активные по чтению и записи файлы данных и табличные пространства. Эта информация позволяет выявить несоответствия ввода-вывода между файлами данных, что может негативно сказываться на производительности. Можно выявить файлы данных, в которых размещаютя таблицы, для которых выполняется полное сканирование.
Список операций ввода-вывода файлов данных получен на основе запросов к виртуальным таблицам V$FILESTAT и V$DBFILE. Список имеет следующие столбцы:
File Name |
Имя файла данных |
Tablespace Name |
Имя табличного пространства, которому принадлежит файл данных |
Physical Reads |
Общее число физических чтений из файла с момента старта БД (режим SIGMA) или последнее обновление (режим DELTA) |
Physical Writes |
Общее число записей в файл, выполненных процессом DBWR, с момента старта БД (режим SIGMA) или последней регенерации (refresh) - режим DELTA |
Blks Read |
Общее число физических блоков, считанных из файла, с момента запуска БД (режим SIGMA) последней регенерации (refresh) - режим DELTA. Это значение может быть больше, чем Physical Reads, если Oracle выполняет многоблочные чтения. |
Blks Written |
Общее число физических блоков, записанных в файл данных с момента запуска БД (SIGMA) или последней регенерации (DELTA). Это значение может совпадать с Physical Writes, если Oracle выполняет запись в файл по одному блоку. |
Avg Blks/Read |
Среднее количество прочитанных за одно физическое чтение блоков (Blks Read/Physical Reads) с момента старта БД (SIGMA) или последней регенерации (DELTA). Значения, большие 1, соответствуют многоблочным чтениям из файла, тогда как значение, точно равное 1, показывает, что все чтения из файла – одноблочные. |
Avg Blks/Write |
Среднее количество записанных за одну физическую запись блоков (Blks Read/Physical Writes) с момента старта БД (SIGMA) или последней регенерации (DELTA). Значения, больше 1, соответствуют многоблочным записям в файл данных, тогда как значение, точно равное 1, показывает, что все записи в файл – одноблочные. |
Blks Rd/Min |
Среднее количество прочитанных из файла данных за одну минуту блоков с момента старта БД (SIGMA) или последней регенерации (DELTA) |
Blks Wrt/Min |
Среднее количество записанных в файл данных за одну минуту блоков с момента старта БД (SIGMA) или последней регенерации (DELTA). |
Замечание: режим SIGMA использует статистику, собранную с момента старта экземпляра БД. Режим DELTA - на статистику, основанную на различиях между регенерациями (refresh - обновление), то есть снимками того, что произошло за промежуток времени.
Балансировка дискового ввода-вывода.
Для некоторых файлов данных считается нормальным (и даже желательным), чтобы объем ввода-вывода был небольшим. В частности, после старта БД объем ввода-вывода файлов табличного пространства SYSTEM не должен быть большим. Чрезмерный и продолжительный ввод-вывод для SYSTEM может указывать на малый размер разделяемого пула (shared pool). В результате увеличивается давление на кэш словаря. Также чрезмерный ввод-вывод для SYSTEM может указывать на большое количество рекурсивных SQL-запросов, выполняющих динамическое управление табличным пространством (выделение и освобождение экстентов), или, возможно, на компиляцию больших PL/SQL-объектов. Необходимо надлежащим образом рассматривать эти возможности, чтобы уменьшить объем ввода-вывода к табличному пространству настолько, насколько это возможно.
Отсортировав список операций ввода-вывода файлов данных, либо по столбцу Physical Reads, либо по Physical Writes, можно определить файлы данных с большим объемом ввода-вывода. В режиме SIGMA список отобразит файлы с наибольшей активностью ввода-вывода вообще, тогда как в режиме DELTA он покажет файлы, несущие нагрузку в данный момент. Оба отображения предоставляют полезную и значимую информацию. Отображение в режиме SIGMA характеризует общий профиль ввода-вывода и является хорошей основой для исследования возможностей балансировки нагрузки на диски.
Если небольшое количество файлов несет большой (свыше 80%) объем нагрузки и общий объем (Blks Rd/Min + Blks Wrt/Min) приближается к возможностям физического диска, то в этом случае можно увеличить производительность за счет распределения ввода-вывода между параллельными устройствами. Этого можно добиться, переместив одну или более “горячих” таблиц или индексов из табличного пространства с “горячими” файлами в другое табличное пространство, файлы которого размещены на других дисках.
Некоторые АБД предпочитают создавать базы данных Oracle с большим числом относительно маленьких файлов данных именно для того, чтобы получить значительную гибкость балансировки ввода-вывода. Предположим, что доступны 10 физических дисков и необходимо создать табличное пространство размером 1Гб. Размещение в табличном пространстве 20-ти файлов по 50Мб предоставляет АБД больше возможностей наблюдать за распределением ввода-вывода и размещать файлы по дискам так, чтобы благодаря распределению рабочей нагрузки повышалась производительность по сравнению с вариантом размещения табличного пространства в одном файле размером 1Гб. В случае выделения 1 файла только один диск будет нести всю нагрузку, и, если нагрузка превысит возможности диска, производительность упадет.
Временные табличные пространства
Если файл, принадлежащий временному табличному пространству, показывает чрезвычайно большой объем ввода-вывода, то, возможно, происходит сортировка данных на диске. В этом случае есть несколько способов исправить ситуацию:
Увеличить параметр инициализации SORT_AREA_SIZE, чтобы уменьшить общий объем сортировок на диске.
Создать больше временных табличных пространств с файлами на различных дисках и закрепить за каждым временным табличным пространством подмножество пользователей.
Физически распределить временные табличные пространства между параллельными дисками, создав параллельные файлы данных с размерами, соответствующими размеру экстента табличного пространства (так, чтобы каждый файл содержал ровно один экстент).
Полное сканирование таблиц и многоблочные чтения
Полное сканирование таблиц может быть очень напряженной операцией ввода-вывода, особенно для больших таблиц. Многие приложения, в частности, такие как хранилища данных (Data Warehouse) или системы принятия решений (Decision Support Systems), требуют полного сканирования таблиц. Однако неуместные или неожиданные полные сканирования больших таблиц могут указывать на необходимость создания дополнительных индексов или изменение SQL-предложений, чтобы использовались более эффективные планы доступа. Применения SQL и планов доступа могут быть исследованы с помощью средства Hot SQL, входящего в состав Diagnostic Center.
Список операций ввода-вывода может помочь выявить полные сканирования таблиц, как на уровне файлов, так и на уровне табличных пространств. При полном сканировании таблиц обычно применяется многоблочное чтение из файлов физического диска. Параметр инициализации DB_FILE_MULTIBLOCK_READ_COUNT определяет, какое количество блоков читается за каждый запрос на многоблочное чтение. Поэтому столбец Avg Blks/Read в списке операций ввода-вывода файлов данных дает представление об объеме полного сканирования таблиц в файле данных.
В случае, когда Avg Blks/Read больше 1, должно было произойти некоторое количество многоблочных чтений (полных сканирований). Слежение за этим столбцом в режиме DELTA показывает, где в текущий момент времени имеет место полное сканирование. Сортировка в обратном порядке по столбцу Avg Blks/Read расположит в начале списка файлы данных с наибольшей активностью полного сканирования таблиц. Если же все чтения из файла данных выполнялись во время полного сканирования таблиц, то значение столбца Avg Blks/Read будет близко к DB_FILE_MULTIBLOCK_READ_COUNT. Таким образом, отношение Avg Blks/Read к DB_FILE_MULTIBLOCK_READ_COUNT дает представление об относительном объеме полных сканирований таблиц в файле данных.
Распределение данных по дискам (striping). Менеджеры объема (Volume Managers). Дисковые хозяйства (Disk Farms).
Многие современные базы данных выступают в роли “хозяина” на платформах со сложными подсистемами ввода-вывода, разработанными для распределения физического ввода-вывода на аппаратном уровне, которые прозрачны для приложений, таких как СУБД Oracle. В этом случае список операций ввода-вывода показывает распределение ввода-вывода между логическими файлами данных, которые не обязательно отображаются на различные физические устройства. В этих случаях список операций ввода-вывода не дает информацию о реальном распределении ввода-вывода между устройствами, и эта информация должна быть получена на уровне операционной системы или на аппаратном уровне.
Теоретически такие системы должны автоматически обеспечивать хороший баланс ввода-вывода, и потому легкую настройку со стороны АБД. Однако загвоздка заключается в том, что, когда проблемы производительности проявляются в подсистеме ввода-вывода, их гораздо сложнее диагностировать и исправлять.
Заключение
Балансировка дискового ввода-вывода является важной частью максимизации производительности Oracle. Список операций ввода-вывода файлов данных программного продукта Diagnostic Center фирмы Savant снабжает АБД гибким и информативным интерфейсом к данным о суммарном распределении ввода-вывода, о текущей активности ввода-вывода и о многоблочном ввода-вывода файлов данных, которые могут помочь оптимизировать распределение файлов данных по дискам.
|