Очередь столбцов таблиц

Очередь столбцов таблиц предназначена для хранения в пуле ядра СУБД системного описания столбцов обрабатываемых таблиц.

Очередь столбцов является наиболее динамичной, поэтому ее размер существенно влияет на скорость обработки данных СУБД.

Если очередь столбцов слишком мала, то первые замедления в работе СУБД возникнут уже при трансляции SQL-запроса, поскольку транслятор проверяет корректность использования каждого столбца таблицы в транслируемом SQL-запросе путем обращения к СУБД за полным его описанием.

Ядро СУБД сначала ищет описания столбцов среди тех описаний, которые находятся в текущий момент в очереди столбцов. При этом для поиска находящегося в очереди элемента обычно нужно просмотреть в среднем половину очереди, а для того, чтобы установить отсутствие элемента, необходимо просмотреть всю очередь. Если дескриптор искомого столбца в очереди не найден, ядро СУБД ищет описание этого столбца в системной таблице описания атрибутов $$$ATTRI, где находятся описания всех столбцов всех таблиц БД. Если таблица $$$ATTRI не индексирована (по имени столбца), то поиск осуществляется простым перебором всех находящихся в нем описаний. Очевидно, это длительный процесс, особенно когда суммарное количество столбцов в БД довольно велико (средняя БД включает до 1000 столбцов).

Дескриптор найденного в таблице $$$ATTRI столбца включается в очередь столбцов, при этом из очереди столбцов вытесняется какой-то элемент (вполне возможно, что в этом случае понадобится еще и записать в БД информацию о вытесняемом столбце, если она изменилась). На этапе трансляции этот длительный (но разовый!) процесс обработки выполняется для каждого из использованных в SQL-запросе, но отсутствующих в очереди, столбцов.

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

Рекомендуется размер очереди столбцов задавать как можно больше. В идеале очередь столбцов должна вмещать описание всех столбцов всех таблиц БД.