![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
Itsys |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1338 Регистрация: 21.1.2008 Где: г. Москва Репутация: 2 Всего: 34 |
Добрый день,
Может, кто сталкивался. Разрабатываю интернет магазин платформа Win Server 2003+IIS+Active Perl. Перед разработкой, прочитав документацию по Active Perl, решил запускать его в режиме расширения ISAPI. Выдержка из документации:
Повышение производительности было не главное при выборе. К сожалению, уже не помню где читал, но была такая вещь: что при работе именно в режиме ISAPI, модули, которые подключаются через use и блоки кода, которые находятся в блоках BEGIN или END кешируются, в дальнейшем при повторном выполнении какого-нибудь скрипта, соответственно не должны перекомпилироваться и повторно исполняться. Из-за этого для коннекта к БД был создан отдельный модуль, подключаемый во все скрипты через use. По идее, изложенной выше, коннект к базе данных должен производиться только один раз при первом обращении к этому модулю, и в дальнейшем должно использоваться открытое соединение. Но процедура подключения к БД выполняется при каждом обращении к скриптам сайта. В чем может быть проблема? |
|||
|
||||
ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
Itsys, Вы не указали, как производится подключение к БД. В функции import() или как?
-------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
Itsys |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1338 Регистрация: 21.1.2008 Где: г. Москва Репутация: 2 Всего: 34 |
через DBI, перменная хендл экспортируется из модуля
Добавлено через 40 секунд Вся суть в том, что сервер БД - MS SQL, находится на другом сервере... |
|||
|
||||
ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
Покажите код.
P.S. сделайте отладочный вывод PID (идентификатора процесса) Это сообщение отредактировал(а) ginnie - 20.8.2009, 17:23 -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
Itsys |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1338 Регистрация: 21.1.2008 Где: г. Москва Репутация: 2 Всего: 34 |
Модуль подключения:
Использвование:
|
||||
|
|||||
ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
Itsys, не уверен на счет use CGI; в модуле, т.к. его код, скорее всего до запроса выполняется.
Надо сделать в модуле отладочный вывод PID (идентификатора процесса). -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
Itsys |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1338 Регистрация: 21.1.2008 Где: г. Москва Репутация: 2 Всего: 34 |
Просто я сделал модуль Values, в котором поключаю БД, задаю некоторые настройки, считываю и преобразую параметры, переданные в скрипт через CGI и т.д. Т.е. для того, чтобы все работало, как я хочу надо делать отдельный модуль, в котором будет только подключение к БД?
Имеется в виду, удостовериться, что модуль запускается одним и тем же процессом... это 100%, при запуске сервера появляется 1 процесс, кроме него никаких большще дополнительныз процессов не возникает. |
|||
|
||||
ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
Itsys, отладочный вывод - надежный механизм анализа происходящего. Если он покажет, что действительно модуль несколько раз компилируется, это один алгоритм, если компилируется только один раз - алгоритм дальнейших действий другой.
-------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
Itsys |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1338 Регистрация: 21.1.2008 Где: г. Москва Репутация: 2 Всего: 34 |
Сори но я не понимаю, что ты предлагаешь сделать...
то, что коннект идет несколько раз - отслеживал по трайсеру MS SQL... что надо включить |
|||
|
||||
ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
Itsys, реконнекты могут быть не связаны с перезагрузкой модуля, возможно это DBI пересоединяется при каких-то условиях. Есть сложности с добавлением отладочного вывода? Как именно сделать отладочный вывод под ISAPI не знаю, может warn работает?
Это сообщение отредактировал(а) ginnie - 20.8.2009, 18:21 -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
Itsys |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1338 Регистрация: 21.1.2008 Где: г. Москва Репутация: 2 Всего: 34 |
что надо добавить в отладку? pid?
|
|||
|
||||
ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
Из лога нам надо понять, происходит ли многократный вызов DBI->connect из Values, и если происходит, надо убедиться, что это делается в рамках одного процесса.
Это сообщение отредактировал(а) ginnie - 20.8.2009, 18:25 -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
Itsys |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1338 Регистрация: 21.1.2008 Где: г. Москва Репутация: 2 Всего: 34 |
Вот лог:
формат time::$$::$ENV{QUERY_STRING} Стоит сразу после коннекта в БД. |
|||
|
||||
ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
Itsys, судя по логу ISAPI работает не так, как написано. Либо мы как-то неверно его воспринимаем. На твоем месте я бы заменил IIS на Apache+mod_perl и спокойно работал дальше (я так и сделал в свое время).
Это сообщение отредактировал(а) ginnie - 20.8.2009, 21:58 -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
Itsys |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1338 Регистрация: 21.1.2008 Где: г. Москва Репутация: 2 Всего: 34 |
На самом деле я бы не парился, если бы все работало нормально... Но сайт работает работает и работает довольно шустро, но потом бац и виснет... на полминутки потом опять отвисает и все ок. В моменты подвисания в логе ошибок всплывает ошибка о том, что время подключения к базе остекло.
Я уже всю голову себе сломал... что же это может быть |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Perl" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |