Применение теории к реальной жизни

Оценить
(0 голоса)

Как было показано ранее, считывать I Мбайт данных с восьми дисков одновременно намного быстрее, чем с единственного диска. Однако теория часто бывает более прямолинейна, чем реальная жизнь, и этот простой пример быстро становится сложным в реальной жизни. Редко бывает так, что на сервере выполняется только одни прикладной процесс. А что произойдет, если восемь процессов прикладных программ будут считывать I Мбайт данных в одно и то же время? Какой вариант лучше: когда каждое приложение выполняет чтение с отдельного диска без взаимного влияния или когда каждое приложение для того, чтобы завершить операцию чтения, конкурирует за доступ ко всем восьми дискам одновременно? И что делать, если иногда параллельно выполняются восемь, иногда только пять, а иногда даже двадцать приложений, причем, некоторые из них выполняют операции доступа к дискам размером в 2 Кбайт, а другие - размером в I Мбайт?

Установление двух фундаментальных принципов расслоения данных

Чтобы внести порядок в этот хаос, установим некоторые руководящие принципы:

1.            Большие операции ввода/вывода должны быть распределены между несколькими дисками.

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

Однако предположим, что несколько операций чтения в 1 Мбайт выполняются одновременно. Не было бы более эффективно в данном случае воспользоваться слоями данных размером 1 Мбайт, вместо того чтобы выполнять расслоение данных между восемью дисками и таким образом гарантировать, что каждая операция чтения обслуживается с единственного диска? Если каждая операция чтения использует различные диски, то ответ на этот вопрос будет положительным. Однако, к сожалению, очень трудно гарантировать, что операции ввода/вывода распределены равномерно. Если две операции чтения размером 1 Мбайт обращаются к одному и тому же диску, то вторая операция должна будет ожидать минимум 33 миллисекунды (предполагается, что данный диск поставляет данные со скоростью 30 Мбайт в секунду) плюс время позиционирования головок прежде, чем она сможет начаться. Если в дисковой очереди уже стоят две операции чтения, то третья операция потребует более одной секунды для того, чтобы завершиться. Если другие диски заняты не в одинаковой степени, то организация очереди является неэффективной.

Учитывая, что основная цель размещения данных состоит в том, чтобы избежать превращения дисковой подсистемы в "узкое место" посредством равномерного распределения дискового ввода/вывода между всеми доступными дисками, то лучше всего расщепить большие операции чтения на несколько дисков.

2.            Небольшие операции ввода/вывода не должны расщепляться по нескольким дискам.

Приложения OLTP (Online Transaction Processing - оперативной обработки транзакций) обычно в процессе отдельной операции доступа к диску извлекают небольшие порции данных (как правило, 2, 4 или 8 Кбайт за один раз). Операции ввода/вывода размером менее 128 Кбайт могут рассматриваться как небольшие. Чтобы сбалансировать операции доступа к диску между всеми доступными дисками и при этом гарантировать, что отдельно взятая дисковая операция выполняется на отдельном диске, следует воспользоваться расслоением данных с размером слоя, равным 64 или 128 Кбайт.

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

Можно порекомендовать для приложений OLTP значение 32 Кбайт в качестве нижнего предела размера слоя данных. Опыт показывает, что использование слоев размером 32, 64 и 128 Кбайт с разнообразными базами данных не приводит к существенным различиям в уровне производительности. Для приложений DSS (Decision Support System - системы поддержки принятия решений) отправной точкой является как минимум 128 Кбайт.

Decision Support System
Примите решение, насколько широким должен быть один слой данных
Расслоение данных с помощью LUNs
Размещение данных и индексов
Размещение данных на единственном диске

Добавить комментарий


Защитный код
Обновить