я все еще не понимаю, где гигантизм.
В OLEDB есть такая схема - привилегии для колонок - COLUMN_PRIVILEGES
На каждую колонку приходится (4 записи)*(число юзеров): select, update,
insert, delete
---
Тест делает выборку всей схемы, а потом для каждой записи выполняет проверку
работы ограничений.
Ограничения представляют собой значения определенных колонок, которые ты
указываешь при выборке схемы.
То есть, например, тебя интересуют только те записи, которые описывают
Table1, Column1. Вот и указываешь эти значения в при получении схемы.
Получаешь не всё, а только то, что удовлетворяет переданным ограничениям.
Когда отключен кэш метаданных, то провайдер каждый раз грузит данные из
системных таблиц. В целях оптимизации - он пытается заюзать переданные
ограничения в запросе загрузки (через параметры). То есть, фактически,
заставляет сервер обрабатывать ограничения.
Тест перебирает все возможные комбинации ограничений. Например,
- Только имя колонки
- Только имя таблицы
- Имя колонки и имя таблицы.
---
Колонки ограничений у COLUMN_PRIVILEGES:
TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, GRANTOR, GRANTEE
TABLE_CATALOG, TABLE_SCHEMA - не поддерживаются, поэтому не тестируются.
остается 4 ограничения - 15 комбинаций.
У GRANTOR и GRANTEE - селективность(?) никакая. То есть когда мы их
проверяем, фактически заново грузится вся схема. И тест перебирает
полученные записи в поисках той, которую он тестирует в текущий момент.
Если к этим ограничениям добавлется имя таблиицы / колонки, то эффективность
увеличивается.
даже должно быть больше. Другое дело, TMP$ супротив MON$, где
в TMP$ столбцов как раз очень даже много. Но зачем проверять tmp$?
Потому что такой тест. Перебирает и проверяет все что увидит.
Иногда, во время созерцания как он тупит, появляются интересные мысли как
сделать так, чтобы он тупил меньше.
Например,
- раньше провайдер не строил внутренних индексов для обработки ограничений
(при вклюенном кэше). Щас строит.
- раньше он не заставлял сервер обрабатывать ограничения. Щас заставляет.
- Есть мысль все таки прикрутить кэш препарированных запросов. Чтобы
сократить время тестирования с отключенным кэшированием. Я знаю, что это
реально поможет. Но пока руки не доходят.
- Сделать тест многопоточным.
Коваленко Дмитрий.