Как ухудшить производительность SQL-сервера?

(статья в стиле SQL-панк)

Задача, объявленная в заголовке этой статьи на самом деле не так проста как кажется. Вам потребуется достаточно усилий чтобы добиться минимально возможной производительности сервера. Безусловно, самый простой способ – это ухудшить характеристики "железа" компьютера и операционной системы, где установлен SQL-сервер, но такие темы мы здесь рассматривать не будем.

Итак:
1. Делайте COMMIT после каждой вставки записи или ее обновлении. Особенно этот способ эффективен при пакетной вставке большого (более 1000) количества записей. В организации такого поведения вам может помочь режим в BDE Shared Autocommit. Причем в этом случае можно добиться максимального эффекта, поскольку без явного управления транзакциями при открытых TQuery с большим количеством записей первый же автоматический COMMIT при изменении/вставке одной записи приведет к немедленному перечитыванию записей TQuery (безусловно, это не bug, а естественное поведение BDE при смене контекста транзакции).

2. Побольше контроля целостности (constraints), особенно ссылочной целостности между таблицами, даже где это не так нужно. Все constraints являются вычисляемыми (даже не смотря на то что они предкомпилированы в BLR). Чем больше контроля ссылок, тем больше производится чтений с диска, и тем быстрее можно достичь оптимального замедления (правда, этого не всегда можно добиться, особенно если структура таблиц и связей в базе данных хорошо продумана).

3. Побольше индексов. При каждом изменении или добавлении записи соответственно будет изменяться большее количество индексных страниц. Правда, если кэш SQL-сервера достаточно большой, то по максимуму загрузить сервер не удастся.

4. Несмотря ни на что стройте индексы по полям, содержащим наименьшее количество разных значений (например, только 0 и 1, пол мужской/женский и т. п.). Пусть сервер при поиске или выборках перебирает максимально возможное количество записей.

5. Комбинируйте вышеперечисленные пункты в разных вариантах. Великолепных результатов можно достичь объединив пункты 1 и 2, и может быть, прибавив к ним пункт 3. Только так вы поставите ваш SQL-сервер в буквальном смысле на колени.

Подпишитесь на новости Firebird в России

Подписаться