Приоритетная обработка

Обработка SQL-запросов выполняется в соответствии с установленными для них приоритетами.

В СУБД ЛИНТЕР каждый SQL-запрос исполняется с определённым приоритетом, заимствованным из того канала (соединения или курсора), по которому он подан.

Приоритет – целое число в интервале от 0 до 256, влияющее на скорость обработки запроса в многопользовательской СУБД (т.е. среди других одновременно выполняющихся SQL-запросов).

Чем выше (больше) приоритет запроса, тем больше времени и других ресурсов СУБД будет отдавать его обработке. При обработке равноприоритетных SQL-запросов, исполняемых одновременно, СУБД не отдаёт предпочтений ни одному из этих запросов, уделяя равные промежутки времени каждому из них.

Общий диапазон значений приоритета разбивается на группы:

  • группа планирования с форой (под термином «фора» понимается режим вытесняющей многозадачности). Приоритеты от 0 до 99;

  • группа циклического планирования. Приоритеты от 100 до 199;

  • группа Real-time (или системных) запросов. Приоритеты от 200 до 249;

  • зарезервированные значения приоритетов от 250 до 256.

    Примечание

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

На каждом очередном кванте ядро СУБД осуществляет выбор запроса (канала) для обработки. При этом действуют следующие общие правила:

  • для обработки всегда выбирается запрос с наивысшим (наибольшим) приоритетом;

  • при обработке запроса в более приоритетной группе запросы во всех низкоприоритетных группах не обрабатываются.

Т.е. конкуренция запросов проходит только для запросов внутри группы.

В каждой из групп применяется собственная стратегия планирования выполнения множества обрабатываемых запросов.

В группе планирования с форой для обработки выбирается самый приоритетный запрос этой группы. После каждого кванта обработки приоритет этого запроса (если он отличен от нуля) снижается на единицу, так что приоритет в данном случае – это некая фора в ряду прочих запросов этой группы (рисунок 13).

При планировании с форой вновь поступивший запрос может непрерывно отработать несколько квантов, пока его приоритет не станет меньше приоритетов существующих запросов, после этого СУБД приступает к равномерному распределению ресурсов.

Группа планирования с форой
Рисунок 13. Группа планирования с форой

В группе циклического планирования циклически квантуется обработка запросов, имеющих наивысший приоритет (рисунок 14). Более низкоприоритетные запросы этой группы не будут обрабатываться до тех пор, пока не закончится выполнение всех запросов с более высоким приоритетом.

Группа циклического планирования
Рисунок 14. Группа циклического планирования

В группе Real-time (или системных) запросов всегда (на всех квантах) выполняется один самый приоритетный запрос. Все прочие запросы этой и прочих групп будут ждать его завершения.

Кроме того, каждый пользователь БД получает определённый приоритет – приоритет пользователя. Приоритет пользователя определяет приоритет по умолчанию всех SQL-запросов, поданных от его имени.

СУБД ЛИНТЕР позволяет изменять приоритеты обработки запросов в зависимости от ситуации.