УДК 681.3
РАЗРАБОТКА МЕТОДИКИ ОБРАБОТКИ ЗАПРОСОВ В ДВУХПРОЦЕССОРНОЙ ТЕХНИКЕ
© 2011 г. И.В. Клименко
Ростовский государственный университет Rostov State Transport
путей сообщения University
Разработана методика, позволяющая существенно сократить время обработки запроса в двухпроцессорной (двуядерной) информационной системе по критерию времени. При этом минимизируется время «простоя» процессоров и общее время ответа системы на совокупность запросов. Предложенный метод - новое обобщение алгоритма Джонсона в приложении к информационным системам.
Ключевые слова: алгоритм Джонсона; оптимизация запросов в двухпроцессорной системе; время обработки информационного запроса.
In the given work the technique allowing essential to reduce time of processing of inquiry in dual-processor (two-nuclear) information system by criterion of time Thus is developed time of «idle time» ofprocessors and the general time of the answer of system for set of inquiries is minimised. The offered method - new generalisation of algorithm of Johnson in the appendix to information systems.
Keywords: Johnson's algorithm; optimisation of inquiries in dual-processor system; time of processing of a query.
Эффективность автоматизированной информационной системы на технологии баз данных определяется, в первую очередь, временем выполнения запросов пользователей. При этом запросы формулируются на высокоуровневом специальном языке запросов (например, SQL или QBE), а их обработка производится вычислительным комплексом после соответствующих преобразований.
В случае применения реляционной модели при организации данных запросы на уровне СУБД преобразуются в последовательность операций реляционной алгебры. Установлено, что для сокращения количества шагов выполнения запросов (и, соответственно, времени их выполнения) следует тщательно выбирать стратегию их обработки. В частности, унарные операции реляционной алгебры следует выполнять перед бинарными.
Указанная ситуация может принести определенный выигрыш по времени выполнения информационных запросов пользователей в двухпроцессорных вычислительных комплексах.
Рассмотрим следующую задачу. Пусть n информационных запросов Pi, P2, ..., Pn должны последовательно проходить обработку в микропроцессорах Mi (выполняются унарные операции) и M2 (выполняются бинарные операции), причём микропроцессор в каждый момент времени может обрабатывать один запрос. Продолжительность обработки запроса Pj процессором Mt пусть задаётся матрицей II II, i = i, 2; j = i, 2, n. Требуется минимизировать время, в течение которого процессор остаётся незанятым; задача иногда формулируется как требование минимизировать общее время работы и время простоя процессора M2.
На рис. i схематически показан случай обработки шести запросов двумя процессорами. Время обработки каждого из запросов даётся белым прямоугольником, время простоя - заштрихованными прямоугольниками.
\Рз
Pi Р5
Р2
Рб PA
М1
1 ! 1 1
: . Рз Pi fi
М kwH k\\j -г-
Р2 Рб Ра
Рис. i. Пример распределения запросов между двумя процессорами
Для случая m = 2 целесообразно адаптировать алгоритм Джонсона.
Предпосылки применения алгоритма Джонсона
Когда появились первые приложения, выполненные на базе реляционной модели данных, из всех свойственных им недостатков основным критика признала низкую производительность при обработке запросов. С тех пор было проведено множество исследований, посвященных поиску высокоэффективных алгоритмов обработки запросов. Существует много различных способов выполнения сложных запросов, поэтому одной из важнейших задач теории обработки запросов является определение того, какой из существующих методов является наиболее эффективным.
В первом поколении сетевых и иерархических баз данных низкоуровневый язык обработки запросов обычно встраивался в какой-либо из высокоуровневых языков программирования, например в COBOL. Поэтому ответственность за выбор оптимальной стратегии обработки запросов возлагалась на программиста. В противоположность этому, при использовании декларативных языков, подобных языку SQL, пользователь определяет, какие данные ему нужны, не указывая конкретно, как эти данные могут быть получены. Подобный подход снимает с пользователя ответственность за определение того, какую стратегию следует применить для достижения высоких показателей производительности. Более того, от пользователя
t
t
вообще не требуется каких-либо знаний о существующих стратегиях, что существенно повышает универсальность использования языка. Кроме того, перенос ответственности за выбор оптимальной стратегии обработки запросов на СУБД предотвращает выбор пользователями стратегий выполнения запросов, которые будут заведомо неэффективны, и предоставляет СУБД больше возможностей контролировать общую производительность всей системы.
Существует два основных метода обработки запросов, хотя на практике чаще всего используется некоторая их комбинация. Первый метод для определения порядка выполнения операций обработки запроса предполагает использование эвристических правил. Второй метод заключается в сравнительной оценке стоимости различных вариантов выполнения запроса и выбора того варианта, который предполагает минимальное использование ресурсов. Поскольку скорость доступа к данным на диске невелика (по сравнению со скоростью доступа к данным в оперативной памяти), основную стоимость операций обработки запроса в централизованных СУБД составляет стоимость дисковых операций. Поэтому при выполнении оценки стоимости именно этот показатель интересует в наибольшей степени.
Обработка запросов - действия, необходимые для извлечения требуемой информации из базы данных.
Целью выполнения процедуры обработки запросов является преобразование запроса, записанного на языке высокого уровня (обычно, это язык SQL), в корректную и эффективную последовательность операций (план запроса), записанную на языке низкого уровня, реализующем операции реляционной алгебры. Дальше подготовленный план обработки запроса выполняется с целью выборки требуемых данных.
Оптимизация запроса - процедура выбора наиболее эффективного плана выполнения поступившего запроса.
Важнейшим аспектом обработки запросов является их оптимизация. В результате трансформаций одного и того же высокоуровневого запроса может быть получено множество его эквивалентных вариантов. Поэтому цель оптимизации состоит в выборе такого варианта представления запроса, для обработки которого потребуется минимальное количество системных ресурсов. Обычно предпринимается попытка сократить общее время выполнения запроса, представляющее собой сумму времени выполнения всех его отдельных операций.
Однако использование ресурсов также может являться показателем, оптимизируемым в целях улучшения времени реакции системы, так как фактически в данном случае речь идет о максимально возможном распараллеливании выполнения операций.
Оба метода оптимизации запросов опираются на статистические показатели, накопленные для обрабатываемой базы данных. Эти величины используются для выполнения обоснованного выбора среди всех возможных вариантов. Точность и актуальность имеющихся статистических данных оказывают решающее влияние на общую эффективность результа-
тов оптимизации выполняемых вычислений. Статистические показатели включают сведения об отношениях, атрибутах и индексах. В частности, системный каталог может хранить сведения о текущей кардинальности отношений, количестве уникальных значений для каждого из атрибутов, а также о числе уровней всех многоуровневых индексов. Задача поддержки статистических сведений в актуальном состоянии может представлять собой серьезную проблему. Если СУБД будет выполнять обновление статистических показателей при каждой вставке, обновлении или удалении кортежа, то это окажет весьма существенное влияние на общую производительность системы в периоды ее пиковой нагрузки. В альтернативном варианте, который чаще всего используется на практике, процедуры обновления статистики выполняются либо с установленным периодом (например, каждую ночь), либо в моменты простоя системы.
Для иллюстрации результатов применения различных стратегий оптимизации запросов с точки зрения использования системных ресурсов воспользуемся следующим примером.
Пример. Сравнение различных методов обработки запросов.
Определить имена всех ректоров, работающих в ростовских вузах.
Требуемый SQL-запрос может быть записан в следующем виде.
SELECT *
FROM Персонал, Вузы
WHERE Персонал.КодВуза = Вузы.КодВуза
AND Персонал.Должность = 'Ректор'
AND Вузы.Город = 'Ростов-на-Дону');
Исходя из правил эквивалентности выражений реляционной алгебры, приведенный выше запрос можно записать в следующих трех вариантах:
олжность = 'Ректор')л (Город = 'Ростов-на-Дону')л (Персонал.КодВуза = Ву-зы.кодВуза)(ПерсоналхВузы);
2) ^"(Должность = 'Ректор')л (Город = Тостов-на-Дону')(ПеРс°нал^^ Персо-нал.КодВуза =
Вузы.КодВузаВузы);
3)(СТДолжность = 'Ректор'(Персонад))><Персоиал .КодВуза = Вузы. КодВуза(стГ ород = 'Ростов-на-Дону'
(Вузы)).
Чтобы придать конкретность обсуждению, предположим, что таблица Персонал содержит 1000 кортежей, а таблица Вузы - 50. Далее примем, что пять из 50 ректоров управляют вузами, находящимися в Ростове-на-Дону. Сравнение трех вариантов записи одного и того же запроса проведем с точки зрения количества операций доступа к диску, выполняемых в каждом случае. Для упрощения будем считать, что ни одно из используемых отношений не имеет каких-либо индексов или ключей сортировки, а результаты любых промежуточных операций всегда записываются на диск. Операции записи на диск окончательных результатов выполнения запроса игнорируется, поскольку их количество в каждом из трех рассматриваемых вариантов одинаково. Дополнительно предположим, что по каждой дисковой операции осуществляется доступ только к одному кортежу (хотя на прак-
тике обмен с дисковыми устройствами осуществляется блоками, содержащими, как правило, сразу несколько кортежей), а оперативная память компьютера достаточно велика, чтобы разместить все отношения, используемые при выполнении любой из операций реляционной алгебры.
При обработке первого варианта запроса вычисляется декартово произведение таблиц Персонал и Вузы, для чего потребуется (1000+50) операций доступа к диску при чтении исходных отношений и вывод на диск результирующей таблицы, содержащей (1000*50) строк. Затем потребуется вновь считать с диска все эти (1000*50) строки, чтобы проверить каждую из них на соответствие заданному предикату. В результате общая стоимость обработки данного варианта запроса составит: (1000 + 50) + 2*(1000*50) = = 101050 дисковых операций.
Во втором варианте записи запроса сначала осуществляется соединение таблиц Персонал и Вузы по полю КодВуза, для чего потребуется выполнить (1000 + 50) обращений к диску при считывании кортежей исходных отношений. Очевидно, что результирующая таблица операции соединения будет насчитывать 1000 кортежей - по одному для каждого из сотрудников компании (поскольку каждый работник может быть приписан только к одному из вузов). Последующая операция выборки (селекции) потребует выполнения 1000 обращений к диску с целью считывания результатов операции соединения, поэтому общая стоимость выполнения запроса составит: 2*1000 + (1000 + 50) = 3050 дисковых операций.
На первом этапе последнего варианта обработки запроса каждый кортеж таблицы Персонал проверяется на соответствие указанному предикату, для чего потребуется выполнить 1000 операций чтения. Результирующий набор данных состоит из 50 строк. На следующем этапе выполняется операция выборки из таблицы Вузы сведений о тех отделениях, которые расположены в Ростове-на-Дону. Считывается 50 исходных кортежей и записывается результирующая таблица из пяти строк. На последнем этапе выполняется соединение укороченных отношений Персонал и Вузы, для чего потребуется (50 + 5) операций чтения. Следовательно, общая стоимость обработки запроса составит: 1000 + 2*50 + 5 + (50 + 5) = 1160 дисковых операций.
Очевидно, что наиболее эффективным является третий вариант записи запроса, причем стоимость его выполнения в 87 раз меньше стоимости первого варианта. Если увеличить количество кортежей в таблице Персонал до 10000, а число вузов - до 500, то третий вариант запроса окажется эффективнее первого в 870 раз!
Интуитивно понятно, что выполнение операции декартового произведения или соединения таблиц связано с большими затратами, чем выполнение операции выборки. Поэтому основное преимущество третьего варианта обработки запроса состоит в том, что размеры обрабатываемых таблиц были существенно сокращены до выполнения операции соединения.
Отсюда можно сделать предварительный вывод, при оптимизации запросов унарные операции выборки и проекции целесообразно выполнять как можно раньше, поскольку это позволит уменьшить размеры наборов данных, участвующих в бинарных операциях.
Адаптация алгоритма Джонсона
Пусть Т - общее время, которое проходит с начала обработки первого запроса на процессоре М1 и до конца обработки последнего на процессоре М2. Фиксируем некоторый порядок прохождения запросов ^ P,2,•••, Р]р ^ Рп) (рис. 2). Пусть х1р - время
простоя второго процессора М2 после окончания обработки Р; и до начала работы с запросом Р^ .
Тогда Т = Ъ]г +Ъ]г , где В]г ^^ .
Г=1 Г=1
Так как В, , г = 1, 2, ..., п, известны, то для ми-
1г
п
нимизации Т достаточно найти минимум ^ X, . Обо-
значим также A=т, , r = 1, 2, ..., n.
Jr Llr
Очевидно, что Xj = Aj ,
X, =
J2
М,
Aj, + A12 -BJ, -ХЛ> если A +A-2 *B, + X,,
о если A, + A12 < B, + X1,.
Р1, Pj2
Рз
Р
j4
Р
j5
М2
Pj, Pj2 Pj3 Pj4
Ш
Xj,
Xj3
Xj4
Рис. 2. К обоснованию алгоритма Следовательно,
X32 = max К + Aj2 " Bi " X11, 0) =
= max ff A-f B]r -f X, 0 ).
V r=1 r=1 r=1 J
Для суммы Xз + Xj получаем
X3 + X3 = X3 + max (A, + A, - B, - X3 , o) =
■1 12 11 V 11 j2 11 11/
= max (Ai1 + Ai2 - B11, Xi1 ) = = max (A11 + A12 - B11, A11 ) = max if A1r - f Bh, ^ ).
V r=1 r=1 J
f 3 2 2 Л
Аналогично Xj = max I f AJr - f BJr - f XJr, 0 I и
V r=1 r r=1 r r=1 r J
f X, = max ff A, -f B,, f X ^
Г =
Jr Jr ' Jr
r= r= r=
= max|i Air-i Bjr, £ Air - Bj.,, АД I.
r=, r=, r= J
Эта формула легко переносится на n слагаемых:
D (S )=EXj =
r=1
n-1 n-1 n-2
= max|E Ajr-E BJr, E А, -E Bjr,
\r=1 r=1 r=1 r=1
..., A,.
или
Dn ( S )= max |e AJr -E BJr I.
Полагая
Jr Jr
r=1 r=1
a-1
La = ya, - E b, ,
a Jr ^ Jr '
r=1 r=1
' Jk+1
max ( L«, 41+1 )< max ( , L<2?a ).
Так как
max и
(lV,4(k1_+1 ) = maxiy Ajr - E Bjr, E А, - E B
x ' V r=1 r=1 r=1 r=1
max (L^, L(k2+)1 ) = max ^E Ajr + A
k-1 - E bj
Jk+1 ^ Jr' r=1
k+1 k-1 Ea, -Eв, + в,
^ Jr ^ Jr Jk+1
r=1 r=1
то можно записать
k-1 k+1
E Bjr - E A, + max (L«, L« ) =
r=1 r=1 '
= max (- A, , - B, ) = - min (a, , B, )
V Jk+1 ' Ju V Jk+1 ' Jk )
E Bjr - E Ajr + max (L?), L^ ) =
r=1 r=1 v '
= max -
(-A, , - B, ) = - min (a, ,B, ).
V Jk' Jk+1 / V Jk' Jk+1 )
Соотношение перепишется тогда так:
- min
in(A, ,в, )<-min(A, ,в, ), V Jk+1 ' Jk ) \ Jk> Jk+1 / '
имеем Dn (S ) = max La.
1<a< n
Обозначим теперь первоначальный порядок обработки запросов через S1 :
S, = (P, , P, , P, , ..., P, , P, , P, , P, , ..., P, ), 1 V IV ,2 ' ,3 ' ' Jk-1 ' Jk' lk+V Jk+2' ' / '
а через S2 - порядок, в котором переставлены местами P, и P,
Jk Jk+i
S2 = (P, , P, , P, , ..., P, , P, , P, , P, , ..., P, ).
Значения La и L^, полученные, исходя из порядков S, и S2, совпадают для всех a , кроме, может быть, a = k и a = k +1.
1. Имеем Dn (S1 ) = Dn (S2 ), если
max(,Lk+1 ) = max(,l£> ).
2. Если max(L^,L(k1+1 max(L^,L^ ), то один
из двух порядков S1 или S2 предпочтительнее. Порядок S1, в котором P,k+1 следует за P,k, предпочтительнее S2, в котором предшествует P,k, если
или min(A, ,B, )< min(A, ,B, ).
V Jk' Jk+1 / V jk+1 ' Jk )
Таким образом, порядок S1 предпочтительнее S2,
если min(A, ,B, )< min(A, ,B, ).
V Jk' Jk+1 / V Jk+1 ' Jk )
Рассмотрим теперь порядок
S' = (P, , P, , P, , ..., P, , P, , ..., P, ).
\ J1 J2 ' J3 ' ' Jk Jl ' jb /
Не следует изменять порядок S', если для любой пары соседних индексов имеем
min(AJk,bjI) ^ min(aji,BJk). Это выполняется, если A, меньше или равно Bjt, Ajt, Bjk . В этом случае равносильно
min(AJk,bjo ^ min(aj, ,bji). Отсюда следует, что если в матрице || т, || есть Aj , не превосходящее всех других A, и Bj{, то порядок обработки должен начинаться Р,к; такое A
Jk
есть Bj , не
может равняться нескольким другим А^ и В^ , но это не препятствует выбору А^ в качестве начального элемента.
Соотношение выполняется также, если Bj¡ меньше или равно А^, В^, А^ . В этом случае оно равносильно ( ак, вjk) > min (АЛ, вп).
Следовательно, если в матрице ||ту превосходящее всех других Aj■k и В.^ , то порядок обработки должен заканчиваться Pj ; такое Bj¡ может равняться нескольким другим А■ или В]к , но это не препятствует выбору Bj¡ в качестве конечного элемента.
Тем самым показано, что определенный по алгоритму Джонсона порядок прохождения запросов действительно минимизирует время простоя процессора
М2.
Поступила в редакцию
24 января 2011 г.
Клименко Игорь Валерьевич - канд. техн. наук, кафедра «Вычислительная техника и автоматизированные системы управления», Ростовский государственный университет путей сообщения. Тел. (863)294-32-62. E-mail: [email protected]
Klimenko Igor Valerevich - Candidate of Technical Sciences, department «Computer Facilities and Automated Control Systems», Rostov State Transport University. Ph. (863)294-32-62. E-mail: [email protected]
и
r