Magistr
Joined: 19 Aug 2002 Posts: 1264 Location: Петрунин Д.Н. Occupation: Инженер-программист Interests: Н.Новгород
|
Posted: 26 Mar 2004 21:22 Post subject: Re: Периодическая перезагрузка сервера и (до кучи) oplocks |
|
|
EugeneT wrote: | В определенные моменты времени БЕСТ начинает жутко тормозить. Перезагружаешь сервер, все опять работает быстро. Сервер NT4, клиенты (20 шт.) NT4ws и W2k.
А до кучи еще. Влияет ли включение/отключение oplocks на производительность БЕСТ? |
Я в свое время разбирался с opportunity locks на W2K Server - доки почитал на microsoft, всякие там ключики реестра узнал, которыми можно настраивать эти блокировки.
По идее, opplocks должны повышать быстродействие, однако я пришел к выводу, что при многопользовательском доступе к базам Б4, opplocks быстродействие нисколько не повышают. В доках на MS пишут, что старые DOS программы могут некорректно работать, если на сервере включены opplocks, однако у меня на серверах opplocks включены и проблем никаких нет.
А суть в том, что opplocks эффективны, когда файлы открываются несколькими клиентами только в режиме чтения, однако Б4, даже когда формирует отчеты (а это основной "тормоз"), открывает файлы в режиме read/write, что приводит к невозможности использовать opplock в отношении таких файлов (за исключением монопольного режима, когда с БД работает один человек). Вот если б Б4 во время формирования отчетов открывал файлы в режиме read/deny write, но это, похоже, невозможно
Opplocks реально повышают быстродействие (~ в 3 раза), когда с файлами БД работает только один человек (монопольный режим).
Если opplocks отключить, то скорость работы (читай скорость формирования отчетов) в монопольном режиме упадет приблизительно в 3 раза, а скорость работы в многопользовательском режиме не изменится.
Я отсавил opplocks включенными, т.к даже если с БД работают много пользователей, иногда бывает так, что в каком-то из модулей Б4 работает только один человек, вот тогда у него отчеты "летают".
Мне раньше бухи частенько задавали вопрос, почему один и тот же отчет изредка формируется за 5 минут, а чаще всего за 15 - я их немножко "просвятил" в этом вопросе, теперь все "долгие" отчеты запускаются на сервере в терминальном режиме и формируюися существенно быстрее.
Как windows "отдает" расшаренные файлы в многопользовательской среде? Вот так (схема 1):
* клиент - хочу прочитать N байт по смещению Z из файла X, давай поставим лок на этот кусок
* сервер - Ok, я лок поставил
* клиент - ну тогда давай мне эти N байт
* сервер - без проблем, на тебе
* клиент - спасибо, сними лок
* сервер - ну и ладнеько, лок снят
И так повторяется для каждой операции чтения. Причем, даже если клиенту несколько раз подряд потребуется один и тот же блок данных, он каждый раз будет обращаться к серверу (данные не кешируются на клиенте), т.к их кто-то другой может изменить. Это схема именно в многопользовательской среде, когда файл открыт на чтение/запись более чем одним клиентом. Такая же схема будет, если с файлом будет работать только один пользователь и на сервере отключены opplocks. А вот если opplocks включены, то схема такая (схема 2):
Инициализация:
* клиент - хочу открыть файл X на чтение/запись и поставить на него opplock
* сервер - файл открыт, если кто-то другой откроет это файл на запись, я тебе сообщу
Запрос данных. Поскольку работа в режиме opplock, блокировки не накладываются и клиент сразу запрашивает данные, т.е вместо 3-х запрос-ответов выполняется только 1 запрос-ответ:
* клитент - давай N байт по смещению Z из файла X
* сервер - на (чуешь как быстро я стал работать!)
Далее еще круче. Если клиенту нужно еще раз обратится к ранее считанному блоку, то клиент не обращается к серверу, а читает эти данные из локального кеша, что нехило ускоряет работу. Более того, клиент может кешировать у себя ЗАПИСЬ в файл (можно запретить кеширование записи через реестр). Вообще говоря, кеширование записи не безопасно, т.к пользователь может думать, что все записалось, а на самом деле все в локальном кеше и если вдруг в такой момент локальный комп вырубится, то прокешированные данные будут потеряны, а целостность БД Б4 может быть разрушна.
Если 2-й клиент пытается получить доступ к файлу X, то прежде чем 2-й клиент получит доступ, сервер сообщает первому клиенту, что opplock "разрушен", тогда 1-й клиент должен высвободить свой запись-кеш (отправить на сервер модифицированные блоки данных). После чего оба клиента работают по схеме 1.
То есть oplock существует при любом из следующих условий:
- файл открыт на чтение или чтение/запись только одним клиентом
- файл открыт несколькими клиентами только на чтение.
Если файл открыт многими клиентами только на чтение, то oplock "живет" и все работают "шустро", но как только какой-то другой клиент захочет открыть этот файл на запись, oplcok разрушается, причем этот "противный" клиент не получит доступ к файлу пока сервер не известит всех других подключившихся о том, что oplock разрушен и они (клиенты) больше не могут использовать свой локальный кеш и должны теперь запрашивать данные по схеме 1 - то есть здесь возникает задержка, замедление для "противного" клиента. Если б opplock-а не было, то серверу не пришлось бы тратить время на извещение других клиентов. А может быть ситуация, когда один из клиентов открыл файл и завис, а сервер пытается этого клиента известить и ждет от этого клиента подтверждения - еще один подводный камень (правда, это редко случается).
Так вот он какой, этот "бесполезный" oplock от MS aka Microsoft _________________ http://v32.ru - печать и экспорт в Excel отчетов БЕСТ4. |
|