Управление оперативной памятью

ОГЛАВЛЕНИЕ

При работе с версиями SQL Server, которые предшествовали SQL Server 7.0, системный администратор (sa) был вынужден выделять фиксированный объем оперативной памяти для нужд самого SQL Server. Этот объем нельзя было изменить, не останавливая работу SQL Server. Если выделить слишком мало оперативной памяти, производительность могла заметно снизиться, потому что у SQL Server не хватит памяти для хранения часто используемых данных. С другой стороны, если выделить слишком много оперативной памяти (например, больше, чем имеется в распоряжении операционной системы), то SQL Server не сможет даже запуститься. А если SQL Server нельзя запустить, то нельзя запустить и процедуру, которая уменьшила бы объем выделенной памяти, произведя реконфигурацию. При работе с более ранними версиями SQL Server системный администратор должен был обладать высоким уровнем мастерства, чтобы обеспечить эффективное использование ресурсов.

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

Начиная с версии SQL Server 7.0, вся картина управления памятью коренным образом изменилась. У системных администраторов не только появилась возможность динамически изменять общий объем выделенной для SQL Server памяти, но и перераспределять в случае необходимости память внутри SQL Server между различными системными ресурсами. Если SQL Server требуется больше памяти для планов исполнения запросов, можно освободить несколько страниц, содержащих данные, и заполнить их планами исполнения запросов. Или же наоборот, если требуется больше памяти для данных, считываемых с жесткого диска, то можно удалить из оперативной памяти планы редко исполняемых запросов.

Поскольку я знаю, что в SQL Server реализована стратегия динамического использования оперативной памяти, меня очень удивил вопрос о работе процедурного кэша, который мне задал слушатель на одном из семинаров. Он где-то читал о новом переключателе, который можно использовать при запуске SQL Server 7.0, чтобы ограничить объем используемой процедурным кэшем оперативной памяти. Хотя я ничего не знала об этом переключателе, я верила, что слушатель не выдумал эту возможность. Однако в SQL Server 7.0 нет ничего, что называлось бы процедурным кэшем, поэтому после семинара я занялась изучением ситуации. В файле readme_txt, который сопровождает пакет с исправлениями Service Pack 2 (SP2) для SQL Server 7.0, я обнаружила то, о чем говорил мой коллега. Но прежде чем я расскажу об этом переключателе, обратимся к основам управления оперативной памятью в SQL Server 2000 и SQL Server 7.0.