Н. 3. Елманова. C++Builder 3.0, архитектура "клиент/сервер" и Internet
Vendor Calls - вызовы функций API клиентской части, связанных с обращением к серверу.
Использование SQL Monitor является простейшим (хотя и не единственным) средством тестирования производительности информационных систем в архитектуре "клиент/сервер", и эффективность применения,большинства рассматриваемых ниже приемов их оптимизации можно проконтролировать с его помощью.
7.2     Минимизация обращений к серверу и сети
Минимизация связей с сервером влияет на производительность всех составных частей информационной системы - клиента, сервера и сети. Лишние связи с сервером приводят к созданию дополнительных объектов в клиентском приложении (таких, как TDatabase), генерации дополнительных запросов к серверу для выяснения прав пользователя на доступ к тем или иным объектам базы данных, а также к непроизводительному использованию ресурсов сервера. Для минимизации связей с сервером можно применять такие приемы, как использование в явном виде компонентов TDatabase вместо неявного их создания, использование кэширования данных и структуры, хранение сведений о метаданных в клиентском приложении, применение локальных фильтров и др.
7.2.1   Использование компонента TDatabase
При использовании нескольких компонентов TDataSet следует иметь в виду, что каждый из них стремится во время выполнения создать неявно „свой объект TDatabase для связи с сервером. Если же поместить компонент TDatabase на форму или в модуль данных на этапе проектирования приложения и "связать с ним все компоненты TDataSet, указав его имя в качестве значения свойства DatabaseName этих компонентов, все они будут во многих случаях использовать одну общую связь, обеспеченную этим компонентом.
Это утверждение верно в случае использования компонентов TQuery. Если используются компоненты TTable, такое утверждение нуждается в проверке - для некоторых серверных СУБД оно может оказаться неверным.
7.2.2   Использование  параметра SQLPASSTHRU MODE
Еще один способ минимизации связей с сервером заключается в изменении значения параметра SQLPASSTHRU MODE компонента TDatabase (либо псевдонима, созданного утилитой конфигурации ВОЕ). Этот параметр определяет, могут ли использоваться общие соединения с базой дан-
148
Оптимизация приложений C++Builder в архитектуре "клиент/серее"
ных запросами, сгенерированными приложением (например, с помощью компонента TQuery), и запросами, сгенерированными самой библиотекой BDE (например, при реализации навигационных методов компонента TTable). Значением этого параметра по умолчанию является NOT SHARED, позволяющее избежать возможных конфликтов при многопользовательском обновлении данных, но создающее отдельные соединения с базой данных для обоих типов запросов.
Наиболее эффективным с точки зрения минимизации соединений с базой данных значением этого параметра в большинстве случаев является значение SHARED AUTOCOMMIT. При использовании этого значения изменения каждой записи в таблицах немедленно фиксируются сервером независимо от типа вызвавшего их запроса, но при этом оба типа запросов могут использовать одно и то же соединение с базой данных. Этот режим наиболее близок к режиму, в котором применяются сетевые версии настольных СУБД. Однако, так как сервер в этом случае должен немедленно фТжсировать результаты изменения записей, он инициирует и завершает отдельную транзакцию при изменении каждой записи, что может привести кТтёрегрузке сервера и сети и к снижению производительности вместо ожидаемого ее повышения. Поэтому эффективность использования такого режима должна быть обязательно проверена путем тестирования.
Третье возможное значение этого параметра - SHARED NOAUTOCOMMIT. В этом случае оба типа запросов могут также использовать одно и то же соединение с базой данных, причем без завершения транзакций после редактирования каждой записи. Однако в этом случае контроль за завершением транзакций следует осуществлять в клиентском приложении. Подобный режим может быть весьма эффективен, так как перегружающие сервер транзакции автоматически не инициируются после редактирования каждой записи, но при его применении могут возникать конфликты и непредсказуемые изменения данных при попытке одновременного редактирования одной и той же записи разными пользователями. Поэтому данный режим следует использовать только в том случае, если вероятность подобных коллизий мала.
7.2.3   Кэширование метаданных на рабочей станции
Еще один способ минимизации связей с сервером заключается в использовании кэширования структуры таблиц на рабочей станции. В этом случае снижается число обращений к серверу с целью определения метаданных, т. е. количества столбцов в используемых в приложении таблицах, их имен и типов данных. Для этой цели применяются следующие параметры псевдонима базы данных (или компонента TDatabase):
149